ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

pytest

2019-06-24 11:42:58  阅读:388  来源: 互联网

标签:allure fixture pytest mark 用例 测试用例


 1. Pytest介绍
基于unittest之上的单元测试框架
(1)、自动发现测试模块和测试方法 (2).断言使用assert达式可
(3).可以设置会话(从运行所有用例开始用例结束)级 ,模块( .py)级,类级(setupClass/teardownclass) ,函数(测试用例)级的fixtures,
数据佳备清理工作 (4)、有丰富的插件, 388+以上。==allure (5)、测试用例不定要放在测试类当中。         安装命令: pip install pytest
        安装htm1报告插件: pip install pytest-html
pytest插件地址: http://plugincompat . herokuapp. com/pytest

收集测试用例的规则:
(1)、默认从当前目录中收集测试用例,即在哪个目录下运行pytest命令,则从哪个目录当中搜索; (2). 控索规则
a.符合命名规则,test *.py或者* test.py的文件;b.以test.开头的函数名
C.以Test开头的测试类,(没有init_ 函数)当中,以test开头的函数
断言使用基本的assert即可;Pytest的特点:
1.简单灵活,容易上手,文档丰富;
2.支持参数化,可以细粒度地控制要测试的测试用例;
3.能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appniun等自动化测试
接口自动化测试( pytest+requests ) ; :
4、pytest具有很多第 三方插件,并且可以自定义展,比较好用的如pytest- selenium (集成selenium )、
pytest-html (完美htm1测试报告生成)、pytest-rerunfailures (失败case重复执行)、pytest-xdist (多CPU分发)等;5、测试用例的skip和xfail处理
6.可以很好的和CI工具结合,例jenkins

2. pytest之 mark功能 1、mark机制 4.6
1、先注册 pytest.ini [pytest] markers=标签名:说明
2、去给用例打标签
@pytest.mark.已注册的标签名

测试类和模块: 类下面设置类属性值,模块下面设置全局变量。
pytestmarker=pytest.mark.已注册的标签名
多个标签:pytestmarker=[pytest.mark.已注册的标签名,pytest.mark.已注册的标签名]
3. pytest之命令运行用例(pass)
4. pytestzfixture功能
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对应的函数名称作为测试用例的参数,将返回值传给测试用例

3. fixture暂不支持与unittest同用 ,断言都用assert   fixure 在conftest.py当中,定义的时候,就已经决定了他的用例域,决定了它的命运。
 fixture可以有很多个。

无论在测试类、测试用例去主动调用fixture,都不能够改变它的命运。
 调用就是决定在哪儿去使用它。在哪个测试类?
 例子:宫廷剧:一等丫环,二等丫环,基层丫环
景仁宫、阿哥宫、净身房,慎刑司
pytest的用例执行顺序:
基本原则:按照搜索规则,先匹配到的先执行。
1、文件名称:按名称名称顺序去搜索。先找到的,先去内部找用例。
2、在py文件内部:按照代码顺序去找用例。先找到的先执行。
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只运行一次  2、fixture
定义 == 定命运。session:皇帝 modle:贵妃 class:公主/太子 function:官员
调用 == 你准备把它在哪儿用?
session:整个会话都有效。整个皇宫,圣旨。
module:模块内有效。XX宫,宫内有效。
class:类内有效。
function:测试用例内有效。
conftest.py文件。 === 定义多个fixture.   5. setup和teardown操作
setup ,在测试函数或类之前执行,完成准备工作,例如数据库链接、测试数据、打开文件等teardown ,在测试函数或类之后执行, 完成收尾工作,例如断开数据库链接、回收内存资源等注:也可以通过在f ixture函数中通过yield实现setup和teardown功能

6参数化 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


7、测试报告 = junitxml,html,allure # allure测试报告
https://docs.qameta.io/allure/#_pytest
7.1、先装插件
7.2、命令行的参数:
--html=相对路径/report.html # 相对于pytest命令运行时,所在的根目录。
--alluredir=相对路径

7.3、安装allure命令行工具:下载,解压,配置环境变量
4、生成allure文件之后,用命令:allure serve alluredir

# os.system("") python调用命令行


# allure与jenkins的集成、重运行机制、pytest中的失败截图。








标签:allure,fixture,pytest,mark,用例,测试用例
来源: https://www.cnblogs.com/minghong/p/11075875.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有