news 2026/7/27 7:30:12

Pytest 自动化测试框架速通指南(一)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Pytest 自动化测试框架速通指南(一)

摘要:本文系统性地介绍了 Python 主流测试框架 Pytest 的核心概念、快速上手方法、运行结果解读、用例编写规则以及常用配置技巧。通过对比分析、代码示例和实战练习,帮助读者从零开始掌握 Pytest 的使用,构建高效的自动化测试流程。

文章大纲

本文将围绕以下核心章节展开,每个章节都配有详细的讲解和实战代码:

  1. 测试框架概述与 Pytest 优势– 阐述测试框架的五大核心步骤,对比 unittest 与 pytest,明确学习 Pytest 的必要性。
  2. 环境搭建与三种启动方式– 详细讲解 Pytest 的安装、验证方法,并通过图文演示命令、代码和 IDE 三种启动方式。
  3. 深入解读测试运行结果– 分析终端输出的结构,解释六种用例状态(PASSED, FAILED, ERROR, SKIPPED, XFAIL, XPASS)及其含义。
  4. Pytest 用例编写核心规则– 详解用例的发现机制(文件、类、函数命名规则)和内容规范(可调用、无参数、无返回值)。
  5. 常用配置与参数详解– 介绍如何通过命令行参数和 pytest.ini 配置文件定制测试行为,重点讲解 -v, -s, -x, -m 等常用参数。

接下来,让我们正式进入正文。

一、什么是测试框架

测试框架是抽象出来的工具集合,提供了大量的组件、工具以及功能。

其中以下五个步骤是测试必不可少的,只有依托于测试框架才能帮助我们完成测试:

  • 用例发现
  • 用例管理
  • 环境管理
  • 用例执行
  • 测试报告

大部分的编程语言都会有测试框架,例如:

Java:Junit、testNG

Python:unittest、pytest

这里,将Python的这两种框架以一个表格的形式来做一个对比,可以直观地看出两个测试框架的区别与联系。

unittest与pytest对比
unittestpytest
安装、卸载无须安装手动安装
升级、降级无法改变版本可以指定版本
代码风格JavaPython
插件生态只有几个插件1400+插件可用
备注(其他)由Python官方来进行维护完全兼容unittest

这里不难看出,pytest的优点,插件多,还能指定版本使用,完全兼容了unittest,pytest是很主流的测试框架,因此学习这个测试框架是很必要的。

二、快速上手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 pytest

pytest.main()

这里新建了一个main.py的文件,然后输入了这段代码,点击运行,看到如上图所示图片,表明pytest已经启动成功。

3.鼠标(新手小白不推荐)——原因:1.图标上的绿色箭头是由Pycharm这个软件提供的,并不是pytest,容易出现BUG。2.行为与前两种方式不一致,不适合复杂的项目。

通过进一步学习pytest,你可以发现pytest在简单的基础上,对断言进行了高级封装(AST),因此它对python数据结构断言是非常友好的

三、详细分析终端pytest运行结果

这里我写了三个简单的测试用例,然后执行。在刚才新建的项目中添加即可,以下是具体的代码展示:

def test_str(): a='aaabbbb' b='aaaabcc' assert a==b def test_list(): a=list('aaabbbb') b=list('aaaabcc') assert a==b def test_dict(): a={"a":1,"b":2,"c":3} b={"a":2,"b":2,"c":3} assert a==b

接下来具体解释一下终端的运行结果。

platform win32 -- Python 3.11.7, pytest-9.1.1, pluggy-1.6.0 rootdir: E:\PyProject collected 3 items

test_base.py FFF [100%]

============================================================ FAILURES ============================================================ ____________________________________________________________ test_str ____________________________________________________________

def test_str(): a='aaabbbb' b='aaaabcc'

> assert a==b E AssertionError: assert 'aaabbbb' == 'aaaabcc' E
E - aaaabcc E + aaabbbb

test_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 a+b 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(): a=input("请输入手机号")

然后输入pytest -vv -ss,会得到上面的提示。

随机输入一段数字,回车,该测试用例才会通过。

这是输入测试用例,只有加-s才能看到,输出用例同样如此。

def test_print(): print('张三联系方式是12345678')

-x:快速退出,如果收到失败用例,后面的用例不再执行。

-m:用例筛选(具体筛选细则在下一篇——标记mark当中讲)


笔记有点多,先学习前五章~,下面的内容参考第二篇有关pytest的文章~今天就学到这里,可以点个关注哦,还会更新更多有关测试的学习内容(* ̄︶ ̄)。

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

Day 14:Git 版本控制 —— 给你的代码装上一台「时光机」

从现在开始,你的每一行代码都将拥有"后悔药"和"全球同步"的能力。 前言:为什么你需要 Git? 经过前 13 天的努力,你已经能在 Linux 里写代码、调试、编译、用 Makefile 自动化构建了。但你有没有遇到过这些"人间惨剧": 改了一下午代码,程序…

作者头像 李华
网站建设 2026/7/27 7:27:54

YOLOv8在遥感目标检测中的应用与优化实践

1. 项目概述:基于YOLOv8的光学遥感目标检测系统在遥感图像分析领域,目标检测一直是个极具挑战性的任务。去年我在参与某港口监测项目时,曾花费大量时间手动标注卫星图像中的船舶位置,效率低下且容易出错。正是这种痛点促使我深入研…

作者头像 李华
网站建设 2026/7/27 7:25:38

Seraphine:英雄联盟玩家的终极智能助手,告别手动查询的繁琐时代

Seraphine:英雄联盟玩家的终极智能助手,告别手动查询的繁琐时代 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 想要在英雄联盟对局中快速了解队友和对手的实力吗?厌倦了频…

作者头像 李华
网站建设 2026/7/27 7:24:48

2023软件工程毕业设计选题趋势与技术实践

1. 软件工程毕业设计选题现状分析2023年软件工程专业毕业设计选题呈现出几个明显特征:首先,传统管理系统类选题占比下降至不足30%,而人工智能相关选题飙升至45%以上;其次,跨学科融合项目较去年增长200%,特别…

作者头像 李华
网站建设 2026/7/27 7:22:48

新手必读:靶向肺脏的AAV血清型怎么选

肺脏包含肺泡上皮、血管内皮、平滑肌、巨噬细胞等多种细胞类型,不同AAV血清型对肺脏的转导效率和细胞嗜性差异显著。如何根据靶细胞定位和注射方式,快速选出最适合的AAV血清型?本文基于和元生物多年服务肺部研究课题组的实战数据,…

作者头像 李华