16 unittest和pytest比较.md

用例编写规范

unittest提供了test cases、test suites、test loader、test fixtures、test runner相关的类,让测试更加明确、方便、可控。
使用unittest编写用例,必须遵守以下规则:

1. 测试文件必须先import unittest
2. 测试类必须继承unittest.TestCase       ** 必须要有测试类,测试方法放在测试类里
3. 测试方法必须以“test_”开头
4. 测试类必须要有unittest.main()方法

python的第三方测试框架,是基于unittest的扩展框架,比unittest更简洁,更高效。使用pytest编写用例,必须遵守以下规则:

1. 测试文件名必须以“test_”开头或者"_test"结尾(如:test_ab.py)
2. 测试方法必须以“test_”开头。
3. 测试类命名以"Test"开头。              ** 可以没有测试类,直接使用测试方法

前置和后置

unittest提供了针对类级别的和用例级别前置后置

1. 类级别:setUpClass/tearDownClass
2. 方法级别(用例级别):setUp/tearDown

pytest提供了会话级、函数级、类级、方法级的@pytest.fixture(scope=‘session’),比unittest的setUp/tearDown更灵活。

1. scope='session'     所有选中的.py文件中所有用例运行开始前和结束后,仅执行一次,回话级别
2. scope='module'      单个.py文件中所有用例开始前和结束后,仅执行一次,模块级别
3. scope='class'       整个类方法开始前和结束后仅执行一次,类级别
4. scope='function'    只对函数/方法级用例生效 

参数化

unittest需依赖ddt库,使用@ddt.data()装饰器

pytest直接使用@pytest.mark.parametrize 装饰器

用例筛选

unittest默认执行全部用例,可使用test loader逐条加载进行过滤

pytest可以执行特定用例和跳过执行。

@pytest.mark.smoke  执行命令加上参数“-m”即可运行标记的用例
@pytest.mark.skip   可以跳过执行

执行顺序

unittest的main()方法执行用例的顺序是按照测试类、测试方法的名字的ASCII顺序来执行测试方法。unittest中要想改变文件执行顺序有两种方式

1. test_a_*、test_b_*、....
2. 调整test loader的加载顺序

pytest执行用例的顺序文件之间按照ASCLL码排序,文件内的用例按照从上往下执行。pytest可以通过pytest-ordering库来实现顺序调整。

pytest.mark.last           ---最后一个执行
pytest.mark.run(order=1)     ---order来确定执行顺序

断言

unittest提供了assertEqual、assertIn、assertTrue、assertFalse等固定断言方式。

assertEqual(1=1)

pytest可直接自定义断言表达式。

assert 1===1

测试报告

unittest使用HTMLTestRunnerNew库

pytest有pytest-HTML、allure插件,并有jenkins+allure持续集成方案

失败重运行

unittest无重运行功能

pytest支持用例执行失败重跑,pytest-rerunfailures插件

其他

unittest一个python标准库,无需额外安装,很多的测试框架都是基于unittest而扩展出来的,包括pytest。

pytest兼容unittest,需额外安装,是目前最主流的测试框架,拥有超级丰富的第三方插件。

猜你喜欢

转载自blog.csdn.net/qq_25672165/article/details/107773607
16
今日推荐