pytest简介及安装
谈起用例管理框架:python中的unittest、pytest;java中的testng 、junit都是比较熟悉的,本篇文章从安装到使用到结合插件多样化等层面来学习和介绍pytest这个自动化测试框架。
使用pytest来作为我们的用例管理框架,自然是因为它存在很多优势,总的来说就是:简单灵活,容易上手、支持参数化,如下列出:
1. 能够支持简单的单元测试和复杂的功能测试,它可以和所以的自动化测试工具selenium、、appium结合实现web自动化、接口自动化(pytest+requests)以及app自动化
2. 跳过用例以及失败用例重跑,测试用例的skip和xfail处理
3. 结合allure生成美观的测试报告
4. 和jenkins持续集成
5. 有很多的强大的插件
pytest-html 用于生成html测试报告
pytest-xdist 多线程运行
pytest-ordering 改变测试用例的执行顺序
pytest-rerunfailures 失败用例重跑
allure-pytest 生成allure测试报告
pytest-selenium 集成selenium
我们一般实际项目开发当中都会使用requrement.txt文件保存插件名称,然后通过pip install -r requirements.txt进行安装所以插件。
这么好用的框架,安装是第一步,我们使用以下命令进行安装。
##安装
pip install pytest
##查看版本号
pytest --version
pytest的使用规则
安装完成,就可以使用该框架来帮助我们进行更高效率的测试,在测试前,我们必须明白使用该框架要遵循的一些规则:
py文件名必须以test_开头或者_test结尾
类名必须以Test开头
测试用例(类内的方法)/函数名(类外)必须以test_开头
只有遵循这些规则,我们编写的用例pytest才能认识。才能更好的发挥它的作用:发现测试用例、执行测试用例、判断测试结果、生成测试报告。
pytest运行方式
pytest的运行方式有两种:主函数方式和命令行方式。
主函数方式
if_name_ == '_main_':
pytest.main(['-vs'])
这种方式运行,有一些命令需要知道
-v 输出更加详情的运行信息
-s 输出调试信息
-n=数字 多线程运行
--reruns=数字 失败用例重新运行
--html=./report.html 生成html报告
命令行方式
运行包: pytest (pytest会自动检索当前目录下所有符合规则的测试用例)
运行一个模块:pytest -vs test.py
只执行某一条测试用例:pytest 目录/模块.py::类名::用例名
使用命令行方式运行测试用例,也可以添加相应的参数, pytest --help: 获取所有参数列表 -x: 用例一旦失败(fail/error),就立刻停止 -m: 标记用例 -k: 执行包含某个关键字的测试用例 -v: 打印详细日志 -s 打印输出日志(一般-vs一块使用) --collect-only:(测试平台,pytest 自动导入功能)
这些参数也不需要背过,但是要有个印象,需要的时候再进行查找,来辅助我们测试。
跳过、标记及预期失败特殊场景处理
当我们需要跳过一些测试用例时,可以这么操作:
- ship: 始终跳过该用例 - 方式1: @pytest.mark.skp(reason="代码没有实现")- 方式2:在测试用代码中添加判断的语句def test_demo(): if not login(): pytest.skip("未登录无法运行该用例")
- skipif: 遇到特定情况跳过该测试用例,需要给定条件@pytest.mark.skipif(条件="", reason="打印提示信息内容")
当然需要标记一些用例的场景也很多:
- 场景:只执行符合要求的某一部分用例,把项目分为多个模块,然后指定模块名称执行
- 解决:在测试用例的上方加上pytest装饰器:@pytest.mark.标签名
- 执行 -m 标记自定义的相关用例 - pytest -s test_mark.py -m=标签名- pytest -s test_mark.py -m 标签名- pytest -s test_mark.py -m "not 标签名" (not:逻辑运算,表示不是标签名的都去执行
xfail: 遇到特殊情况,产生一个“期望失败”输出。
pytest前后置、夹具
pytest可以实现前后置的效果。
setup/teardown 在每个用例之前和之后执行一次
setup_class/teardown_class 在每个类之前和之后执行一次
也可以实现部分用例的前置:
@pytest.fixtrue(scope="作用域",params="数据驱动",autouse="自动执行",ids="自定义参数名字", name="重命名")
作用域:function(默认)、class、module、package/session
params :参数化( 支持,列表,元祖,字典列表,字典元祖)
autouse=True :自动使用,默认False
ids:当使用params参数化时 ,给每一个值设置一个交量名
name:给表示的是被@pytest fixture标记的方法取一个别名
pytest高级用法fixture
fixture 作用
Fixture是在测试函数运行前后,由pytest执行的外壳函数,代码可以定制,满足多变的测试需求,功能包括: 定于传入测试中的数据集 配置测试前系统的初始状态 为批量测试提供数据源等
Fixture是pytest用于将测试前后进行预备,清理工作的代码分类核心测试逻辑的一种机制
fixture用法
类似setup teardown功能,但比setup teardown更灵活 直接通过函数名调用或者装饰去@pytest.mark.usefixtures('test1') 允许使用多个Fixture 使用autouse自动应用,如果由返回值,需要穿fixture函数名 作用域 session>module>class>function
pytest yield
以上fixture记录的仅仅是setup,即测试用例运行前的操作,如果需要加上teardown的操作,需要在fixture函数中加入 yield
pytest接口断言
assert 'access_token' in rep.json() and 1==1
pytest结合allure-pytest生成allure测试报告
放到没有中文路径下,然后把bin目录配置到环境变量的path里面
配置完成,allure --version 可查看版本
重启pycharm,通过allure --version 验证;安装allure-pytest
执行命令
- 生成临时的json文件的报告 在pytest.ini里加命令 addopts = -vs --alluredir ./temp
- 通过临时的json文件生成allure报告 在main函数里 os.system("allure generate ./reports -clean")
4.allure报告可进行各种美化和定制
以上是学习记录,持续加更...今天好热,喝了芒果蛋蜜汁~
版权归原作者 进阶的kaola 所有, 如有侵权,请联系我们删除。