文章目录
- [一.Pytest 简介、安装与环境准备](#一.Pytest 简介、安装与环境准备)
-
- 简介
- [Pytest 安装与环境准备](#Pytest 安装与环境准备)
- [运行 pytest 程序](#运行 pytest 程序)
- [二.Pytest 命名规则](#二.Pytest 命名规则)
- [三.PyCharm 配置与界面化运行](#三.PyCharm 配置与界面化运行)
- [四.Pytest 测试用例结构](#四.Pytest 测试用例结构)
- [五. 测试用例断言](#五. 测试用例断言)
一.Pytest 简介、安装与环境准备
简介
Pytest是现阶段自动化测试主流框架之一,其兼容了unittest 框架,用于编写简单的单元测试和复杂的功能测试。该框架被广泛用于自动化测试、回归测试等各种场景。自动化测试:一句话讲解,使用代码脚本去实现测试用例,可以省去绝大多数简单重复大量的case,节省人力。
pytest的优势如下:
1、pytest 提供了灵活的插件机制、优秀的错误报告、简洁的断言语法、以及丰富的配置选项。2、Pytest 可以结合 Requests 实现接口测试; 结合 Selenium、Appium 实现自动化功能测试。
3、使用 Pytest 结合 Allure 集成到 Jenkins 中可以实现持续集成。
- Pytest 的优点
- 简洁易用:快速上手,有着清晰的代码层级划分,代码可读性更高,可以自动发现和运行测试
- 强大的插件机制:支持扩展,可以方便地与其他工具和框架集成。
- 灵活的配置和插件:可以根据项目的需要灵活配置,支持自定义 hooks 和插件。
- 优秀的断言支持:断言的编写更加简洁明了,无论是读码还是新增都更容易
Pytest 安装与环境准备
需要注意的是,有些Python版本需要使用指定的pytest
-
安装方式有如下两种
-
命令安装
- 安装命令 : pip install pytest
- 更新命令 : pip install -U pytest
-
通过 PyCharm 界面化直接安装

-
运行 pytest 程序
pytest 框架十分简单,使用 test为前缀命名文件,便会被 pytest 框架所执行,并且会根据文件内的代码执行结果产生对应的测试结果报告
-
运行第一个脚本
pydef inc(x): return x + 1 def test_answer(): assert inc(3) == 5- 运行结果
- 可通过 pytest 指令运行,将3这个参数传递给函数 inc() 验证结果是否等于5,结果为 3+1=4≠5,所以测试未通过。
- 运行结果
二.Pytest 命名规则
命名规则
Pytest 以特定规则识别测试用例,所以测试用例文件、测试类以及类中的方法、测试函数这些命名都必须符合规则,才能被 Pytest 识别到并加入测试运行队列中。如果不遵循 Pytest 的命名规则会导致 Pytest 识别不到测试用例。
- 详细命名规则
| 类型 | 规则 | 命名示例 |
|---|---|---|
| py文件 | test_ 开头或 _test 结尾 | test_app.py |
| 类 | Test 开头 | class TestApp: |
| 方法/函数 | test_开头 | def test_app(): |
- 注意:测试类中不可以添加__init__构造函数。
命名规则的优点
- 自动发现测试用例: Pytest 的命名规则可以让 Pytest 自动发现测试用例,只需按照规定的命名规则编写测试函数或类,Pytest 能够自动识别并执行这些测试。
- 避免冲突和命名混乱: 通过统一的命名规则,可以避免测试用例的命名冲突和混乱。每个测试函数或类都有明确的命名前缀,使其与其他函数或类区分开来,有助于测试代码的可读性和维护性。
- 代码结构清晰: 命名规则提供了一种规范的测试代码组织方式。测试函数和类的命名约定使得测试用例的层次结构清晰可见,更易于理解和维护。这对于大型项目或有大量测试代码的项目尤为重要。
- 与其他测试框架兼容: 许多其他测试框架也采用类似的命名规则,所以如果之前使用过其他测试框架,转换到 Pytest 会更加容易。可以在保持相同的命名约定的同时,切换到 Pytest 并享受其丰富的功能和优势。
三.PyCharm 配置与界面化运行
-
1、进入 Tools->Python Intergrated Tools。
-
2、选择 Default test runner 为 pytest。

-
配置完成后,执行默认 pytest 为测试执行器,否则为默认执行
-
配置前

-
配置后

四.Pytest 测试用例结构
当编写测试用例时,通常可以将其分为三个主要部分:用例名称、用例步骤和用例断言。这三部分的组合可以清晰的确定测试的目的、执行过程和预期结果。
测试用例组成要素
- 用例名称: 测试用例中的用例名称指的是函数名,要使用 test_ 开头或者以 _test 结尾。
- 用例步骤: 用例步骤是描述测试执行的具体操作、流程或步骤。
- 用例断言: 用例断言是描述在测试执行后应该满足的条件或预期结果。
测试函数
py
# 用例名称
def test_app(self):
# 测试步骤1
# 测试步骤2
# 断言 实际结果 对比 预期结果
assert ActualResult == ExpectedResult
测试类及内部测试方法(函数)
py
# 用例名称
class TestApp:
def setup_method(self):
# 资源准备(前置条件,比如吃苹果之前需要先削皮)
pass
def teardown_method(self):
# 资源销毁(后置条件,吃完苹果需要把果核丢尽垃圾桶里)
pass
# 用例名称
def test_XXX(self):
# 测试步骤1
# 测试步骤2
# 断言 实际结果 对比 预期结果
assert ActualResult == ExpectedResult
五. 测试用例断言
在 pytest 中,断言(assert)是用来验证测试结果是否符合预期的基本手段。
断言语句用的是 Python 内置的 assert 语句,用于验证期望的结果与实际的结果是否相符,它是测试框架中检查测试正确性的基础。
assert 可以检查某个条件是否为 True,如果条件为 False,则会抛出 AssertionError 异常,并且测试失败。
测试用例组成要素
- 用例名称: 测试用例中的用例名称指的是函数名,要使用 test_ 开头或者以 _test 结尾。
- 用例步骤: 用例步骤是描述测试执行的具体操作、流程或步骤。
- 用例断言: 用例断言是描述在测试执行后应该满足的条件或预期结果。
测试函数
py
# 用例名称
def test_app(self):
# 测试步骤1
# 测试步骤2
# 断言 实际结果 对比 预期结果
assert ActualResult == ExpectedResult
