Pytest框架的使用
程序员文章站
2022-03-11 16:16:31
...
Pytest框架的使用
1、Pytest介绍
基于unittest之上的单元测试框架
(1)、自动发现测试模块和测试方法;
(2)、断言使用assert+表达式即可;
(3)、可以设置会话(从运行所有用例开始-用例结束)级,模块(.py)级,类级(setupClass/teardownClass),
函数(测试用例)级的fixtures,数据准备+清理工作
(4)、有丰富的插件,300+以上。==allure
(5)、测试用例不一定要放在测试类当中。
安装命令:pip install pytest
安装html报告插件:pip install pytest-html
pytest插件地址:http://plugincompat.herokuapp.com/
pytest收集测试用例的规则:
(1)、默认从当前目录中收集测试用例,即在哪个目录下运行pytest命令,则从哪个目录当中搜索;
(2)、搜索规则:
a、符合命名规则,test_*.py 或者 *_test.py的文件;
b、以test_开头的函数名;
c、以Test开头的测试类,(没有__init__函数)当中,以test_开头的函数;
d、断言使用基本的assert即可;
Pytest的特点:
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、pytest之mark功能
mark机制 4.6
先注册 pytest.ini [pytest] markers=标签名:说明
去给用例打标签
@pytest.mark.已注册的标签名
测试类和模块: 类下面设置类属性值,模块下面设置全局变量。
pytestmarker=pytest.mark.已注册的标签名
多个标签:pytestmarker=[pytest.mark.已注册的标签名,pytest.mark.已注册的标签名]
3、pytest之命令运行用例
4、pytest之fixture功能
(1)、定义fixture
1.1 创建了一个conftest.py文件
1.2 在conftest中,创建fixture
1.3 定义函数,函数前面加上@pytest.fixture(scope=作用域)
函数内部:yield 隔开前置后后置的代码,之前是前置,之后是后置
yield 返回值(后面跟上返回值用于调用)
(2)、调用fixture
在测试用例.测试类 前面加上(@pytest.mark.usefixtures("fixture对应的函数名称"));
fixture对应的函数名称=它的返回值;
fixture对应的函数名称作为测试用例的参数,将返回值传给测试用例;
fixure 在conftest.py当中,定义的时候,就已经决定了他的用例域,决定了它的命运;
fixture可以有很多个;
无论在测试类、测试用例去主动调用fixture,都不能够改变它的命运;
调用就是决定在哪儿去使用它。在哪个测试类?
pytest的用例执行顺序:
基本原则:按照搜索规则,先匹配到的先执行。
1、文件名称:按名称名称顺序去搜索。先找到的,先去内部找用例。
2、在py文件内部:按照代码顺序去找用例。先找到的先执行。
(3)、fixture暂不支持与unittest同用,断言都用assert.
(4)、pytest之fixture参数化-多运行,pytest层级覆盖。测试用例与其同级或者在其子目录
(5)、fixture的scope参数
scope参数有四种,分别是'function','module','class','session',默认为function。
function:每个test都运行,默认是function的scope
class:每个class的所有test只运行一次
module:每个module的所有test只运行一次
session:每个session只运行一次
(6)、setup和teardown操作
setup,在测试函数或类之前执行,完成准备工作,例如数据库链接、测试数据、打开文件等
teardown,在测试函数或类之后执行,完成收尾工作,例如断开数据库链接、回收内存资源等
备注:也可以通过在fixture函数中通过yield实现setup和teardown功能
(7)、fixture定义与调用
定义 == 定命运。session、modle、class、function
调用 == 你准备把它在哪儿用?
session:整个会话都有效。
module:模块内有效。
class:类内有效。
function:测试用例内有效。
conftest.py文件。 === 定义多个fixture.
5、pytest之参数化—ddt
参数化 ddt 参数名 = 用例的参数名称
在测试用例的前面加上:
@pytest.mark.parametrize("参数名",列表)
参数名:用来接收每一项数据,并作为测试用例的参数;
@pytest.mark.parametrize("参数1,参数2",[(数1,数2),(数1,数2)]);
排列组合。多个参数的值排列组合。在一个用例前面 ,使用多个@pytest.mark.parametrize
示例:用例有4个:0,2/0,3/1,2/1,3
@pytest.mark.parametrize("x", [0, 1])
@pytest.mark.parametrize("y", [2, 3])
def test_foo(x, y):
pass
6、pytest之重运行
插件名称:rerunfailures
安装方法:pip install pytest-rerunfailures(失败case重复执行)
使用方式:
命令行参数形式:
命令:pytest -reruns 重试次数
比如:pytest --reruns 2 表示:运行失败的用例可以重新运行两次
命令:pytest --reruns 重试次数 --reruns-delay 次数之间设置的延时(单位:秒)
Pytest --reruns 2 --reruns-delay 5
表示失败的用例可以重新运行2次,第一次和第二次的时间间隔为5秒;
7、pytest之HTML报告
测试报告 = junitxml,html,allure
1、先装插件
2、命令行的参数:
--html=相对路径/report.html # 相对于pytest命令运行时,所在的根目录。
--alluredir=相对路径
3、安装allure命令行工具:下载,解压,配置环境变量
4、生成allure文件之后,用命令:allure serve alluredir
os.system("")
allure与jenkins的集成、重运行机制、pytest中的失败截图。
Pytest可以生成多种样式的结果: pytest plugin(下载插件用)
1、生成JunitXML格式的测试报告:命令:--junitxml = path
2、生成result log格式的测试报告:命令:--resultlog=report、log.txt
3、生成Html格式的测试报告:命令:--html=report\test_one_func.html(相对路径)
# pytest -v -s -m demo --html=Demo/PO_V6/Outputs/reports/pytest_run_reports.html
8、pytest之allure测试(allure测试报告)
https://docs.qameta.io/allure/#_pytest
推荐阅读
-
Thinkphp模板中使用自定义函数的方法_PHP
-
thinkphp使用literal防止模板标签被解析的方法
-
Ci框架一般用于开发什么类型的项目比较合适??
-
PHP使用file_get_content设置头信息的方法
-
Oracle 分析函数RANK(),ROW_NUMBER(),LAG()等的使用方法
-
Python中方法链的使用方法
-
如何使用jQUery获取选中radio对应的值
-
JavaEE基础day02 1.定义Java中的变量 四类八种 2.变量定义和使用的注意事项 3.数据类型的转换、强制数据类型转换4.算数运算符、比较运算符、逻辑运算符、赋值运算符、三元运算符
-
webpack3、4的基本的使用方法
-
基于spring+quartz的分布式定时任务框架实现