用例编写规范
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,需额外安装,是目前最主流的测试框架,拥有超级丰富的第三方插件。