时间:2025-05-22 19:43
人气:
作者:admin
pytest 是 python 的第三方单元测试框架,比自带unittest 更简洁和高效,支持315种以上的插件,同时兼容 unittest 框架。 这就使得我们在 unittest 框架迁移到pytest 框架的时候不需要重写代码。接下来我们在文中来对分析下 pytest 有哪些简洁、高效的用法: 环境搭建
#首先使用 pip 安装 pytest使用 pytest 执行测试需要遵行的规则:
pip install pytest pip install pytest-html #原生态报告模板
pip show pytest #查看 pytest 是否安装成功
@pytest.mark.parametrize( "x,y,z", [(1,2,3),(2,3,4)] ) #列表套列表/列表套元组均可 def test1(x,y,z): assert x+y == z
fixture源码详解 fixture(scope='function',params=None,autouse=False,ids=None,name=None):
调用fixture的三种方法
1 #1、函数或类里面方法直接传fixture的函数参数名称 2 @pytest.fixture() 3 def test1(): 4 print('\n开始执行function') 5 6 def test_a(test1): 7 print('---用例a执行---') 8 9 #2、使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例 10 @pytest.fixture() 11 def test1(): 12 print('\n开始执行function') 13 @pytest.mark.usefixtures('test1') 14 def test_a(): 15 print('---用例a执行---') 16 17 #3、叠加usefixtures 18 #如果一个方法或者一个class用例想要同时调用多个fixture,可以使用@pytest.mark.usefixture()进行叠加。注意叠加顺序,先执行的放底层,后执行的放上层。 19 import pytest 20 21 @pytest.fixture() 22 def test1(): 23 print('\n开始执行function') 24 25 @pytest.mark.usefixtures('test1') 26 def test_a(): 27 print('---用例a执行---') 28 29 @pytest.fixture() 30 def test1(): 31 print('\n开始执行function1') 32 33 @pytest.fixture() 34 def test2(): 35 print('\n开始执行function2') 36 37 @pytest.mark.usefixtures('test1') 38 @pytest.mark.usefixtures('test2') 39 def test_a(): 40 print('---用例a执行---')
#pytest.main()
启动Pytest测试运行器,main() 函数如果不带任何参数,会自动查找和执行当前路径及其子目录中所有符合Pytest命名规范的所有测试文件(通常是文件名以 test_ 开头)。
#常用参数:
#示例
test_1.py文件
test_2.py文件
Login类:
登录方法 login
Shop类:
列出方法 shop_list
更新方法 shop_update
-m <标记>:运行指定标记的用例(需配合@pytest.mark使用)。支持逻辑表达式(如and/or)组合多个标记如:pytest.main(['-m', 'smoke']) # 执行标记为smoke的用例
-k <表达式>:按名称匹配用例(支持逻辑运算符) 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() | 附件 |
报告添加附件 |