七、python - pytest测试框架介绍
1. 框架特点
- pytest:基于unittest开发,易用性好,信息更详细,插件众多
- 1. 简单灵活,容易上手,文档丰富;
- 2. 支持参数化,可以细粒度地控制要测试的测试用例;
- 3. 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);
2. 第三方插件
- pytest-selenium(集成selenium)
- pytest-html(完美html测试报告生成)
- pytest-rerunfailures(失败case重复执行)
- pytest-xdist(多CPU分发)
- pytest--ordering(控制测试运行的顺序)
3. 编写规则
- 测试文件以test_开头(以_test结尾也可以)
- 测试类以Test开头,并且不能带有 init 方法
- 测试函数以test_开头
4. 断言
- 断言使用基本的assert即可
5. console常用参数
- -v 用于显示每个测试函数的执行结果
- -q 只显示整体测试结果
- -s 用于显示测试函数中print()函数输出
- -x, --exitfirst, exit instantly on first error or failed test
- -m 只运行带有装饰器配置的测试用例
- -h 帮助
6. 装饰器
- @pytest.mark.parametrize() (单个参数、多个参数)
7. 运行顺序
- pip install pytest-ordering
- 借助于装饰器@pytest.mark.run(order=1)控制测试运行的顺序
8. 测试报告
- 安装pytest-html:pip install -U pytest-html 使用:py.test test_pyexample.py --html=report.html
- 更详细的测试报告:pip install pytest-cov
9. 多进程运行
- 安装pytest-xdist:pip install -U pytest-xdist
- 使用:py.test test_pyexample.py -n NUM 其中NUM填写并发的进程数。
10. 重新运行失败的用例
- 安装 pytest- rerunfailures
- 命令:pytest --reruns 重试次数
- 命令:pytest --reruns 重试次数 --reruns-delay 次数之间的延时设置(单位:秒)
- 另外也可以通过装饰器的方式配置:@pytest.mark.flaky(reruns=3, reruns_delay=5)
扩展:fixture
fixture是一些函数,pytest会在执行测试函数之前(或之后)加载运行它们
fixture中的代码可以定制
pytest使用conftest.py文件集中管理fixture
预处理和后处理
fixture的作用是为了抽离出重复的工作和方便复用,为了更精细化控制fixture(比如只想对数据库访问测试脚本使用自动连接关闭的fixture),pytest 使用作用域来进行指定fixture的使用范围
在定义fixture时,通过 scope 参数声明作用域,可选项有:
function: 函数级,每个测试函数都会执行一次fixture;
class: 类级别,每个测试类执行一次,所有方法都可以使用;
module: 模块级,每个模块执行一次,模块内函数和方法都可使用;
session: 会话级,一次测试只执行一次,所有被找到的函数和方法都可用
最简单使用fixture方式是作为测试函数参数
执行结果可以清楚看到各fixture的作用域和执行顺序
重命名