1.pytest简介
pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点:
- 1、简单灵活,容易上手,文档丰富;
- 2、支持参数化,可以细粒度地控制要测试的测试用例;
- 3、能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);
- 4、pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等;
- 5、测试用例的skip和xfail处理;
- 6、可以很好的和CI工具结合,例如jenkins
2.安装
3.编写规则
- 测试文件以test_开头(以_test结尾也可以)
- 测试类以Test开头,并且不能带有?init?方法
- 测试函数以test_开头
- 断言使用基本的assert即可
4.Console参数介绍
- -v 用于显示每个测试函数的执行结果
- -q 只显示整体测试结果
- -s 用于显示测试函数中print()函数输出
- -x, --exitfirst, exit instantly on first error or failed test
- -h 帮助
5.Pytest标记
5.1Pytest查找测试策略
- 默认情况下,pytest会递归查找当前目录下所有以test开始或结尾的python脚本
- 并执行文件内的所有以test开始或结束的函数和方法
5.2标记测试函数
- 由于某种原因(如test_func2的功能尚未开发完成),我们只想执行指定的测试函数。在pytest中有集中方式可解决
- 第一种,显示指定函数名,通过 :: 标记? ?test_no_mark.py::test_func1
- 第二种,使用模糊匹配,使用-k选项标识? pytest -k func1_no_mark.py
- 第三种,使用pytest.mark在函数上进行标记
5.3给用例打标签?
- 【pytest】
- marketrs=
- do:do
- undo:undo
6.Pytest参数化处理
在pytest中,也可以使用参数化测试,即每组参数都独立执行一次测试,使用的工具:pytest.mark.paramterize(argnames,argvalues)
6.1数据格式
6.2增加可读性
- 参数化装饰器有一个额外ide参数ids,可以标识每一个测试用例,自定义测试数据结果的显示,为了增加可读性
- 可以标记每一个测试用例使用的测试数据是什么,适当的增加一些说明
6.3自定义id做标识
- 除了使用ids参数增加输出可读性外,还可以在参数列表的参数旁边定义一个id值来做标识
- 跟普通函数差不多,唯一区别就是在函数上加个装饰器@pytest.fixture()
6.4 Pytest fixture
- 跟普通函数差不多,唯一区别就是在函数上加个装饰器@pytest.fixture()
- fixture命名不要以test开头,跟用例区分开。fixture是有返回值的,没有返回值默认为None
- 用例调用fixtue的返回值,直接就是吧fixture的函数名称当作变量名称
6.4.1fixture的scope参数
- fixture命名不要以test开头,跟用例区分开。fixture是有返回值的,没有返回值默认为None
- 用例调用fixtue的返回值,直接就是吧fixture的函数名称当作变量名称
- function:每个test都运行,默认是function的scope
- class:每个class的所有test只运行一次
- module:每个module的所有test只运行一次
- session:每个session只运行一次
6.4.2 setup和teardown操作
- setup,在测试函数或类之前执行,完成准备工作,例如数据库链接、测试数据、打开文件等
- teardown,在测试函数或类之后执行,完成收尾工作,例如断开数据库链接、回收内存资源等
- 模块级(setup_module/teardown_moudle)开始于模块始末,全局的
- 函数级(setup_function/teardown_function)只对函数用例生效(不在类中)
- 类级(setup_class/teardown_class)只在类中前后云型一次(在类中)
- 方法级(setup_method/teardown_method)开始于方法始末(在类中)
- 类里面的(setup/teardown)运行在调用方法的前后
- 备注:也可以通过在fixture函数中通过yield实现setup和teardown功能
|