Python自动化测试入门:环境搭建与第一个脚本编写

桃夭
桃夭
发布时间:2026-11-04| 4人浏览过
原创

面向初学者的Python自动化测试入门指南,涵盖虚拟环境隔离配置、主流测试框架对比与选择、首个测试脚本的3A编写规范及测试执行与报错排查。

Python自动化测试入门:环境搭建与第一个脚本编写
自动化测试的核心是通过预设代码替代人工验证,用确定性的预期结果对业务函数进行反复比对。本文将直接带你完成两件事:搭建一个不受全局污染的独立测试运行环境,以及遵循 3A 规范编写并成功运行你的第一个 Python 自动化测试脚本。

一、为什么测试环境必须使用虚拟环境

很多初学者在开始自动化测试时,习惯直接使用系统的全局 Python 环境通过 pip install pytest 安装依赖。这种做法在临时实验时看似方便,但在实际项目中会迅速引发严重的依赖与维护问题。

为了理解为什么要先搭建独立环境,我们需要对比全局环境与虚拟环境在自动化测试场景下的关键差异:

对比维度 全局环境直接运行 venv 独立虚拟环境 关键影响说明
依赖隔离度 所有项目共享同一套第三方包 每个项目拥有独立的 site-packages 目录 全局环境下,升级某个项目的测试插件可能会导致其他项目的测试脚本直接瘫痪。
依赖版本固化 pip freeze 会导出系统所有无关包 仅导出当前测试所需的核心依赖 虚拟环境生成的 requirements.txt 精准干净,便于团队协作与 CI/CD 持续集成。
运行权限与安全 修改可能需要系统管理员权限 用户目录完全掌控,无需提权 避免污染系统自带 Python 运行时,防止损坏操作系统底层依赖工具。

结论非常明确:在开展任何测试工作前,先为项目初始化专属虚拟环境是不可省略的基础工程规范。

二、四步完成自动化测试环境搭建

在 Python 3 中,标准库自带了轻量级虚拟环境工具 venv,我们无需安装额外的管理软件即可快速完成配置。

步骤 1:创建测试工程专用目录

打开终端(Windows 下可使用 PowerShell 或 CMD,macOS / Linux 使用 Terminal),在合适位置创建专用文件夹并进入:

mkdir py_test_demo
cd py_test_demo

步骤 2:初始化虚拟环境

执行以下命令,在当前工程目录下生成名为 .venv 的独立环境目录:

python3 -m venv .venv

(注:Windows 环境下若 python3 命令未关联,请直接执行 python -m venv .venv。)

步骤 3:激活虚拟环境

不同操作系统的激活脚本路径略有差异:

  • macOS / Linux 平台:
    source .venv/bin/activate
  • Windows 平台(PowerShell):
    .venv\Scripts\Activate.ps1
  • Windows 平台(CMD):
    .venv\Scripts\activate.bat

激活成功后,你的终端提示符最前端会出现 (.venv) 标识,表示后续所有的 Python 与 Pip 操作均被限制在该独立环境中。

步骤 4:安装并验证 pytest 框架

在激活状态下,执行以下命令安装现代化测试框架 pytest:

pip install pytest

安装完成后,运行版本检查命令确认环境就绪:

pytest --version
终端输出示例
pytest 8.3.3

当看到终端正确返回 pytest 的具体版本号时,说明测试运行时环境已完全就绪。

Python自动化测试入门:环境搭建与第一个脚本编写
图 1:Python 自动化测试环境初始化关键路径

三、测试框架的理解:unittest 与 pytest 的核心差异

在 Python 自动化测试领域,初学者常会接触到两个名字:标准库内置的 unittest 与第三方主流的 pytest。了解它们的本质区别,能帮助我们建立清晰的测试思维。

在测试同一个折扣计算函数时,两者的代码组织方式存在根本差异:

  • unittest(基于面向对象模型): 源自 Java 的 JUnit 风格。编写测试用例必须声明一个类并继承 unittest.TestCase,断言时必须调用特定的辅助方法(如 self.assertEqual(a, b)、self.assertTrue(x)),并且需要记忆数十种专有断言 API。
  • pytest(基于函数式与原生语法): 无需继承任何基类,一个普通的以 test_ 开头的 Python 函数就是一个测试用例。断言直接使用 Python 原生的 assert a == b 关键字。在用例执行失败时,pytest 会在底层智能解析抽象语法树(AST),自动输出极为详细的操作数对比与上下文回溯。
Python自动化测试入门:环境搭建与第一个脚本编写
图 2:unittest 与 pytest 语法范式及底层机制对比

对于初学者和现代 Python 工程,pytest 凭借极简的语法、自动测试发现以及庞大的插件生态,已成为事实上的业界标准。因此,本文后续脚本将完全基于 pytest 编写。

四、编写第一个自动化测试脚本

编写自动化测试不是凭空写测试语句,它必须依托明确的“被测业务逻辑”。在当前工程目录 py_test_demo 中,我们先编写一段实际的业务代码,再为其建立测试用例。

1. 编写待测业务代码:coupon.py

在工程根目录下新建 coupon.py,实现一个简单的电商满减折扣计算器:

# coupon.py

def calculate_discount(total_amount: float, is_vip: bool) -> float:
    if total_amount <= 0:
        raise ValueError("订单总额必须大于0")
    
    pay_amount = total_amount * 0.9 if is_vip else total_amount
    
    if pay_amount >= 200:
        pay_amount -= 20
        
    return round(pay_amount, 2)

2. 编写测试脚本:test_coupon.py

测试脚本必须严格遵守 pytest 的文件命名发现规则:文件名必须以 test_ 开头或以 _test.py 结尾,测试函数必须以 test_ 开头。否则 pytest 在执行全局扫描时会忽略该文件。

新建 test_coupon.py 文件。在编写具体测试用例时,行业内广泛采用经典的 3A 原则(Arrange-Act-Assert):

  • Arrange(准备阶段): 设定测试所需的输入参数或前置状态。
  • Act(执行阶段): 调用被测业务函数,获取实际运算输出。
  • Assert(断言阶段): 使用 assert 关键字核验“实际输出”是否绝对等于“预期结果”。
# test_coupon.py
import pytest
from coupon import calculate_discount

def test_normal_user_under_threshold():
    # 场景 1:普通用户,未达到满减门槛
    # Arrange
    amount = 100.0
    is_vip = False
    
    # Act
    result = calculate_discount(amount, is_vip)
    
    # Assert
    assert result == 100.0

def test_vip_user_with_discount_and_subtraction():
    # 场景 2:VIP 用户,折后达到 200 元触发立减
    # Arrange
    amount = 300.0
    is_vip = True
    
    # Act
    # 300 * 0.9 = 270,满 200 立减 20,应得 250
    result = calculate_discount(amount, is_vip)
    
    # Assert
    assert result == 250.0

def test_invalid_amount_raises_error():
    # 场景 3:异常测试,订单金额为 0 时必须抛出 ValueError
    with pytest.raises(ValueError) as exc_info:
        calculate_discount(0, is_vip=False)
    
    # 验证抛出的异常消息内容
    assert "订单总额必须大于0" in str(exc_info.value)
Python自动化测试入门:环境搭建与第一个脚本编写
图 3:3A 原则结构分解与断言判断流转

五、运行测试与结果诊断分析

编写好测试脚本后,在工程根目录下执行 pytest 命令:

pytest -v

(注:参数 -v 表示 verbose,能够将测试发现的每个具体函数名称及其运行状态逐一打印出来。)

终端通过输出示例
============================= test session starts ============================== platform darwin -- Python 3.11.8, pytest-8.3.3, pluggy-1.5.0 -- /py_test_demo/.venv/bin/python rootdir: /py_test_demo collected 3 items test_coupon.py::test_normal_user_under_threshold PASSED [ 33%] test_coupon.py::test_vip_user_with_discount_and_subtraction PASSED [ 66%] test_coupon.py::test_invalid_amount_raises_error PASSED [100%] ============================== 3 passed in 0.02s ===============================

如何诊断测试失败

自动化测试最有价值的时刻并不是看到绿色的 PASSED,而是在代码发生变更引入 bug 时精准报错。我们做一次故意的人为制造错误实验:

将 test_coupon.py 中第 2 个测试用例的断言由 assert result == 250.0 错误修改为 assert result == 260.0,再次执行 pytest:

断言失败时的终端输出示例
=================================== FAILURES =================================== _________________ test_vip_user_with_discount_and_subtraction __________________ def test_vip_user_with_discount_and_subtraction(): amount = 300.0 is_vip = True result = calculate_discount(amount, is_vip) > assert result == 260.0 E assert 250.0 == 260.0 test_coupon.py:19: AssertionError =========================== short test summary info ============================ FAILED test_coupon.py::test_vip_user_with_discount_and_subtraction - assert 250.0 == 260.0 ========================= 1 failed, 2 passed in 0.04s ==========================

观察失败输出中的 E assert 250.0 == 260.0:pytest 会清晰指出具体发生断言失败的代码行号(test_coupon.py:19)、左侧的实际计算结果(250.0)与右侧的预期值(260.0)。这让开发者无需手动打断点或添加 print 语句,一眼即可定位是业务逻辑出错还是测试用例的预期值定义有误。

初学者常见报错提醒:
  • Empty suite / collected 0 items: 如果 pytest 提示收集到 0 个用例,请立即检查文件名是否为 test_*.py 以及函数名是否为 test_*()。pytest 不会自动扫描不符合命名规范的文件。
  • ModuleNotFoundError: No module named 'coupon': 当在子目录或特定 IDE 中运行测试时,如果提示找不到业务模块,请确保从工程根目录执行 pytest 命令,或者在项目根目录下放置一个空的 pytest.ini 文件标明根路径。

六、自动化测试入门落地核查清单

完成首个测试脚本的编写与执行后,你已经掌握了 Python 自动化测试的核心链路。在后续为更多业务模块补充测试时,可以对照以下全流程核对规范:

Python自动化测试入门:环境搭建与第一个脚本编写
图 4:Python 自动化测试规范落地核验矩阵

掌握了环境隔离与基于 pytest 的 3A 测试编写方法后,你可以继续探索更深阶的参数化测试(@pytest.mark.parametrize)与前置夹具管理(fixture),从而在面对复杂业务时也能编写出稳定、优雅且易维护的高质量测试套件。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。