pytest使用教程
pytest使用教程一、pytest框架1.1 pytest简介pytest是Python生态中最强大、最流行的自动化测试框架具有以下特点简洁语法使用原生assert语句无需记忆复杂的断言方法自动发现自动识别测试文件和测试函数强大的fixture依赖注入机制实现测试前后置处理丰富的插件生态覆盖HTML报告、并行执行、覆盖率等场景良好的兼容性可直接运行unittest用例1.2 安装方式# 基础安装pipinstallpytest# 安装常用插件pipinstallpytest-html pytest-xdist pytest-rerunfailures1.3 命名规则pytest采用约定优于配置的设计测试用例需遵守以下命名规范类型规则示例测试文件test_*.py或*_test.pytest_login.py,login_test.py测试函数test_开头def test_login_success()测试类Test开头不含__init__class TestLogin:1.4 编写第一个测试用例# test_sample.pydefadd(a,b):returnabdeftest_add_positive_numbers():assertadd(2,3)5deftest_add_negative_numbers():assertadd(-1,-1)-2classTestMathOperations:deftest_multiply(self):assert2*361.5 运行测试# 运行当前目录下所有测试pytest# 运行指定文件pytest test_sample.py# 运行指定函数pytest test_sample.py::test_add_positive_numbers# 运行指定类的方法pytest test_sample.py::TestMathOperations::test_multiply1.6 常用命令行参数参数作用示例-v显示详细信息pytest -v-s显示print输出pytest -s-x失败即停止pytest -x--lf只运行上次失败的用例pytest --lf-k按关键字筛选pytest -k add-m按标记筛选pytest -m smoke--htmlreport.html生成HTML报告pytest --htmlreport.html-n auto多线程并行执行pytest -n auto1.7 断言用法deftest_assertions():# 基本断言assert11asserthelloinhello worldassert105# 断言异常withpytest.raises(ZeroDivisionError):10/0# 断言包含特定消息的异常withpytest.raises(ValueError,matchinvalid):raiseValueError(invalid value)1.8 Fixture夹具1.8.1 基本用法importpytestpytest.fixturedeflogin_user():返回登录用户数据return{username:test,password:123456}deftest_login(login_user):usernamelogin_user[username]passwordlogin_user[password]assertusernametest1.8.2 Fixture作用域作用域生命周期适用场景function每个测试函数临时数据class每个测试类类级共享状态module每个测试文件数据库连接session整个测试会话WebDriver实例pytest.fixture(scopesession)defbrowser():driverwebdriver.Chrome()yielddriver driver.quit()1.8.3 带清理的Fixturepytest.fixturedefdb_connection():创建数据库连接测试后自动关闭conncreate_connection()yieldconn conn.close()1.8.4 conftest.pyconftest.py是pytest的特殊文件放在该文件中的fixture无需导入即可全局使用# tests/conftest.pyimportpytestpytest.fixture(scopesession)defbase_url():returnhttps://api.example.compytest.fixture(scopefunction)defauth_token():returnBearer test-token1.9 参数化测试importpytestpytest.mark.parametrize(username,password,expected,[(admin,123456,True),(admin,wrong,False),(nonexistent,123456,False),(,123456,False),])deftest_login_parametrized(username,password,expected):resultauthenticate(username,password)assertresultexpected1.10 测试标记importpytestpytest.mark.smokedeftest_login():passpytest.mark.regressiondeftest_checkout():passpytest.mark.skip(reason功能尚未实现)deftest_feature_not_implemented():passpytest.mark.xfail(reason已知bug)deftest_known_bug():pass运行带标记的测试pytest-msmoke# 只运行冒烟测试pytest-mnot slow# 排除慢速测试1.11 生成测试报告# HTML报告pytest--htmlreports/test_report.html# Allure报告需安装allure-pytestpipinstallallure-pytest pytest--alluredirreports/allure_results allure serve reports/allure_results1.12 实战示例API接口测试# test_api.pyimportpytestimportrequestspytest.fixturedefapi_client():returnrequests.Session()pytest.fixturedefbase_url():returnhttps://jsonplaceholder.typicode.comclassTestUserAPI:deftest_get_users(self,api_client,base_url):responseapi_client.get(f{base_url}/users)assertresponse.status_code200assertisinstance(response.json(),list)deftest_get_user_by_id(self,api_client,base_url):responseapi_client.get(f{base_url}/users/1)assertresponse.status_code200userresponse.json()assertuser[id]1assertnameinuserdeftest_create_user(self,api_client,base_url):payload{name:Test User,email:testexample.com}responseapi_client.post(f{base_url}/users,jsonpayload)assertresponse.status_code201created_userresponse.json()assertcreated_user[name]payload[name]

相关新闻

视频实时翻译软件各国视频声音翻译生成字幕神器音视频转文字字幕小工具效果测试支持100多种语言

视频实时翻译软件各国视频声音翻译生成字幕神器音视频转文字字幕小工具效果测试支持100多种语言

大家好,我是大飞哥。看外语视频的时候,你是不是也经常因为没有字幕而看得一头雾水?想给自己拍的口播视频加字幕,又得一句一句听写,一段几分钟的视频能折腾一两个小时。市面上的在线转文字工具不是收费就是限制时长&…

2026/10/17 21:48:03 阅读更多 →
视频处理器 v1.2功能强大的导入视频蒙版文件视频横屏转竖屏处理工具

视频处理器 v1.2功能强大的导入视频蒙版文件视频横屏转竖屏处理工具

大家好,我是大飞哥。做短视频的朋友都知道,现在的短视频平台基本都是竖屏(9:16)的天下,但很多高质量的素材——电影片段、课程录像、游戏画面、老视频素材——偏偏都是横屏(16:9)的。直接拉伸吧…

2026/10/20 6:49:20 阅读更多 →
模拟电路设计:PSRR与PSMR电源噪声抑制指标解析

模拟电路设计:PSRR与PSMR电源噪声抑制指标解析

1. 电源噪声抑制指标的本质差异在模拟电路设计中,PSRR(Power Supply Rejection Ratio)和PSMR(Power Supply Modulation Ratio)这两个指标常常让工程师感到困惑。它们虽然都与电源噪声相关,但反映的是完全不…

2026/10/18 11:29:38 阅读更多 →

最新新闻

AI代理“猜你有钱就推贵的”:基于购买力评估的推荐价格带动态调整策略

AI代理“猜你有钱就推贵的”:基于购买力评估的推荐价格带动态调整策略

先说个真实的感受。做推荐系统的人都知道,模型调来调去,无非是在“猜用户想要什么”上打转。但你有没有想过一个问题:系统会不会猜用户“买得起什么”?我最近复盘了一个实验项目,项目代号干脆就叫“模拟项目X”&#x…

2026/10/20 18:12:45 阅读更多 →
提示系统原型设计:从模糊需求到可落地方案

提示系统原型设计:从模糊需求到可落地方案

提示系统原型设计,听起来是件小事,画几个弹窗、排几个Toast,好像一两天就能搞定。但真正接过这类需求的架构师都明白,这玩意儿是需求模糊的重灾区。我见过太多项目,需求方开口就是“给个提示就行”“别太打扰用户”“重…

2026/10/20 18:12:45 阅读更多 →
金融科技AI岗位揭秘:视觉、语音、NLP、ML与AI安全都在做什么

金融科技AI岗位揭秘:视觉、语音、NLP、ML与AI安全都在做什么

视觉、语音、NLP、ML、AI安全:金融科技公司的这五个方向,分别都在做什么看到这个标题的时候,我愣了一下。不是因为方向多,而是因为五个方向同时出现这件事本身,恰好透露出金融科技行业对AI岗位的真实定义:这…

2026/10/20 18:12:45 阅读更多 →
Label Studio工程化指南:从画框工具到数据生产基础设施

Label Studio工程化指南:从画框工具到数据生产基础设施

用了两年多 Label Studio,我必须说一句:这可能是开源工具里被误解得最厉害的一个。很多人提到它,第一反应就是“标注工具”“画框软件”——拿来打几个检测框、标几段文本、分一下类,用完就关。我也曾经这么干过,直到某…

2026/10/20 18:12:45 阅读更多 →
Windows下多Tomcat实例部署:端口规划与服务注册实战

Windows下多Tomcat实例部署:端口规划与服务注册实战

1. 方案设计:多实例并存的关键不在安装,而在规划1.1 多Tomcat服务从什么需求场景来先交代我遇到的实际场景。一台Windows测试机上要同时部署三个Java Web应用:一个老系统还在用Tomcat 8,一个内部OA想跑在Tomcat 9上,还…

2026/10/20 18:12:45 阅读更多 →
大模型跨机房高可用 SLA 探针:基于 gRPC 双向流的微秒级心跳检测

大模型跨机房高可用 SLA 探针:基于 gRPC 双向流的微秒级心跳检测

在分布式大模型推理架构中,多机房、多云灾备已经成为保障业务 SLA(服务等级协议)的标配手段。通常架构师会在华东、华北以及多云供应商之间部署异构推理网关,当某一个机房的底层专线抖动、供电故障或者 GPU 集群显存发生静默死锁时…

2026/10/20 18:11:37 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →