news 2026/4/19 12:37:11

Pytest之收集用例规则与运行指定用例详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 目录/文件::函数名

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

最后:下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

​​​软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:05:22

基于Java+SSM的种子商店网站的设计与实现(源码+lw+部署文档+讲解等)

课题介绍 本课题旨在设计并开发基于 JavaSSM(SpringSpringMVCMyBatis)框架的种子商店网站,针对传统种子经营门店线下渠道单一、品类展示受限、订单管理低效、农户购种选种不便等痛点,打造集种子展示、在线选购、订单管理、农资资讯…

作者头像 李华
网站建设 2026/4/18 7:42:46

基于Android的安卓云笔记系统(源码+lw+部署文档+讲解等)

课题介绍 本课题旨在设计并实现基于 Android 的安卓云笔记系统,针对传统本地笔记数据易丢失、多端同步不便、编辑功能单一、内容管理杂乱等痛点,打造适配移动场景的轻量化云笔记应用,实现笔记内容云端存储、多端同步、编辑便捷化、管理智能化…

作者头像 李华
网站建设 2026/4/18 7:40:29

基于Android的智慧旅游平台设计与实现(源码+lw+部署文档+讲解等)

课题介绍 本课题旨在设计实现基于Android的智慧旅游平台APP,针对传统旅游中景点信息零散、行程规划盲目、线下服务对接低效、体验同质化等痛点,打造集智能导览、个性化行程规划、一站式周边服务、旅游社交互动于一体的移动服务平台,实现旅游全…

作者头像 李华
网站建设 2026/4/18 7:05:04

大型商务综合体怎么选会议设备和厂商?适配 + 稳定才是关键

大型商务办公综合体作为城市商务活动的核心载体,汇聚了各类规模、不同业态的企业,会议场景的频次、规格与多样性远超普通办公空间。会议设备作为商务沟通、决策研讨、品牌展示的核心支撑,其选型是否合理、适配,直接影响综合体的办…

作者头像 李华
网站建设 2026/4/18 7:57:51

LeetCode122. 买卖股票的最佳时机 II:贪心策略实现最大利润

在股票交易类算法题中,力扣122题「买卖股票的最佳时机 II」是经典的贪心算法应用场景。这道题的核心要求是:允许在任意天数买入和卖出股票(可多次交易),求能获得的最大利润。本文将从题目分析、思路推导、代码实现到复…

作者头像 李华
网站建设 2026/4/18 7:05:05

技术前沿!提示工程架构师提升AI提示质量的创新思路

技术前沿!提示工程架构师提升AI提示质量的6大创新思路——从「Prompt工匠」到「AI协作设计师」的蜕变 一、引言:你还是“Prompt调参侠”吗? 凌晨2点,你盯着电脑屏幕上的AI输出,第17次修改Prompt—— “帮我写一篇面向…

作者头像 李华