• 14
  • 15
分享

  1、Unittest

  Unittest是Python标准库中自带的单元测试框架。有时候也被称为PyUnit。就像JUnit是Java语言的标准单元测试框架一样,Unittest(PyUnit)则是Python语言的标准单元测试框架,官方维护。支持自动化测试,测试用例的初始化和关闭,测试用例的聚合等功能。

1-1.png

  Unittest中最核心的四个概念是:testcase(测试用例), testsuite(测试用例集),testrunner(测试执行),testfixture(测试装置)。

  Testcase测试用例,每个测试方法以 test 开头,自动被Unittest识别的。

  TestSuite测试用例集,通过类(class)的方式,将测试用例组织在一起。

  Testloader用来加载TestCase到TestSuite中,loadTestsFrom__()方法,寻找TestCase,创建它们的实例,然后add到TestSuite中,再进行返回。

  TextTestRunner执行测试用例,run(test)会执行TestSuite/TestCase中的run(result)方法,测试的结果会保存到TextTestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息。

  fixture测试用例环境的搭建和销毁。setUp()和tearDown()两个方法,在每个测试方法执行前以及执行后执行一次,setUp用来为测试准备环境,tearDown用来清理环境,以备之后的测试。

  Unittest使用流程:定义一个TestCase,然后由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中,我们通过命令行或者unittest.main()执行时,main会调用TextTestRunner中的run来执行,或者我们可以直接通过TextTestRunner来执行用例。

  参数:verbosity参数可以控制执行结果的输出,0是简单报告、1是一般报告、2是详细报告。可以通过addTest和addTests向suite中添加case或suite,也可以用TestLoader的loadTestsFrom__()方法。使用setUp()、tearDown()、setUpClass()以及tearDownClass()可以在用例执行前布置环境,以及在用例执行后清理环境。可以通过skip,skipIf,skipUnless装饰器跳过某个case,或者用TestCase.skipTest方法。参数中加stream,可以将报告输出到文件:可以用TextTestRunner输出txt报告,以及可以用HTMLTestRunner输出html报告。可以结合代码覆盖率工具coverage,进行代码覆盖率统计。

  可以统计行和分支覆盖率(coverage run --branch test.py)。

  2、Autotest

  Autotest是Google、Redhat、IBM公司联合开发的分布式自动化测试框架,兼顾软硬件测试。基于Python,用于操作系统内核冒烟测试、服务器硬件验证等。使用Autotest有两个前提:被测机上需安装Python;测试发起机器与被测机间要建立无密码SSH信任关系。

  3、Testoob

  testoob是一个针对python的高级单元测试框架。它集成了现有的PyUnit(模块“UNITTEST”)测试套件,便于使用和进行扩展。目前使用人数和社区生态均较少。

  4、Doctest

  Doctest是一个Python发行版自带的标准模块,利用文档的形式模拟代码的执行操作。采用交互式会话的Python代码片段,测试执行并验证结果,代码和测试用例没有进行分离。

  5、The Haskell Test Framework

  允许一种简单方便的方式进行黑匣子测试,自动收集测试定义的自定义预处理器。预处理器允许用准确的文件名和行号信息报告失败的测试用例。可以为失败的测试生成高度可读的输出,目前用于单元测试使用人数较少。

  6、Twisted Trial

  对PyUnit的扩展,trial是Twisted的测试脚本程序,针对Linux的,编译好的trial在Windows下无法直接运行,目前用于单元测试使用人数较少。

  7、ShouldDSL

  分布式测试工具,应用较少。

  8、Green

  Python测试运行程序,应用于单元测试人数较少。

  9、Mock

  Python用于支持单元测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为,然后验证后续的执行是否正确。在进行单元测试的时候,可以指定任何对象的返回值,便于测试对外部接口有依赖的代码(导入型代码)。从Python 3.3开始,mock模块已经被合并到标准库中,被命名为unittest.mock,可以直接进行使用。

  10、MOX

  Python的基于mock的单元测试框架。应用案例和使用人数相对较少。

  11、Tox

  通用的虚拟环境管理和测试命令行工具。tox能够让我们在同一个Host上自定义出多套相互独立且隔离的python环境。用于运行静态代码分析、测试工具和自动化程序包构建,但应用单元测试较少。

  12、Pytest

  Pytest是根据MIT许可的条款发行的免费和开源软件。

  Pytest是Python另一个第三方单元测试库。它的目的是让单元测试变得更容易,并且也能扩展到支持应用层面复杂的功能测试。pytest兼容unittest框架的代码,可以用来运行Unittest测试用例。

  Pytest的特性有:

  1)支持用简单的assert语句实现丰富的断言,无需复杂的self.assert*函数。

  2)自动识别测试模块和测试函数。

  3)兼容unittest和nose测试集。

  4)支持Python3和PyPy3。

  5)丰富的插件生态,已有300多个各式各样的插件,和活跃的社区。

  用例编写:pytest支持函数、测试类形式的测试用例。并且可以方便地使用 assert语句进行断言,不用担心在 nose 或 unittest 中产生的缺失详细上下文信息的问题。

  用例发现和执行:unittest 和 nose 所支持的用例发现和执行能力,pytest 均支持。pytest 支持用例自动(递归)发现:

  默认发现当前目录下所有符合 test_*.py 或 *_test.py 的测试用例文件中,以 test 开头的测试函数或以 Test 开头的测试类中的以 test 开头的测试方法。执行指定用例:指定测试文件路径(pytest /path/to/test/file.py)、

  指定测试类(pytest /path/to/test/file.py:TestCase)、指定测试方法(pytest another.test::TestClass::test_method)、指定测试函数(pytest /path/to/test/file.py:test_function)。

  测试装置(Fixtures):它不但能实现setUp和tearDown这种测试前置和清理逻辑,还其他非常多强大的功能。

  1)pytest支持依赖注入机制,你无需通过from xx import xx的形式显示导入,只需要在测试函数的参数中指定同名参数即可。

  2)共享:在 pytest 中,同一个测试夹具可被多个测试文件中的多个测试用例共享。只需在包(Package)中定义 conftest.py 文件,并把测试夹具的定义写在该文件中,则该包内所有模块(Module)的所有测试用例均可使用 conftest.py 中所定义的测试夹具。

  3)nittest 和 nose 均支持测试前置和清理的生效级别:测试方法、测试类和测试模块。pytest 的测试夹具同样支持各类生效级别,且更加丰富。通过在 pytest.fixture中指定scope参数来设置:function——函数级,即调用每个测试函数前,均会重新生成 fixture;class——类级,调用每个测试类前,均会重新生成 fixture;module——模块级,载入每个测试模块前,均会重新生成 fixture;package——包级,载入每个包前,均会重新生成 fixture;session ——会话级,运行所有用例前,只生成一次 fixture,通常用于全局系统初始化。

  4)测试前置和清理:pytest 的测试夹具也能够实现测试前置和清理,通过 yield 语句来拆分这两个逻辑。yield smtp_connection 及前面的语句相当于测试前置,通过 yield 返回准备好的测试资源 smtp_connection; 而后面的语句则会在用例执行结束(确切的说是测试夹具的生效级别的声明周期结束时)后执行,相当于测试清理。

1-2.png

  5)跳过测试和预计失败:pytest 除了支持unittest和nosetest的跳过测试和预计失败的方式外,还在 pytest.mark 中提供对应方法:通过skip装饰器或 pytest.skip函数直接跳过测试;通过skipif按条件跳过测试;通过 xfail预计测试失败。

  6)子测试参数化测试:pytest除了支持unittest中的 TestCase.subTest,还支持一种更为灵活的子测试编写方式,也就是参数化测试,通过 pytest.mark.parametrize 装饰器实现。在下面的示例中,定义一个test_eval 测试函数,通过 pytest.mark.parametrize 装饰器指定 3 组参数,则将生成 3 个子测试。

1-3.png

  用例执行结果:不需要main函数,pytest自动识别test_开头的测试方法(用例)。使用 pytest 去执行用例时,它会输出详细的(且是多种颜色)上下文信息,既输出了测试代码上下文,也输出了被测变量值的信息。通过或不通过会用不同的颜色进行区分,测试结果输出布局更加友好易读。相比于 nose 和 unittest,pytest 允许用户使用更简单的方式编写测试用例。

  13、Nose/nose2

  nose是Python的一个第三方单元测试框架,完全兼容 unittest。python自带框架unttest的扩展,使测试更简单高效,也是一个开源的项目。

  nose已经进入维护模式,继承nose的是nose2,但要注意的是,nose2并不支持nose的全部功能,nose2的主要目的是扩展Python的标准单元测试库unittest,因此它的定位是“带插件的unittest”。nose2提供的插件,例如测试用例加载器,覆盖度报告生成器,并行测试等内置插件和第三方插件,让单元测试变得更加完善。

  nose 相较于 unittest 一个最大的优势就是插件体系,自带了很多有用的插件,也有丰富的第三方插件,当 nose 本身不能够完全满足我们的测试需求时,可以通过安装插件,并在 nosetests 命令行指定该插件所提供的特定参数即可非常容易的使用插件。

1-4.png

表1 单元测试工具对比(来源:GitHub)



作者:郎显磊 曹睿   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 在 Postman 中还有两个很重要的概念是环境Environment 和变量Variable。在讲解变量之前,需要先讲解一下环境,因为很多变量都和环境有关系。什么是环境 Environment?环境是由一组键值对形式的环境变量构成的变量组合。它有什么用?在做接口测试的时候,通常需要在本地调试,或者需要在开发环境、测试环境及开发环境运行,不同的环境的域名(host)、数据库配置等设置不同。通过配置不同的环境变量值,再在请求中使用不同的值,那么可以通过切换环境来切换不同的值,以达到不用修改任何请求就能在任意环境运行。在团队使用 Postman 的过程中,无需每个人都去配置这些环境,环境可以导出为...
            0 1 1575
            分享
          • 1.monkey的简单介绍Monkey测试是Android app自动化测试的一种手段,Monkey测试本身非常简单,就是模拟用户的按键输入,触摸屏输入等,看设备是否出异常。当Monkey程序在模拟器或设备运行的时候,如果用户出发了比如点击,触摸,手势或一些系统级别的事件的时候,它就会产生随机事件,所以可以用Monkey用随机重复的方法去测试app。一般情况下单个app monkey 模拟测试10万次足矣。2.以下是app monkey测试的详细步骤先进入cmd界面,输入adb devices,查看是否正常连接;输入adb logcat | findstr START 监控app,打开你要测试...
            13 13 1358
            分享
          •    测试结果(图示+文字说明结论):  图1:按照任务来呈现二分式成功率  图2:按照2类用户类型来呈现二分式成功率  图3:成功等级呈现  图4:每个任务的平均时间呈现  图5:综合多种因素的严重性评估 附件提交:访谈录音文件 + 原始数据excel表(3张)  一、测试基本信息 -3  测试网站:  携程  测试目标:  通过测试携程网站发掘用户体验存在的问题,并就出现问题提出合理的建议 - 用户对网站使用程度的满意状况如何  测试规则制定:  每一次任务都需要有清晰界定的开始和结束状态,测试者的每一个任务被标记为成功或失败    1.任务成功:每...
            1 2 4236
            分享
          • 环境配置是jmeter学习的第一步,每次换电脑就得重新配置,为了防止忘记,自己就整理了一下自己的设置方案。一、 JDK安装JMeter是 java 应用,所以需要 java 环境,下载 jdk 版本,当前推 荐 8, 下 载 链 接 : https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html安装 jdk,配置 jdk环境变量,参考链接:https://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3....
            1 1 1896
            分享
          • 在做性能测试过程中有一件很重要的事情需要去完成,那就是分析性能指标数据,可以这样说做性能测试的整个过程都跟指标数据息息相关,下面来说一下常见的一些性能指标数据:吞吐量并发数思考时间响应时间点击数资源利用率网络吞吐量错误率系统稳定性吞吐量(Throughput):指的是单位时间内处理的客户端请求数量,直接体现软件系统的性能承载能力。通常情况下,吞吐量用“请求数/秒”或者“页面数/秒”来衡量。从业务角度来看,吞吐量也可以用“业务数/小时”、“业务数/天”、“访问人数/天”、“页面访问量/天”来衡量。从网络角度来看,还可以用“字节数/小时”、“字节数/天”等来衡量网络的流量。并发(Concurren...
            0 0 835
            分享
      • 51testing软件测试圈微信