尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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的文章~今天就学到这里可以点个关注哦还会更新更多有关测试的学习内容(*︶)。
RELATED

相关推荐

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

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

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

📅 2026/9/11 13:32:56
Python自动化时间盲注脚本实战:从原理到高效渗透工具开发

Python自动化时间盲注脚本实战:从原理到高效渗透工具开发

1. 项目概述:从“盲”到“明”的数据库渗透艺术在Web安全测试或渗透测试的实战中,SQL注入无疑是最经典、最有效的攻击手段之一。但当我们面对一个没有明确错误回显、没有数据回显的“黑盒”应用时,传统的联合查询注入或报错注入往往就失效了。…

📅 2026/8/23 0:36:18
C++向上类型转换:多态基石下的内存陷阱与安全实践

C++向上类型转换:多态基石下的内存陷阱与安全实践

1. 项目概述:向上类型转换的“双刃剑”在C面向对象编程的日常里,多态是我们构建灵活、可扩展系统的基石。而实现多态的一个关键前提,就是“向上类型转换”——即允许父类的指针或引用去指向或绑定一个子类对象。这个特性听起来非常美好&#…

📅 2026/8/23 0:36:18
MORE NEWS

更多资讯

📰

驰宇微液晶屏选型与定制应用实战指南

1. 为什么说“驰宇微液晶屏”不是买个屏那么简单? 最近三个月,我帮三家做工业HMI设备的客户做过屏幕选型,其中两家最初都卡在“驰宇微”这个牌子上——不是因为买不到,而是因为买回来之后发现:驱动时序对不上、背光亮度…

📰

grill-with-docs 技能实战:一次会话内完成设计拷问与领域文档沉淀

grill-with-docs 技能实战:一次会话内完成设计拷问与领域文档沉淀 【免费下载链接】skills Skills for Real Engineers. Straight from my .agents directory. 项目地址: https://gitcode.com/GitHub_Trending/skills13/skills 导读 grill-with-docs 是本仓…

📰

并查集算法解析与白雪皑皑问题实战

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

📰

Vant Swipe 轮播组件完全指南:从基础用法到源码级原理剖析

Vant Swipe 轮播组件完全指南:从基础用法到源码级原理剖析 【免费下载链接】vant A lightweight, customizable Vue UI library for mobile web apps. 项目地址: https://gitcode.com/GitHub_Trending/va/vant Swipe 是 Vant 移动端 UI 库中用于轮播展示一组…

📰

大一新生成长指南:学业规划与个人发展

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

📰

数据预处理源码V2.0:Pandas与Scikit-learn全流程实战解析

简介:这是与《Python数据预处理(微课版)》配套的源代码V2.0资源包,面向正在学习数据清洗、转换与特征工程的读者,以及需要按教材实操练习的高校学生与自学人群。压缩包共134个文件,以57个.ipynb笔记为主体&…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬