pytest之收集用例规则与运行指定用例

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快

小伙伴们大家好呀,今天笔者会给大家讲解一下pytest是如何收集我们写好的用例?我们又有哪些方式来运行单个用例或者批量运行用例呢?下面将为大家一一解答!

一、Pytest收集用例原理

首先我们按照如下目录结构新建我们的项目

[pyttest搜索测试用例的规则] |[测试用例目录1] | |__init__.py | |test_测试模块1.py | |test_测试模块2.py |[测试用例目录2] | |__init__.py | |test_测试用例1.py | |测试用例.py |test_测试模块.py |测试用例2.py

二、代码实例

# test_测试模块1.py def test_testFunc1(): print('\n我是一个测试用例! in test_testFunc1') assert 1 == 1 def func1(): print('我不是一个测试用例') assert 1 == 1
# test_测试模块2.py class TestClass1(object): def test_class_func1(self): print('\n 我是一个类里面的测试用例 in test_class_func1') assert 1 == 1 def class_func1(self): print('我是类里面的一个普通函数!')
# test_测试用例1.py class TestClass2(object): def test_class_func2(self): print('\n 我是一个类里面的测试用例 in test_class_func2',) assert 1 == 1 def class_func2(self): print('我是类里面的一个普通函数!') def test_testFunc2(): print('\n我是一个测试用例 in test_testFunc2!') assert 1 == 1 def func2(): print('我不是一个测试用例') assert 1 == 1
# 测试用例.py def test_testFunc3(): print('\n我是一个测试用例! in 测试用例.py') assert 1 == 1 def func3(): print('我不是一个测试用例') assert 1 == 1
# test_测试模块3.py def test_testFunc4(): print('\n我是一个测试用例! in test_testFunc4') assert 1 == 1 def func4(): print('我不是一个测试用例') assert 1 == 1 class TestClass3(object): def test_class_func3(self): print('\n 我是一个类里面的测试用例 in test_class_func3') assert 1 == 1 def class_func3(self): print('我是类里面的一个普通函数!')
# 测试用例2.py def test_testFunc5(): print('\n我是一个测试用例! in test_testFunc5') assert 1 == 1 def func5(): print('我不是一个测试用例') assert 1 == 1

下面我们使用cmd命令来执行一下这个项目,看一下究竟会有多少条用例是有效的用例?打开cmd 切换到项目的根目录执行命令 pytest -v

D:\pytest搜索测试用例规则>pytest -v ============================= test session starts ============================= platform win32 -- Python 3.6.4, pytest-3.8.0, py-1.6.0, pluggy-0.7.1 -- c:\python36\python.exe cachedir: .pytest_cache metadata: {'Python': '3.6.4', 'Platform': 'Windows-10-10.0.17134-SP0', 'Packages': {'pytest': '3.8.0', 'py': '1.6.0', 'pluggy': '0.7.1'}, 'Plugins': {'metadata': '1.8.0', 'html': '1.20.0', 'allure-adaptor': '1.7.10'}, 'JAVA_HOME': 'C:\\Program Files\\Java\\jdk1.8.0_181'} rootdir: D:\pytest搜索测试用例规则, inifile: plugins: metadata-1.8.0, html-1.20.0, allure-adaptor-1.7.10 collected 6 items test_测试模块3.py::test_testFunc4 PASSED [ 16%] test_测试模块3.py::TestClass3::test_class_func3 PASSED [ 33%] 测试用例目录1/test_测试模块1.py::test_testFunc1 PASSED [ 50%] 测试用例目录1/test_测试模块2.py::TestClass1::test_class_func1 PASSED [ 66%] 测试用例目录2/test_测试用例1.py::TestClass2::test_class_func2 PASSED [ 83%] 测试用例目录2/test_测试用例1.py::test_testFunc2 PASSED [100%] ========================== 6 passed in 0.59 seconds ===========================

运行结果可以看到一共有6条用例passed,且详细的列出了是哪6条,那么按照我们上面编写的用例其实并不止6条,那么为什么会只运行了6条呢?综合以上的代码结构和我们的执行结果对比,我们应该能发现这样的规律

Pytest会从我们当前运行的目录开始查找所有目录,查找以test_开头的文件且文件中所有以test_开头的函数和以Test开头的类和类里面以test_开头的函数为测试用例。这就是为什么上面只运行了6条测试用例!

三、Pytest运行指定测试用例

我们仍然使用上面的项目作为演示(cdm切换到项目的根目录)

3.1运行指定目录下的所有用例

我们指定运行测试用例目录1里面的所有用例(pytest -v 测试用例目录1)

D:\pytest搜索测试用例规则>pytest -v 测试用例目录1 ============================= test session starts ============================= platform win32 -- Python 3.6.4, pytest-3.8.0, py-1.6.0, pluggy-0.7.1 -- c:\python36\python.exe cachedir: .pytest_cache metadata: {'Python': '3.6.4', 'Platform': 'Windows-10-10.0.17134-SP0', 'Packages': {'pytest': '3.8.0', 'py': '1.6.0', 'pluggy': '0.7.1'}, 'Plugins': {'metadata': '1.8.0', 'html': '1.20.0', 'allure-adaptor': '1.7.10'}, 'JAVA_HOME': 'C:\\Program Files\\Java\\jdk1.8.0_181'} rootdir: D:\pytest搜索测试用例规则, inifile: plugins: metadata-1.8.0, html-1.20.0, allure-adaptor-1.7.10 collected 2 items 测试用例目录1/test_测试模块1.py::test_testFunc1 PASSED [ 50%] 测试用例目录1/test_测试模块2.py::TestClass1::test_class_func1 PASSED [100%] ========================== 2 passed in 0.05 seconds =========================== # 这样就会只搜索和指定指定目录下面所有的用

3.2运行指定文件中的所有用例

我们指定运行test_测试模块1.py(pytest -v 测试用例目录1/test_测试模块1.py )

D:\pytest搜索测试用例规则>pytest -v 测试用例目录1/test_测试模块1.py ============================= test session starts ============================= platform win32 -- Python 3.6.4, pytest-3.8.0, py-1.6.0, pluggy-0.7.1 -- c:\python36\python.exe cachedir: .pytest_cache metadata: {'Python': '3.6.4', 'Platform': 'Windows-10-10.0.17134-SP0', 'Packages': {'pytest': '3.8.0', 'py': '1.6.0', 'pluggy': '0.7.1'}, 'Plugins': {'metadata': '1.8.0', 'html': '1.20.0', 'allure-adaptor': '1.7.10'}, 'JAVA_HOME': 'C:\\Program Files\\Java\\jdk1.8.0_181'} rootdir: D:\pytest搜索测试用例规则, inifile: plugins: metadata-1.8.0, html-1.20.0, allure-adaptor-1.7.10 collected 1 item 测试用例目录1/test_测试模块1.py::test_testFunc1 PASSED [100%] ========================== 1 passed in 0.09 seconds =========================== # 运行指定文件下的所有用例

3.3运行指定文件中的测试类

我们指定运行test_测试模块2.py中的测试类Testclass1(pytest -v 测试用例目录1/test_测试模块2.py::TestClass1)

D:\pytest搜索测试用例规则>pytest -v 测试用例目录1/test_测试模块2.py::TestClass1 ============================= test session starts ============================= platform win32 -- Python 3.6.4, pytest-3.8.0, py-1.6.0, pluggy-0.7.1 -- c:\python36\python.exe cachedir: .pytest_cache metadata: {'Python': '3.6.4', 'Platform': 'Windows-10-10.0.17134-SP0', 'Packages': {'pytest': '3.8.0', 'py': '1.6.0', 'pluggy': '0.7.1'}, 'Plugins': {'metadata': '1.8.0', 'html': '1.20.0', 'allure-adaptor': '1.7.10'}, 'JAVA_HOME': 'C:\\Program Files\\Java\\jdk1.8.0_181'} rootdir: D:\pytest搜索测试用例规则, inifile: plugins: metadata-1.8.0, html-1.20.0, allure-adaptor-1.7.10 collected 1 item 测试用例目录1/test_测试模块2.py::TestClass1::test_class_func1 PASSED [100%] ========================== 1 passed in 0.05 seconds =========================== # 运行指定的测试类中的所有测试用

3.4运行指定的测试用例函数

我们指定运行test_testFunc1(pytest -v 测试用例目录1/test_测试模块1.py::test_testFunc1)

D:\pytest搜索测试用例规则>pytest -v 测试用例目录1/test_测试模块1.py::test_testFunc1 ============================= test session starts ============================= platform win32 -- Python 3.6.4, pytest-3.8.0, py-1.6.0, pluggy-0.7.1 -- c:\python36\python.exe cachedir: .pytest_cache metadata: {'Python': '3.6.4', 'Platform': 'Windows-10-10.0.17134-SP0', 'Packages': {'pytest': '3.8.0', 'py': '1.6.0', 'pluggy': '0.7.1'}, 'Plugins': {'metadata': '1.8.0', 'html': '1.20.0', 'allure-adaptor': '1.7.10'}, 'JAVA_HOME': 'C:\\Program Files\\Java\\jdk1.8.0_181'} rootdir: D:\pytest搜索测试用例规则, inifile: plugins: metadata-1.8.0, html-1.20.0, allure-adaptor-1.7.10 collected 1 item 测试用例目录1/test_测试模块1.py::test_testFunc1 PASSED [100%] ========================== 1 passed in 0.03 seconds ===========================

四、总结

收集用例规则:搜索所有以test_开头的测试文件,以Test开头的测试类,以test_开头的测试函数

执行用例规则:从-v 参数输出的执行信息我们就应该能发现,运行指定的目录下用例 使用命令 pytest 目录/目录 即可;运行指定文件使用 pytest 目录/文件 即可;运行指定类或者函数 使用命令 pytest 目录/文件::类名::函数名 或者 pytest 目录/文件::函数名

搜索用例规则也是我们命名用例文件,测试类,测试函数的规则;执行指定测试用例记住规则即可。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1195025.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux可执行程序依赖库打包脚本

脚本如下:#!/bin/bash# 程序名称 PROGRAM"your_program" # 目标目录 DESTINATION"/path/to/destination"# 检查程序是否存在 if [ ! -f "$PROGRAM" ]; thenecho "Error: $PROGRAM not found."exit 1 fi# 创建目标目录&…

verl如何快速上手?HuggingFace集成保姆级教程

verl如何快速上手?HuggingFace集成保姆级教程 verl 是一个灵活、高效且可用于生产环境的强化学习(RL)训练框架,专为大型语言模型(LLMs)的后训练设计。它由字节跳动火山引擎团队开源,是 HybridF…

2026年行业内评价好的ISO认证办理公司选哪家,ISO27001认证/ISO9001认证,ISO认证办理机构哪家强

随着全球质量管理体系标准的持续升级,ISO认证已成为企业提升竞争力、拓展国际市场的核心通行证。面对市场上琳琅满目的认证机构,企业如何选择兼具专业性与服务质量的合作伙伴?本文以第三方权威视角,基于企业资质、…

高精度、高可靠的伺服电爪品牌测评与推荐

在智能制造加速演进的2026年,工业自动化对末端执行器的高精度、高可靠性伺服电爪需求持续攀升。尤其在3C电子、半导体、新能源锂电等高端制造领域,传统气动夹爪已难以满足微米级装配、柔性抓取和智能反馈的严苛要求。…

R语言读取CSV中文乱码自救手册(仅限内部流传):3个鲜为人知的编码调试技巧

第一章:R语言读取CSV中文乱码问题的根源剖析 R语言在跨平台处理中文CSV文件时出现乱码,本质并非函数本身缺陷,而是字符编码在“文件存储—系统环境—R会话”三层链路中未对齐所致。Windows系统默认使用GBK或GB2312编码保存中文CSV&#xff0c…

为什么你的Laravel 12路由总是404:深入底层机制的6个排查步骤

第一章:Laravel 12路由机制的核心原理 Laravel 12 的路由系统建立在高度优化的编译式路由注册与匹配引擎之上,摒弃了传统正则逐条匹配的低效方式,转而采用基于 HTTP 方法与 URI 模式的预编译路由表(Compiled Route Collection&…

高精度、耐腐蚀、可定制——玻璃转子流量计优质厂商全解析

【行业洞察】 玻璃转子流量计因其结构简单、读数直观、成本低廉、维护便捷等优势,长期作为液体与气体流量监测的基础型仪表,广泛应用于化工、制药、环保、食品、水处理及科研实验等领域。随着工业自动化与智能制造升…

总结泰兴网站建设一站式服务价格情况,选哪家好?

本榜单依托全维度市场调研与真实本地企业口碑,深度筛选出五家泰州本土数字化营销服务标杆企业,为泰州、如皋、靖江、泰兴、姜堰等地的制造企业、工厂提供客观选型依据,助力精准匹配适配的线上拓客服务伙伴。 TOP1 推…

【R语言数据可视化终极指南】:用ggplot2画散点图+回归线的5种高效方法

第一章:R语言数据可视化与ggplot2核心理念 R语言因其强大的统计分析与图形绘制能力,在数据科学领域广受欢迎。其中,ggplot2 是基于“图形语法”(The Grammar of Graphics)理念构建的绘图系统,它将图表分解为…

吴忠市英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜

在雅思备考热潮中,吴忠市众多考生面临着培训选课难、提分无方向的核心痛点。雅思考试的高专业性的要求,让缺乏优质教育机构引导、缺少权威提分技巧支撑的考生屡屡受挫。如何筛选靠谱的教育机构,获取实用的备考方案,…

说说姜堰网站建设费用,不同方案花费有何差异呢?

一、基础认知篇 问题1:姜堰网站建设费用主要包含哪些部分?中小企业能承担吗? 姜堰网站建设的费用并非单一报价,而是由基础搭建+功能定制+服务附加三大核心模块构成:基础搭建涵盖域名注册、服务器租赁、页面设计等…

2026年普拉提教练培训机构哪家值得选择去哪学

普拉提行业的快速发展,让越来越多从业者、跨界求职者将其作为职业方向。但市面培训机构良莠不齐,课程与证书含金量差异较大,选对机构成为职业起步或升级的关键。靠谱的普拉提培训机构,需以权威认证、科学课程和优质…

石嘴山英语雅思培训辅导机构推荐、2026权威出国雅思课程中心学校口碑排行榜

在全球化留学趋势下,雅思考试已成为石嘴山学子出国深造的重要“语言通行证”,但雅思培训选课之路布满荆棘。多数考生面临优质教育机构筛选困难、提分技巧匮乏、个性化方案缺失等痛点,如何在众多机构中找到靠谱且性价…

待产包纸尿裤品牌推荐|新手爸妈避坑指南(5 大品牌实测)

👶 对于新手爸妈而言,纸尿裤是待产包中不可或缺的核心单品,其品质直接关系到宝宝的舒适感与肌肤健康,更影响整个家庭的照料体验。选纸尿裤没有绝对的“最优解”,建议结合宝宝的肤质、体型、活动量等个体需求综合…

待产包纸尿裤品牌推荐|新手爸妈避坑指南(5 大品牌实测)

👶 对于新手爸妈而言,纸尿裤是待产包中不可或缺的核心单品,其品质直接关系到宝宝的舒适感与肌肤健康,更影响整个家庭的照料体验。选纸尿裤没有绝对的“最优解”,建议结合宝宝的肤质、体型、活动量等个体需求综合…

[工程实战] 攻克“资料孤岛”:基于隐语纵向联邦学习的金融风控建模全解析

[工程实战] 攻克“资料孤岛”:基于隐语纵向联邦学习的金融风控建模全解析2026-01-21 14:33 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: …

2026年泰兴定制网站建设靠谱公司排名

2026年泰州本土制造业数字化转型加速,定制网站建设作为企业线上获客的核心载体,已成为制造企业打通供需链路、提升品牌可信度的关键基建。无论是适配B2B采购场景的网站建设费用评估,还是泰兴定制网站建设的本地化需…

总结浙江地区口碑好的成人自考培训机构,春华教育排名如何?

随着社会对学历提升需求的持续增长,成人自考因学制灵活、含金量高成为在职人群的热门选择,但不少人在备考时仍面临诸多困惑。本文围绕成人自考全科辅导的核心问题展开解答,结合春华教育的实际服务经验,为大家提供清…

吴忠市英语雅思培训辅导机构推荐、2026权威出国雅思课程中心学校口碑排行榜

在雅思备考的赛道上,吴忠市众多考生常常陷入培训选课的两难困境:优质教育机构鱼龙混杂,难以精准甄别;不同基础对应的提分需求差异显著,却找不到适配的个性化方案;备考过程中缺乏权威技巧指导,提分效果大打折扣。…

2026年香菇、猴头菇、蛹虫草植物提取物厂家最新权威推荐:技术与资质并重

在保健食品与功能性原料行业,原料的纯净度、活性成分的稳定性以及生产企业是否具备完备资质,一直是采购方关注的核心。尤其是香菇提取物、猴头菇提取物、蛹虫草提取物等菌菇类原料,其水溶性、真实性鉴别与标准化生产…