Pytest 自动化测试框架速通指南(一)
摘要本文系统性地介绍了 Python 主流测试框架 Pytest 的核心概念、快速上手方法、运行结果解读、用例编写规则以及常用配置技巧。通过对比分析、代码示例和实战练习帮助读者从零开始掌握 Pytest 的使用构建高效的自动化测试流程。文章大纲本文将围绕以下核心章节展开每个章节都配有详细的讲解和实战代码测试框架概述与 Pytest 优势– 阐述测试框架的五大核心步骤对比 unittest 与 pytest明确学习 Pytest 的必要性。环境搭建与三种启动方式– 详细讲解 Pytest 的安装、验证方法并通过图文演示命令、代码和 IDE 三种启动方式。深入解读测试运行结果– 分析终端输出的结构解释六种用例状态PASSED, FAILED, ERROR, SKIPPED, XFAIL, XPASS及其含义。Pytest 用例编写核心规则– 详解用例的发现机制文件、类、函数命名规则和内容规范可调用、无参数、无返回值。常用配置与参数详解– 介绍如何通过命令行参数和 pytest.ini 配置文件定制测试行为重点讲解 -v, -s, -x, -m 等常用参数。接下来让我们正式进入正文。一、什么是测试框架测试框架是抽象出来的工具集合提供了大量的组件、工具以及功能。其中以下五个步骤是测试必不可少的只有依托于测试框架才能帮助我们完成测试用例发现用例管理环境管理用例执行测试报告大部分的编程语言都会有测试框架例如JavaJunit、testNGPython:unittest、pytest这里将Python的这两种框架以一个表格的形式来做一个对比可以直观地看出两个测试框架的区别与联系。unittest与pytest对比unittestpytest安装、卸载无须安装手动安装升级、降级无法改变版本可以指定版本代码风格JavaPython插件生态只有几个插件1400插件可用备注其他由Python官方来进行维护完全兼容unittest这里不难看出pytest的优点插件多还能指定版本使用完全兼容了unittestpytest是很主流的测试框架因此学习这个测试框架是很必要的。二、快速上手Pytest测试框架这里pytest安装非常简单直接使用这个命令就能安装pip install pytest #第一次安装pip install pytest -U #升级到最新版本电脑上很早之前安装过在安装之前可以先查看一下自己电脑上是否安装了pytest如果是Anaconda 内置 Python那你就需要像我一样这样操作Windows 左下角搜索Anaconda Prompt打开这个黑色专属终端不是普通 CMD/PowerShell直接输入pip install pytest这里就会弹出说明pytest 早已安装成功版本 为8.4.2。这样的情况下就不需要安装了。如果不放心可以使用以上命令查看pytest的版本。这里你可以使用Pycharm这个代码编辑软件来创建一个名为my_pytest的项目如果没有安装这个软件可以参考这篇文章来安装和创建新项目2025年最新版Python安装PyCharm安装教程 图文超级详细_python下载安装教程-CSDN博客这是创建之后的页面可以使用pip install pytest -U来更新到最新版本。这里我新建了一个简单的测试脚本用来测试pytest的三种启动方式。1.命令——直接输入pytest命令当你看到这张图片的内容时说明pytest框架已经工作了环境搭建已经没问题了。2.代码import pytestpytest.main()这里新建了一个main.py的文件然后输入了这段代码点击运行看到如上图所示图片表明pytest已经启动成功。3.鼠标新手小白不推荐——原因1.图标上的绿色箭头是由Pycharm这个软件提供的并不是pytest容易出现BUG。2.行为与前两种方式不一致不适合复杂的项目。通过进一步学习pytest你可以发现pytest在简单的基础上对断言进行了高级封装AST因此它对python数据结构断言是非常友好的。三、详细分析终端pytest运行结果这里我写了三个简单的测试用例然后执行。在刚才新建的项目中添加即可以下是具体的代码展示def test_str(): aaaabbbb baaaabcc assert ab def test_list(): alist(aaabbbb) blist(aaaabcc) assert ab def test_dict(): a{a:1,b:2,c:3} b{a:2,b:2,c:3} assert ab接下来具体解释一下终端的运行结果。platform win32 -- Python 3.11.7, pytest-9.1.1, pluggy-1.6.0 rootdir: E:\PyProject collected 3 itemstest_base.py FFF [100%] FAILURES ____________________________________________________________ test_str ____________________________________________________________def test_str(): aaaabbbb baaaabcc assert ab E AssertionError: assert aaabbbb aaaabcc EE - aaaabcc E aaabbbbtest_base.py:4: AssertionError ___________________________________________________________ test_list ____________________________________________________________test_base.py:15: AssertionError short test summary info FAILED test_base.py::test_str - AssertionError: assert aaabbbb aaaabcc 3 failed in 0.07s 因为终端展示的运行内容比较多这里只保留一个来解释分析。输出的主要内容有1.执行环境版本、根目录、用例数量2.执行过程用例名称、用例结果、以及执行进度3.失败详情用例内容、断言提示4.整体摘要结果情况、结果数量、花费时间补充这里可以使用pytest test_base.py -v这个命令来分开展示进度条。接下来再补充一下用例结果缩写的知识表格如下缩写单词含义.passed通过Ffailed失败用例执行时报错Eerror出错fixture执行报错sskipped跳过Xxpassed预期外的通过不符合预期xxfailed预期内的失败符合预期这个表格不需要死记硬背在项目中见多了就记住了。接下来可以模拟一下六种不同情况的测试用例看一下终端提示结果。import pytest 1、正常通过 PASS def test_pass(): assert 1 1 2、断言失败 FAILED业务逻辑不满足 def test_fail(): assert 1 2 3、代码异常 ERROR用例/夹具内部代码报错非断言失败 pytest.fixture def error_fixture(): # 字符串数字直接相加运行时报错 return 1 1 def test_error(error_fixture): pass 4、标记跳过 SKIPPED pytest.mark.skip(reason功能暂未开发完成暂时跳过执行) def test_skip(): assert True 5、预期失败 XFAIL明确知道这条用例有bug标记预期失败不算失败用例 pytest.mark.xfail(reason已知接口bug待修复预期执行失败) def test_xfail(): assert 99 1 6、允许失败 XPASS标记预期失败但实际执行通过属于意外通过 pytest.mark.xfail(reason本应失败结果代码修复意外通过) def test_xpass(): assert 10 10这是运行结果可以看到表格中出现的六种情况。四、pytest用例规则1.用例发现规则简单来说这个规则就是测试框架识别和加载用例过程故称之为用例发现。pytest的用例发现步骤能够遍历所有的目录例外venv、.开头的目录。打开python文件需要保证以test_开头或者是test_结尾。可以遍历所有的以Test开头的类。收集所有的以test开头的函数和方法类、变量都不是用例。2.用例内容规则pytest对用例的要求是可调用的函数、方法、类、对象。名字以test_开头。没有参数参数是有另外含义的。没有返回值默认为None。3.练习有函数add来接收两个参数并返回它们相加的结果请你为此来编写测试用例。这是参考代码def add(a,b): return ab class TestAdd: # 数字 def test_int(self): res add(1, 2) assert res 3 # 返回字符串(字符串拼接) def test_str(self): res add(1, 2) assert res 12 # 列表拼接 def test_list(self): res add([1], [2,3,4]) assert res [1, 2, 3, 4]运行之后可以看到终端结果为三个点代表测试用例全部通过。这里提醒一下大家千万不要乱删电脑上的软件即使计算机能力很强删东西也要慎重。我在记笔记学习的过程中删掉了一个有关python的软件结果提示我不能正常使用了直接哭死重新配置环境又花了很长时间。┭┮﹏┭┮五、pytest配置框架配置能够改变pytest默认的规则。这里有两种方式可以改变1.命令参数2.ini配置文件也就是所有的配置方式都能够通过这个命令一键获取。pytest -h如图所示。我们可以简单的了解一下里面的配置内容。这里主要讲了有哪些配置分别是什么方式。首先是positional arguments:file_or_dir,文件或者目录这里表示的是用来执行哪个用例的。后面的有-或者两个--的表示的是参数。再往后不带-的是给配置文件去用的。最后大写字母是环境变量。总结一下就是-开头参数小写字母开头ini配置大写字母开头环境变量一般来说配置文件在根目录创建以pytest.ini命名。接下来了解一下常用的参数。-v:增加详细程度-s:在用例中正常的使用输入和输出先输入这个测试用例def test_input(): ainput(请输入手机号)然后输入pytest -vv -ss,会得到上面的提示。随机输入一段数字回车该测试用例才会通过。这是输入测试用例只有加-s才能看到输出用例同样如此。def test_print(): print(张三联系方式是12345678)-x:快速退出如果收到失败用例后面的用例不再执行。-m用例筛选具体筛选细则在下一篇——标记mark当中讲笔记有点多先学习前五章~下面的内容参考第二篇有关pytest的文章~今天就学到这里可以点个关注哦还会更新更多有关测试的学习内容(*︶)。

相关新闻

【仪器仪表专题】瓦楞纸板纸箱容易破一般怎么做来料检验测试

【仪器仪表专题】瓦楞纸板纸箱容易破一般怎么做来料检验测试

背景 瓦楞纸包装在仓储、运输、装卸过程中容易破,容易导致箱内产品的损坏并且增加了企业售后成本,同时造成品牌形象损耗。那么是否有一种指标能够表示出瓦楞纸的强度呢? 根据:GB/T 6545-1998 瓦楞纸板耐破强度的测定法,其中有一个核心的关键指标是:耐破强度。这项指标对瓦…

2026/10/18 2:17:17 阅读更多 →
COMSOL流固耦合模拟在煤矿瓦斯抽采中的应用

COMSOL流固耦合模拟在煤矿瓦斯抽采中的应用

1. 瓦斯抽采与流固耦合模拟的技术背景煤矿瓦斯抽采是保障井下安全生产的关键环节。传统物理实验方法存在成本高、周期长、难以复现复杂地质条件等局限。数值模拟技术通过建立数学模型,可以高效分析不同抽采方案下的瓦斯运移规律。COMSOL Multiphysics作为一款多物理…

2026/10/18 3:02:46 阅读更多 →
国自然申报方法论:锚定-区隔-赋能三步提升命中率

国自然申报方法论:锚定-区隔-赋能三步提升命中率

1. 国自然申报的核心挑战与破局思路每年国家自然科学基金(简称"国自然")申报季,最让科研人员头疼的就是如何在有限的5页纸内,清晰呈现项目的科学价值与创新性。传统写法往往陷入两个极端:要么堆砌大量技术细…

2026/10/18 3:01:27 阅读更多 →

最新新闻

MATLAB滤波器GUI设计:IIR巴特沃斯指标计算与交互实现

MATLAB滤波器GUI设计:IIR巴特沃斯指标计算与交互实现

简介:这是一份面向MATLAB信号处理学习者和工程技术人员的滤波器设计工具包,提供基于GUI交互的IIR与FIR滤波器设计环境,适用于信号预处理、去噪及特定频率成分提取等场景。工具包内含311个文件,以290个m脚本为核心,配合…

2026/10/19 2:57:57 阅读更多 →
用AI高效处理Ozon买家纠纷:提示词模板与实战经验

用AI高效处理Ozon买家纠纷:提示词模板与实战经验

做Ozon这段时间,最让我头疼的不是选品、不是物流,反而是买家纠纷。货发出去之后,买家说没收到、说尺寸不对、说颜色有偏差、说包装破损,然后直接开纠纷。你回复慢了,平台自动判你输;回复得不专业&#xff0…

2026/10/19 2:57:57 阅读更多 →
Unicode字符编码全解析:从乱码根源到UTF-8实战

Unicode字符编码全解析:从乱码根源到UTF-8实战

上个月帮同事排查一个数据导出乱码的现场:文件在 A 系统里显示正常,导进 B 系统后半个屏幕都是黑块加问号。我第一反应是问数据库字符集是什么、导出端点有没有做编码转换,果不其然——源头是 GBK,中间环节默认按 UTF-8 解码&…

2026/10/19 2:57:57 阅读更多 →
一条命令跑通 ArtCraft AI 图像生成:下载与源码构建完整指南

一条命令跑通 ArtCraft AI 图像生成:下载与源码构建完整指南

一条命令跑通 ArtCraft AI 图像生成:下载与源码构建完整指南 【免费下载链接】artcraft ArtCraft is an intentional crafting engine for artists, designers, and filmmakers 项目地址: https://gitcode.com/GitHub_Trending/ar/artcraft 你在 Prompt 框里…

2026/10/19 2:57:57 阅读更多 →
无人机+深度学习:病虫害智能识别与精准施药系统解析

无人机+深度学习:病虫害智能识别与精准施药系统解析

简介:这是一份基于Python开发的无人机病虫害智能识别与精准施药系统项目包,面向需要完成毕业设计、课程设计或进行农业AI项目开发的在校学生与开发者。项目将深度学习图像分类技术与无人机施药场景结合,可用于农作物叶片病害检测、虫害分类及…

2026/10/19 2:57:57 阅读更多 →
OpenClaw多Agent架构实战:从单Agent痛点走向生产化部署

OpenClaw多Agent架构实战:从单Agent痛点走向生产化部署

这两年折腾自动化工作流,最绕不开的关键词就是多Agent。单Agent跑demo的时候看着挺聪明,一旦塞进真实环境,要它一边回邮件、一边管日程、一边还要处理文件归档,很快就乱成一锅粥。OpenClaw这类自托管的Agent运行时就是为了解决这个…

2026/10/19 2:56:56 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 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/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 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/19 2:54:50 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →