Pytest 插件
2024-09-08 17:44:10
1. 执行标记用例执行次数
首先安装 repeat:
pip install pytest-repeat
@pytest.mark.repeat(n)执行当前用例 n 次 然后再往下执行其他用例
import pytest class TestCase: def test_01(self):
print("\ntest_01") @pytest.mark.repeat(2)
def test_02(self):
print("\ntest_02") def test_03(self):
print("\ntest_03") if __name__ == '__main__':
pytest.main()
2. 调整用例的执行顺序
首先安装 ordering:
pip install pytest-ordering
@pytest.mark.last 最后一个执行用例
@pytest.mark.run(order=1) 第一个执行用例
import pytest class TestCase: def test_01(self):
print("\ntest_01") @pytest.mark.last()
def test_02(self):
print("\ntest_02") @pytest.mark.run(order=1)
def test_03(self):
print("\ntest_03") if __name__ == '__main__':
pytest.main()
3. 用例之间的依赖关系
- 这是一个pytest第三方插件,主要解决用例之间的依赖关系。如果依赖的上下文失败后续的用例会被标识为跳过执行,相当于执行了
pytest.mark.skip
- dependency可作用的范围有:
session
、package
、module
、class
- 安装 pip install pytest-dependency
- 首先我们需要在用例开始的位置打上一个装饰器@pytest.mark.dependency(),这是代表这条用例作为主条件,如果这条用例失败,关联它的用例会跳过执行。
- 在被关联的用例上,也打上带参数的装饰器
@pytest.mark.dependency()
,depends
接受的参数是关联的依赖用例名。 - 在
depends
也可以用别名的方式指定用例名
# 类实现方式 class TestCase: @pytest.mark.dependency()
def test_01(self):
assert 1 ==11 @pytest.mark.dependency(depends=["TestCase::test_01"])
def test_02(self):
assert 2 == 2 if __name__ == '__main__':
pytest.main() # test_01失败 test_02跳过执行
# 函数实现方式 @pytest.mark.dependency()
def test_01():
assert 1 == 11 @pytest.mark.dependency(depends=["test_01"])
def test_02():
assert 11 == 11 if __name__ == '__main__':
pytest.main()
# 通过起别名 @pytest.mark.dependency(name="a")
def test_01():
assert 1 == 11 @pytest.mark.dependency(depends=["a"])
def test_02():
assert 11 == 11 if __name__ == '__main__':
pytest.main()
# 定义依赖范围 class TestCase1:
@pytest.mark.dependency()
def test_01(self):
assert True class TestCase2: @pytest.mark.dependency(depends=["TestCase1::test_01"], scope="class")
def test_02(self):
assert 11 == 111 if __name__ == '__main__':
pytest.main()
4. 多重校验 pytest-assume
正常情况下一条用例如果有多条断言,一条断言失败了,其他断言就不会执行了,而使用pytest-assume可以继续执行下面的断言 安装:pip install pytest-assume import pytest def test_assume():
print('登录操作')
pytest.assume(1 == 2)
print('搜索操作')
pytest.assume(2 == 2)
print('加购操作')
pytest.assume(3 == 2)
5. 分布式测试(pytest-xdist)
功能测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟,如果单个测试人员执行需要1000分钟才能跑完
当项目非常紧急时,会需要协调多个测试资源来把任务分成两部分,于是执行时间缩短一半,如果有10个小伙伴,那么执行时间就会变成十分之一,大大节省了测试时间
为了节省项目测试时间,10个测试同时并行测试,这就是一种分布式场景 分布式执行用例的原则:
1.用例之间是独立的,没有依赖关系,完全可以独立运行
2.用例执行没有顺序要求,随机顺序都能正常执行
3.每个用例都能重复运行,运行结果不会影响其他用例 插件安装:
pip3 install pytest-xdist -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com 使用方法:
pytest -n 2 (2代表2个CPU)
pytest -n auto n auto:可以自动检测到系统的CPU核数;从测试结果来看,检测到的是逻辑处理器的数量,即假12核
使用auto等于利用了所有CPU来跑用例,此时CPU占用率会特别高
6. 用例失败重跑
pip install pytest-rerunfailures
# 使用方法一: 装饰器
@pytest.mark.flaky(reruns=10, reruns_delay=1) # 重跑50次,每次间隔1s
class TestDou:
def test_case1(self):
# assert 1 == 6
assert 1 == random.randint(1, 5) # 只要在多次RERUN中遇到一次成功,即可停止,并最终结果为PASSED # 使用方法二: 命令行
class TestYin:
def test_case2(self):
assert 1 == 6 if __name__ == '__main__':
pytest.main(['--reruns', '3', '--reruns-delay', '2', ])
最新文章
- Android开发自学笔记(Android Studio) 目录
- 解决osg路径与文件名中的中文字符问题
- 【BZOJ】1436: Poi2003 Trinomial
- Web服务端软件的服务品质概要
- quartus ii13.0~16.0 调用uedit (转载http://blog.sina.com.cn/s/blog_6d5560f00102vax6.html)
- Python 内置彩蛋
- 51nod 1021 石子归并(dp)
- java核心技术记录之java术语
- Active Session History (ASH) Performed An Emergency Flush Messages In The Alert Log
- Unity3D添加Admob广告
- mac下Apache添加限速模块mod_bw
- Ridge Regression and Ridge Regression Kernel
- Jquery如何删除table里面checkbox选中的多个行
- [MySQL]支持 emoji(字符集问题)
- 在windows 10 上使用aspnet_regiis.exe -i 命令报 “此操作系统版本不支持此选项” 的解决办法
- pocketsphinx 移植问题解决备案
- c#使用dynamic关键字传输数据的用法
- Missing value auth-url required for auth plugin password
- tfidf_CountVectorizer 与 TfidfTransformer 保存和测试
- 【python016--序列】
热门文章
- Tomcat 解决一些基本配置问题。
- 完整工作流整合方案,自定义配置,Java+Vue+Activiti@附配套文档
- HTTPS基础原理和配置-3
- P16_发布-小程序的推广与运行数据的查看
- element ui el-date-picker 禁止选择指定日期
- Eureka 注册中心和服务提供者
- ArcGIS Pro SDK 002 对数据文件的读取和操作
- Spring注解补充(一)
- 代码随想录算法训练营day10 | leetcode 232.用栈实现队列 225. 用队列实现栈
- webform项目 aspx页面顶部提示运行时错误(.Net Framwork已下载还是报错)