一篇文章入门Pytest
一、安装需要安装的库pytest pytest-html 生成HTML格式的测试报告 pytest-xdist 用例分布式执行多CPU分发 pytest-ordering 改变用例执行顺序 pytest-rerunfailures 用例失败重跑 allure-pytest 生成allure测试报告 pyYAML yaml文件库安装命令# 将要安装的库放到 requirements.txt 文件中然后执行 pip install -r requirements.txt二、语法1、模块名(用例文件名)必须以test_开头或者_test结尾2、测试类必须以Test开头且不能有init方法3、测试方法必须以test开头三、执行执行命令主函数# test_login.py import pytest class TestLogin: def test_01(self): print(用例1) if __name__ __main__: pytest.main() # 执行所有命令行# 在命令行中切换到对应目录下后直接命令行输入 pytest读取pytest.ini配置文件pytest.ini是pytest单元测试框架的核心配置文件用来改变pytest默认的行为1、一般放在项目的根目录;2、编码必须是ANSI[pytest] addopts -vs testpaths ./project python_files test*.py python_classes Test* python_functions testaddopts 命令行参数testpaths 测试用例文件夹python_files 搜索文件名python_classes 搜索的测试类名python_functions 搜索的测试方法名的开头执行命令参数-s 输入调试信息如用例中的print -v 打印信息更详细 文件名(或文件夹) 指定运行文件(或文件夹里文件)用例 -n 分布式运行 --reruns 2 失败重跑(失败重跑2次加上第一次一共跑了3次) -x 只要有一个用例报错测试停止 --maxfail2 最多出现两个用例报错测试停止 -k 方法名包含的字符 根据用例部分字符串执行指定用例例如# 主函数 pytest.main([-vs, test_login.py, -n2, --reruns2]) # 使用nodeid 执行指定方法 pytest.main([-vs, ./文件名/类名::方法名]) # 命令行 pytest -vs -n 2 --reruns 2 -k login 执行顺序unittest根据ASCII码pytest从上到下改变执行顺序# 使这个用例第一个执行 pytest.mark.run(order1) def test_login(): print(Done)分组执行pytest.ini文件添加markers smoke: 冒烟用例 login: 登录用例用例文件pytest.mark.smoke def test_login2(): print(Done)命令行执行命令pytest -vs -m smoke # 执行多个分组 pytest -vs -m smoke or login跳过测试用例# 无条件跳过 pytest.mark.skip(reason跳过原因) # 符合条件跳过 pytest.mark.skipif(num3, reason数量超过3个)四、前后置每个用例都有的功能可以集体提取出来比如UI自动化的执行前打开浏览器、执行结束后关闭浏览器的操作# test_login.py import pytest class TestLogin: # 在所有用例之前只执行一次 def setup_class(self): print(在类执行前执行比如创建日志对象、创建数据库连接) # 在每个用例之前都会执行一次 def setup(self): print(每个用例执行前先执行setup打开浏览器加载网页) def test_01(self): print(用例1) def teardown(self): print(每个用例执行结束后执行teardown关闭浏览器) def teardown_class(self): print(类执行结束后执行一次比如销毁日志对象、关闭数据库连接) if __name__ __main__: pytest.main() # 执行所有五、fixture用fixture实现部分用例的前后置pytest.fixture()参数scope被标记方法的作用域function默认、class、module、package/sessionparams参数化autouse自动执行默认Falseids使用params参数化时给每个值设置一个变量名name给被标记的方法起一个别名【当取了别名以后原名就不能用了】import pytest pytest.fixture() def my_fixture(): print(这是前置方法) yield print(这是后置方法) class TestLogin: def test01(self): print(用例1) # 这个用例执行前会先执行my_fixture方法 # 用例执行完后会执行my_fixture的yield def test_02(self, my_fixture): print(用例2)如果所有方法有前后置需要则在fixture里加参数autouseTrue用例里也不需要写fixture名调用pytest.fixture(autouseTrue) ...省略... class TestLogin: def test01(self): print(用例1)params参数化params支持列表、元组、字典列表、字典元组import pytest pytest.fixture(scopefunction, params[亚索, 凯南, 腕豪]) def my_fixture(request): yield request.param print(后置) class TestLogin: def test01(self, my_fixture): print(得到参数, my_fixture)工程应用通过conftest.py和pytest.fixture()结合使用实现全局前后置conftest.py 文件是单独存放fixture的配置文件用处是可以在不同的py文件中使用同一个fixture函数使用时原则上需要将conftest.py文件和用例放到同一层放在根目录貌似也可以并且不需要导入。且可以存在多个conftest.py文件放在不同文件夹中。调用也可以调用多个def test_01(self, my_fixture1, my_fixture2)上面调用方式就是先调my_fixture1再调用my_fixture2。六、数据驱动pytest.mark.parametrize(args_name, args_value)args_name参数名args_value参数值有多少参数值用例就会执行多少次例1import pytest class TestLogin: pytest.mark.parametrize(args, [北京, 上海, 广州]) def test_01(self, args): print(args) if __name__ __main__: pytest.main()例2import pytest class TestLogin: pytest.mark.parametrize(city, rank, [[北京, 1], [上海, 2], [广州, 3]]) def test_01(self, city, rank): print(city, rank) if __name__ __main__: pytest.main()七、报告1、下载allure解压配置环境变量2、添加执行参数 --alluredir可以去pytest.ini文件中修改如下。也可以在主函数中添加pytest.main([‘–alluredir./temp’])这样生成的json文件会放到temp文件夹中[pytest] addopts -vs --alluredir ./temp testpaths ./project python_files test*.py python_classes Test* python_functions test3、在主函数下增加代码if __name__ __main__: pytest.main() os.system(allure generate ./temp -o ./report --clean)感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取

相关新闻

3套方案解锁专业级排版:让开源商用字体提升设计精致度300%

3套方案解锁专业级排版:让开源商用字体提升设计精致度300%

3套方案解锁专业级排版:让开源商用字体提升设计精致度300% 【免费下载链接】PingFangSC PingFangSC字体包文件、苹果平方字体文件,包含ttf和woff2格式 项目地址: https://gitcode.com/gh_mirrors/pi/PingFangSC 作为设计师伙伴,你是否…

2026/7/5 13:26:48 阅读更多 →
Qwen-Rapid-AIO:零基础也能掌握的AI图像编辑新方案

Qwen-Rapid-AIO:零基础也能掌握的AI图像编辑新方案

Qwen-Rapid-AIO:零基础也能掌握的AI图像编辑新方案 【免费下载链接】Qwen-Image-Edit-Rapid-AIO 项目地址: https://ai.gitcode.com/hf_mirrors/Phr00t/Qwen-Image-Edit-Rapid-AIO 你是否曾因AI图像编辑工具的复杂操作而望而却步?是否经历过等待…

2026/7/6 11:33:29 阅读更多 →
LFM2-700M:边缘AI新引擎,2倍推理8语全能!

LFM2-700M:边缘AI新引擎,2倍推理8语全能!

LFM2-700M:边缘AI新引擎,2倍推理8语全能! 【免费下载链接】LFM2-700M 项目地址: https://ai.gitcode.com/hf_mirrors/LiquidAI/LFM2-700M 导语:Liquid AI推出新一代边缘AI模型LFM2-700M,以7亿参数实现2倍推理速…

2026/7/6 6:39:46 阅读更多 →

最新新闻

HS工具箱深度评测:一站式在线工具平台如何提升开发与办公效率

HS工具箱深度评测:一站式在线工具平台如何提升开发与办公效率

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 你是不是也遇到过这样的场景:开发时突然需要把图片转成Base64编码,临时去搜在线工具,结果要么广告…

2026/7/6 11:29:59 阅读更多 →
数字图像处理 2.6 节:图像采样量化实战,Python 实现 8-bit 灰度图转换与伪轮廓分析

数字图像处理 2.6 节:图像采样量化实战,Python 实现 8-bit 灰度图转换与伪轮廓分析

数字图像处理实战:Python实现8-bit灰度图转换与伪轮廓分析当一张风景照片在显示器上呈现出明显的阶梯状色块时,我们看到的正是数字图像处理中典型的"伪轮廓"现象。这种现象源于图像量化过程中的信息损失,而理解其背后的原理对于从事…

2026/7/6 11:27:57 阅读更多 →
STM32L152RE与TPAFE0808构建多通道信号采集系统

STM32L152RE与TPAFE0808构建多通道信号采集系统

1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是常见需求。TPAFE0808作为8通道模拟前端芯片,配合STM32L152RE低功耗MCU,能够构建高效的多通道信号控制系统。这种组合特别适合需要同时监测多个传感器…

2026/7/6 11:25:53 阅读更多 →
4万星和5.7万星的两个框架,我焊在一起后它们封神了

4万星和5.7万星的两个框架,我焊在一起后它们封神了

第一个,AI 在「要构建什么」还没想清楚的时候就开始写代码。你跟它讨论需求,聊了三轮,它突然来一句「我来帮你实现吧」,然后一顿输出,写完一看,方向跑偏了。代码能跑,但不是你想要的。删了重来&…

2026/7/6 11:25:53 阅读更多 →
Transformer 架构 6 大核心组件拆解:从位置编码到多头注意力数学推导

Transformer 架构 6 大核心组件拆解:从位置编码到多头注意力数学推导

Transformer架构6大核心组件深度解析:从数学原理到工程实现引言:重新定义序列建模的里程碑2017年,一篇名为《Attention Is All You Need》的论文彻底改变了自然语言处理领域的游戏规则。Transformer架构的提出不仅终结了RNN/CNN在序列建模中的…

2026/7/6 11:25:53 阅读更多 →
如何用Squirrel-RIFE轻松实现专业级视频补帧:从入门到精通的完整指南

如何用Squirrel-RIFE轻松实现专业级视频补帧:从入门到精通的完整指南

如何用Squirrel-RIFE轻松实现专业级视频补帧:从入门到精通的完整指南 【免费下载链接】Squirrel-RIFE 效果更好的补帧软件,显存占用更小,是DAIN速度的10-25倍,包含抽帧处理,去除动漫卡顿感 项目地址: https://gitcod…

2026/7/6 11:23:51 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻