第一篇:基座选型 —— 为什么 Pytest 是自动化的终点?

环境搭建与架构初探

专栏进度:01 / 10 (自动化实战专题)

在本篇中,我们将完成从零开始的开发环境配置,并理解 Pytest 框架的运行机理,为后续的接口和 UI 自动化扫清障碍。

一、 为什么抛弃 Unittest 拥抱 Pytest?

如果你还在用 Python 自带的 unittest,你可能需要写大量重复的 setUp 和 tearDown。Pytest 的降维打击体现在:

断言更直观:告别 self.assertIn,直接用 Python 原生的 assert a in b。

Fixture 魔法:支持模块级、类级、甚至整个测试会话级的资源共享。

插件生态:

pytest-html:生成简易 HTML 报告。

pytest-xdist:多 CPU 并行执行,让原本跑 1 小时的测试 5 分钟跑完。

pytest-rerunfailures:自动重跑失败的用例,解决网络波动导致的偶发失败。

二、 环境搭建:专业选手的仪式感

在企业级开发中,严禁在全局环境安装包。我们需要通过虚拟环境实现"项目隔离"。

  1. 建立虚拟空间
    Bash

创建虚拟环境 (建议项目根目录下执行)

python -m venv venv

激活环境

Windows:

venv\Scripts\activate

Mac/Linux:

source venv/bin/activate

  1. 核心包"三剑客"安装

我们将一次性安装基础依赖:

Bash

pip install pytest pytest-xdist pytest-ordering pytest-rerunfailures pytest-html

三、 实战:第一个 Pytest 脚本与核心配置

  1. 编写测试脚本 test_demo.py
    Python
python 复制代码
import pytest

def add(a, b):
    return a + b

class TestMath:
    def test_add_success(self):
        assert add(1, 2) == 3
        
    @pytest.mark.parametrize("a, b, expected", [(1, 1, 2), (2, 3, 5)])
    def test_add_batch(self, a, b, expected):
        """演示参数化测试"""
        assert add(a, b) == expected
  1. 核心配置文件 pytest.ini
    这是 Pytest 的"指挥部"。在项目根目录创建该文件,可以固化运行参数:

Ini, TOML

pytest

命令行参数:显示简报、生成报告、失败重跑2次、并行运行

addopts = -vs --html=./reports/report.html --reruns 2 -n auto

测试搜索路径

testpaths = ./tests

模块搜索规则

python_files = test_*.py

类搜索规则

python_classes = Test*

方法搜索规则

python_functions = test_*

四、 架构初探:工业级目录设计

为了让框架具备可维护性,我们必须强制执行模块化:

common/:存放封装好的"工具",如数据库连接器、日志处理器。

conftest.py:重中之重。它是 Pytest 的全局配置文件,用于存放通用的 Fixture(如:登录 Token 的获取、浏览器驱动的启动)。

pytest.ini:全局运行配置,定义搜索规则。

五、 避坑指南:初学者的"配置陷阱"

命名潜规则:文件必须以 test_ 开头,否则 Pytest 运行时会直接忽略它。

根目录迷踪:在运行测试时,建议始终在项目根目录执行 pytest 命令,这能避免模块导入失败(ImportError)的玄学问题。

编码问题:在 pytest.ini 中如果写了中文注释,在 Windows 下可能会导致运行崩溃。对策:确保文件保存为 ANSI 或去掉中文。

🚀 选型之争:Pytest vs Unittest

在 Python 生态中,unittest 是标准库,但为什么工业界几乎全员投奔 pytest?

语法简洁:只需 assert 表达式,不再需要记 self.assertEqual()。

强大的 Fixture 机制:这是 Pytest 的灵魂。它可以实现精细的测试前置(Setup)和后置(Teardown)管理,且支持作用域(Session/Module/Class/Function)共享。

插件生态:拥有超过 800 个开源插件,从分布式运行(xdist)到报告生成(allure),应有尽有。

六、 环境搭建:专业选手的"第一步"

不要直接在全局环境 pip install。专业测试框架必须保证环境可移植性。

  1. 创建虚拟环境

python -m venv venv

source venv/bin/activate # Linux/Mac

venv\Scripts\activate # Windows

  1. 核心包安装

pip install pytest pytest-xdist pytest-ordering pytest-rerunfailures

七、 框架雏形:目录结构设计

一套好的框架,从文件夹分类就能看出专业度:

Plaintext

MyTestFramework/

├── common/ # 通用封装(数据库、日志、配置读取)

├── config/ # 配置文件(环境地址、数据库账号)

├── data/ # 测试数据(yaml/excel)

├── page_objects/ # UI 页面对象

├── tests/ # 测试用例脚本

├── reports/ # 测试报告输出

├── conftest.py # Pytest 全局配置(Fixture 核心)

└── pytest.ini # Pytest 运行参数配置

八、 避坑指南:初学者的"配置陷阱"

命名规范:文件必须以 test_*.py 或 *test.py 命名,类名以 Test 开头,方法名以 test 开头。否则 Pytest 会找不到你的用例。

conftest.py 别乱放:它是插件式的配置,同级及下级目录有效。不要试图在里面写业务逻辑,它只放初始化和清理。

相关推荐
AI效率工坊3 小时前
【Python实战】自动化生成PPT演示文稿:python-pptx+AI内容生成+图表嵌入
人工智能·python·自动化
好大哥呀3 小时前
单元测试自动化的流程
运维·单元测试·自动化
HP-Patience3 小时前
【爬虫脚本自动化录制】playwright codegen使用教程
运维·爬虫·自动化
wzl202612133 小时前
企微工具对比:第三方SCRM与自动化工作流集成
运维·自动化·企业微信
小雨青年3 小时前
GitHub CLI 与脚本自动化
运维·自动化·github
landuochong2003 小时前
AutoDev —— 一套真正能自动化开发的基础设施
架构·自动化·skill·claudecode
weitingfu4 小时前
Excel VBA 入门到精通(十):实战项目——自动化报表系统开发
ai·信息可视化·自动化·excel·vba·office·报表系统
m0_6948455719 小时前
CRUD (Nestjsx)部署教程:自动生成RESTful接口
服务器·人工智能·后端·开源·自动化·restful
QQ6765800819 小时前
基于深度学习YOLO的苹果采摘点图像识别 苹果枝条分割识别 苹果分割检测 苹果茎叶分割识别 果园自动化采摘设备目标识别算法第10386期
深度学习·yolo·自动化·苹果采摘点图像·苹果枝条分割·苹果茎叶分割·果园自动化采摘设备