您现在的位置是:首页 >技术教程 >pytest网站首页技术教程
pytest
一、pytest是单元测试框架
单元测试:对软件开发中,对软件的最小单位(函数、方法)进行正确性检查测试。
java框架:jnuit和testing。
python框架:unittest和pytest。
流程:i:测试发现:从多个文件中找到测试用例。
ii:测试执行:按照一定顺序和规则去执行并生成结果。
iii:测试判断:通过断言判断预期结果和实际结果的差异。
iV:测试报告:统计测试进度,耗时、通过率,生成测试报告。
二、单元测试框架和自动化测试框架的关系
自动化测试框架:
- 提高测试效率,降低维护成本。
- 减少人工的干预提高测试的准确性,增加代码的重用性。
- 核心思想让不懂代码的人也能实现自动化测试。
单元测试框架只是自动化测试框架的组成部分之一。
三、pytest简介
python成熟的单元测试框架,更灵活。
可以和selenlum,request,applum结合实现web、接口、app自动化。
可以实现测试用例的跳过和失败用例重试。
pytest可以和allure生成美观的测试报告。
pytest可以和jenkins持续集成。
pytest有很多强大的插件:pytest-html(生成html格式的自动化测试报告)
pytest-xdlst(测试用例分布式执行,多CPU分发)
pytest-ordering(改变测试用例的执行顺序)
pytest-returnfailures(用例失败重跑)
allure-pytest(生成美观的测试报告)。
插件批量下载:创建requirement.txt,将插件的名称下上,然后执行pip install -r requirement.txt即可。
四、使用pytest
- 模块名必须以test_开头或者_test结尾。
- 测试类必须以Test开头,并不能有init方法。
- 测试方法必须以test开头。
执行测试用例方式一:
- 运行所有:pytest
- 指定模块:pytest -vs test_login.py
- 指定目录: pytest -vs ./interface_testcase
-s 表示输出调试信息,包括print打印信息。
-v 表示输出详细信息
-vs 表示v和s一起使用
-n 表示多线程使用:pytest -vs ./testcase/test_login.py -n 2
执行测试用例方式二:
通过读取pytest.ini配置文件运行。
pytest.ini文件是pytest的单元测试框架的配置文件。
五、分组执行(冒烟、分模块执行)
在测试用例文件中添加pytest.mark.xxx标记用例属于什么
pytest.mark.run(order=2) 通过设置不同的order设置用例执行顺序
pytest.mark.skip(reason="xxx") 跳过测试用例,原因xxx
pytest.mark.smoke 设置该用例是smoke类型的
在全局配置文件pytest.ini添加上不同的分组
执行pytest -m "smoke" #这样-m表示分组,就是执行通过smoke标记的用例。
在pytest.ini 文件的addopts参数追加参数生成报告
--html ./report/report.html 在report目录下生成report.html的测试报告
六、setup/teardown,setup_class/teardown_class
setup是每个测试用例之前的初始化代码,每个测试用例执行之前都会调用
teardown是每个测试用例之后的扫尾代码,每个测试用例执行之后都会调用
setup_class是每个类执行之前的初始化工作,只会执行一次
teardown_class是每个类执行之后的扫尾工作,只会执行一次
可以通过@pytest.fixture 来实现部分用例的前后置函数调用。
七、结合allure生成报告
1、下载,解压配置path路径
https://github.com/allure-framework/allure2/release
path路径: 找到bin文件路径,如:E:allure-2.13.7in 配置到path中
验证:allure --version。如果dos可以验证但是pycharm验证失败,重启pycharm
2、加入命令生成json格式的临时报告
--alluredir /temp
3、生成allure报告
在all.py的main函数之后添加
os system('allure generate /temp -o ./report --clean')
八、接口测试Request库
用来发送http请求以及响应的python的第三方库,主要用于接口自动化。
//安装 pip install requests //常用方法 request.get() request.post() //data和json传参,区别在于请求头的Content-Type来区别 request.put() request.delete()