第一篇:基座选型 —— 为什么 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 别乱放:它是插件式的配置,同级及下级目录有效。不要试图在里面写业务逻辑,它只放初始化和清理。

相关推荐
BJHHZX19917 小时前
北京华恒智信为制造行业破解自动化伪升级难题,落地人机协作三阶段减编增效方案
自动化·绩效考核·人力资源管理·人机协作·员工激励
程序员吕洞宾10 小时前
开源多维表格SmartTable V1.6:自动化工作流,把重复操作交给系统即可
开源·自动化·github·多维表格·飞书多维表
2301_7803039010 小时前
网络安全、自动化运维、ERP、CRM、MES
运维·web安全·网络安全·自动化·安全威胁分析
csg110710 小时前
电路板抗干扰:电容、电感和弧线布线的应用
单片机·嵌入式硬件·物联网·自动化
环境栈笔记12 小时前
多账号浏览器选型检查清单:Profile、权限、Session 和任务日志怎么评估
前端·人工智能·后端·自动化
jieyucx12 小时前
Shell实战:无限循环监控Nginx服务,异常自动重启+双份日志留存
linux·运维·nginx·自动化·shell
workflower13 小时前
室内外配送机器人-应用路径
人工智能·机器学习·设计模式·矩阵·自动化
Black蜡笔小新14 小时前
自动化AI算法训练服务器DLTM零代码私有化赋能智慧农业用AI智能视觉守护万亩良田
人工智能·算法·自动化
初雪云14 小时前
iOS 上架入门:证书、描述文件、IPA 上传到底是什么关系?
android·ios·自动化·产品经理·iphone
AC赳赳老秦17 小时前
传感器数据自动汇总:OpenClaw 采集多类传感器数据、清洗入库、生成趋势分析
java·人工智能·python·自动化·github·php·openclaw