-
pip intall pytest—— pip show pytest
-
pip install pytest-sugar –命令行运行更好看
-
pip install pytest-html 原生态报告模板
-
pip install allure-pytest
-
allure的压缩包解压后配置环境变量—–能够执行allure命令
1. pytest 框架
用例编写规则:三test
“三test” : test.py Test类 test**方法
用例运行
两种运行模式(在setting—tools—python Intergrated Tools)
1.Pytest运行模式:
点击小箭头即可运行、右键run运行也可以(pytest模式下不会执行到mian下的代码)
unitest运行模式:
- 可以执行到main下的代码,通过pytest.main来收集用例并执行,并生成报告
- pytest.main([file]) # file 表示当前目录
- pytest.main([‘test_***.py’, ‘-s’ ]) # -s为打印信息,如有print就会打印出来
- pytest.main([‘test_***’,’-s’,’–alluredir’, ‘../report/tmp’]) # 生成报告 + 报告路径
- pytest.main([‘test_login.py’,’-s’,’–alluredir’,’../report/tmp’,’–clean-alluredir’]) # 清空之前的报告 +再生成报告
除了使用 –clean-alluredir 参数清空之前的报告文件,还可以使用如下笨方法
打开报告的两种方法
打开报告方式1:启动allure服务
allure serve “报告路径” (推荐)
打开报告方式2:生成html文件等报告文件
allure generate “报告路径” –o “生成html的路径” –-clean (cle an表示清除之前html )
命令行运行
命令行运行的参数和unittests模式下main中的写法类似,参数是一样的
pytest test_***.py –s
命令行运行,做一个bat用例文件
cd ./testCase
pytest -s –alluredir ../outFiles/report/tmp –clean-alluredir
allure serve ../outFiles/report/tmp
其他参数
用例筛选执行 -m
装饰器的 跳过 ,skip
在回归测试里面,开发修改了一个业务的bug,需要对部分接口做业务测试,就可以筛选出对应的业务模块的接口
mark标签
- 模块、类、方法都可以加上标签
- 定义:@pytest.mark.shop_list
- 运行时 pytest -s -m 标签名 pytest,main([‘—.py’,’-m’,’标签名’])
给测试类,方法打标签,执行标签运行deselected表示未选中的用例数
打了标签之后,会出现一些警告,pytest不认识这些标签
- 工程目录下,新建pytest.ini
- 插件下载 setting plugins 搜索 ini (安装后才有图标)
pyttest.ini中定义标签,让pytest认识标签,解除警告
-m的其他用法
-k, -v
如果想在接口下,再筛选具体的用例,利用读取excle来筛选
pass-50期
skip装饰器跳过
pytest中的跳过用例———记录在面试题回答里
命令行中,运行时 -s,改成 rs,会更好的展示原因(命令窗口中)
在自动化测试过程中,会遇到功能阻塞,功能未实现,就可以用跳过 skip 用例,这样可以IBU用注释掉 或者删除掉, 特别是在ui自动化中,执行一个用例需要几十秒时间
并且设置跳过 在allure报告中是可以看见的,是置灰的
无条件的跳过
@pytest.mark .skip(renson=’列出接口后端没有实现,暂时不运行’)
有条件的跳过
@pytest.mark .ifskip(2>1,renson=’列出接口后端没有实现’)
前面是表达式,如果为真,就跳过
工作中,可以把装饰器定义成变量,其他地方可以快速写
skipif的用法:
用例筛选工作中实际用法,使用run文件跑部分业务
比如要运行单个某个业务模块(商铺)
- 可以写 一个run.py文件 ,运行时,用 python run.py
(1) 每次运行时改配置文件
cd 到这个testCase
pytest -s -m shop_list
- 写个bat文件 (每次运行都需要改文件)
初始化和清除
使用介绍
自动化用例尽量保证用例和用例之间没有关系,都能单独运行,所有要设置初始化和清除
方式1:setup 和 teardown (方法级别、类级别、模块级别)
方式2:@pytest.fixture() 装饰器,更加灵活,可以设置范围,可以部分用例使用
注:
- scope有function(默认) class module(一个.py) package/session
(1) module , package/session 都是写在conftest.py中的
(2) package代表包 seesion代表能共享conftest的所有文件,和package差不多
-
方式2的优先级优先于方式1,如下面的例子中方式2的function范围可以看出
-
当方式2,不是自动调用时autouse=Flase 默认的,有两种调用方式,如下图
-
当初始化有返回值时,不能用@pytest.mark.usefixtures(“**”) 方式
-
conftest.py 中的方式2 优先于 用例中的方式2
-
把方式2的初始化和清除写在conftest.py中,( 共享的初始化清除)
yield区分是初始化还是清除,并且可以用来返回值
1.手动调用pytest的fixture两种方式(autouse为False的时候)
方式1:可以使用usefixtures装饰器
方式2:也可以直接把 初始化函数名当成参数传个用例(适用有返回值的)(如下图)
2.pytest的fixture (默认是function)更优先unittest的 setup和teardown
autouse 参数的用法
conftest特点
优先级:conftest中的fixture优先于py文件中的fixture
作用域:conftest文件是有作用域的,内层的用例能调到外层的fixture
以前的使用场景
不同项目下,都有个conftest,写了module前置登录自己项目,然后存token等
也可以利用 setup_class(self): 初始化实现登录,可做特殊账号的登录
针对用例做的初始化,一般设置为function范围,自己调用
pytes t自带的 数据驱动 (参数化)
使用介绍
可以将数据,传入用函数中
格式: [[],[],[]] 或者 [(),(),()]
使用过的场景
可以获取excle中的每行用例,然后一个数据得到一个字典,传给用例
重复执行查看稳定性
@pytest.mark.repeat(2) # pip install pytest-repeat #
pytest的断言
使用pytest.assume(a == b)断言,断言失败后后续代码还能继续跑 pip install pytest-assume
3. allure库及jinkens的allure插件的应用
环境:
1.下载allure.zip ,解压,把\bin目录添加到环境变量path—能使用allure 命令
2.pip install allure-pytest
(1) allure的装饰器介绍
1.@allure.description_html 可以添加html标签
2.@allure.description()这种,直接加字符串
3.allure.attach()
a.可用来在报告中显示执行结果: 两个方式,推荐下面的方式
allure.attach( “{0}”.format(res),”用例结果”)
allure.attach(f”{res}”, “其他变量或字符串”, allure.attachment_type.TEXT)
b.展示图片、mp4等
allure.attach(file,”附件名字”,allure.attachment_type.JPG)
4.标题层级
@allure.epic(“电子证照”)
@allure.feature(“电子驾驶证”)
@allure.story(“车辆选择列表”)
@allure.title(“{inData[testPoint]}”)
其中@allure.title 可以用变量,其他暂时没发现可以
如:以上inData是一个字典,注:[]中不要写引号
5.with allure.step(“支付”): 可以给步骤取名字,可以对一些流程用例的
也可以在某个方法上面写 装饰器 (这样可以展示参数)
应用
pytest结合allure来用例进行过滤
Original: https://blog.csdn.net/Ataoker/article/details/125631365
Author: A~taoker
Title: 【自动化总结1】pytest使用整理
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/774438/
转载文章受原作者版权保护。转载请注明原作者出处!