pytest与allure的使用

--需要先安装pytest
【1】数据驱动@pytest.mark.parametrize:
@pytest.mark.parametrize只对于同一用例不同数据的传参
①只有一个参数时
datatest04=['zhangsan','lisi']
@pytest.mark.parametrize('user', datatest04)
def test_04(self,user):
print(user)
②多个参数时
@pytest.mark.parametrize('user,password',[("zhangsan","111111"),("lisi","222222")])
def test_02(self,user,password):
print(user,password)

【2】标记,选择性执行用例@pytest.mark.标签名(标签名自定义)
pytest提供了一个非常好用的mark功能,可以给测试用例打上各种各样的标签,运行用例时可以指定运行某个标签。mark功能作用就是灵活的管理和运行测试用例。
标签既可以打到方法上,也可以打到类上,标记的两种方式:
直接标记类或方法或函数:@pytest.mark.标签名
执行:
if name == 'main':
pytest.main(['-m qc and beta', '-s']) # 执行标签名叫qc与beta的用例,其中不需要加引号

【3】跳过用例 @pytest.mark.skip()
可以装饰类也可以装饰方法,分三种情况使用skip()
@pytest.mark.skip() #1、跳过方法或用例,未备注原因
@pytest.mark.skip(reason='跳过一个方法或一个测试用例') #2、跳过方法或用例,备注了原因
@pytest.mark.skipif(1==1,reason='跳过一个方法或一个测试用例') #3、当条件满足,跳过方法或用例,备注了原因
condition表示跳过用例的条件。
reason表示跳过用例的原因。

【4】标记预期失败 @pytest.mark.xfail()
@pytest.mark.xfail(condiition, reason, [raises=None, run=True, strict=False])
condition,预期失败的条件,当条件为真的时候,预期失败。
reason,失败的原因。

【5】用例失败重跑@pytest.mark.flaky()
@pytest.mark.flaky(reruns=重试次数, reruns_delay=次数之间的延时设置(单位:秒))
if name == 'main':
pytest.main(['--reruns', '3', '--reruns-delay', '5'])
pytest --reruns 2 --reruns-delay 5  表示:运行失败的用例可以重新运行3次,第一次和第二次的间隔时间为5秒钟

【6】固件 @pytest.fixture()
固件(Fixture)是一些函数,pytest 会在执行测试函数之前(或之后)加载运行它们,也称测试夹具。
fixture修饰器来标记固定的工厂函数,在其他函数,模块,类或整个工程调用它时会被激活并优先执行,通常会被用于完成预置处理和重复操作。
方法:fixture(scope="function", params=None, autouse=False, ids=None, name=None) 常用参数:
“scope”:被标记方法的作用域“function" (default):作用于每个测试方法,每个test都运行一次
"class":作用于整个类,每个class的所有test只运行一次
"module":作用于整个模块,每个module的所有test只运行一次
"session:作用于整个session(慎用),每个session只运行一次
“params”:(list类型)提供参数数据,供调用标记方法的函数使用
“autouse”:是否自动运行,默认为False不运行,设置为True自动运行

【7】用例执行的先后顺序@pytest.mark.run()
用法:@pytest.mark.run(order=x)当X的值越小优先级越高,比如1,2,3,执行的顺序就是1,2,3

【8】allure的装饰类
使用方法 参数值 参数说明
@allure.epic() epic描述 敏捷里面的概念,定义史诗,往下是feature
@allure.feature() 模块名称 功能点的描述,往下是story
@allure.story() 用户故事 用户故事,往下是title
@allure.title(用例的标题) 用例的标题 重命名html报告名称
@allure.testcase() 测试用例的链接地址 对应功能测试用例系统里面的case
@allure.issue() 缺陷 对应缺陷管理系统里面的链接
@allure.description() 用例描述 测试用例的描述
@allure.step() 操作步骤 测试用例的步骤
@allure.severity() 用例等级 blocker,critical,normal,minor,trivial
@allure.link() 链接 定义一个链接,在测试报告展现
@allure.attachment() 附件 报告添加附件

【9】多线程执行测试用例
安装插件:pip install pytest-parallel==0.0.10,安装完后无需引入,在pytest中用参数就行
--workers=n指定运行的进程数为 n,默认为1,windows系统中只能为1
--tests-per-worker=m 指定运行的线程数为 m
若两个参数都指定,则表示启动n个进程,每个进程最多启动m线程执行,总线程数=进程数*线程数
pytest.main(['-s', 'test_mzys.py', '--workers=1', '--tests-per-worker=3',"--alluredir","../../../report/allure"])

【10】线程锁
import threading
lock = threading.Lock()
lock.acquire() #请求锁
...代码...
lock.release() #释放锁

每个用例都向一个文档中写值,当多线程运行测试用例时,都会同时去写值此时就会存在写失败的情况
所以此时我们就需要向写文档的这个操作加上锁,使得调取写时得一个个的来

posted @ 2022-05-26 16:29  sriver_dl  Views(264)  Comments(0Edit  收藏  举报