pytest框架
特点:
- 容易上手, 入门简单, 文档丰富, 文档中有很多参考案例
- 支持简单的单元测试和复杂的功能测试
- 支持参数化
- 执行测试用例过程中, 支持跳过操作
- 支持重复失败的case
- 支持运行Nose, unittest编写测试用例
- pytest支持很多第三方插件
- 方便和持续集成工具集成
1. pytest断言
断言方法: assert result
2. pytest方法级别的fixture
- pytest方法级别的fixture是针对每个测试方法, 在执行测试方法前会执行fixxture初始化操作, 在执行完测试方法后, 执行fixture销毁操作
- 初始化操作方法: def setup(self): 方法来实现
- 销毁的操作方法: def teardown(self): 方法来实现
3. pytest类级别的实现
- pytest类级别的fixture针对每一个测试类的初始化和销毁操作, 可以放在一下两个方法中
- 类级别初始化的方法: def setup_class(self):
- 类级别销毁的方法: def teardown_class(self):
- 方法名称固定, 不能修改
4. pytest配置文件
pytest的配置文件有固定的三个名称: pytest.ini tox.ini
[pytest] # 标识当前文件是pytest的配置文件 addopts = -s -v # 标识pytest执行时增加的参数 testpaths = ./scripts # 匹配搜索目录 python_files = test_*.py # 匹配测试文件 python_classes = Test* # 匹配测试类 python_functions = test_* # 匹配测试方法
5. 控制用例的执行顺序
- unittest测试用例执行顺序是根据测试方法名称的assic码值大小来的, 值越小排在越前面
- pytest正常情况下是根据测试方法的从上到下的顺序来执行
- 可以通过pytest-ording插件来控制pytest测试方法执行的顺序
- 使用
- @pytest.mark.run(ordeer=x) # x表示的是整数(既可以是整数也可以是负数)
- 全为负数或者整数时, 值越小, 优先级越高
- 既有正数, 又有负数, 那么正数优先级高
- 没有确定执行顺序的用例优先于负数
6. 失败重试
- 安装插件pytest-rerunfailures
- 使用
- 在addopts参数行中增加对应的参数配置项: --reruns x(x为一个整数, 代表要执行几次)
- 当重复执行成功时, 就不会再重复执行
7. 跳过
- @pytest.mark.skipif(condition, reason=None)
- condition表示的是跳过的条件
- 这里的reason参数必填
- @pytest.mark.skip(reason=None)
- reason表示的是跳过的原因
8. 数据的参数化
- pytest参数化的实现: @pytest.mark.parameterize(argnames, argvalues)
- argnames表示的是参数的名字, 是一串字符, 多个参数之间由逗号隔开 "username, password"
- argvales 表示的是参数化的数据, [("1111", '1234'), ("2222", '1111')]
- argname订单参数个数要与argvalues例面的测试数据的个数要相同, 否则会报错