环境搭建与架构初探
专栏进度: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:自动重跑失败的用例,解决网络波动导致的偶发失败。
二、 环境搭建:专业选手的仪式感
在企业级开发中,严禁在全局环境安装包。我们需要通过虚拟环境实现"项目隔离"。
- 建立虚拟空间
Bash
创建虚拟环境 (建议项目根目录下执行)
python -m venv venv
激活环境
Windows:
venv\Scripts\activate
Mac/Linux:
source venv/bin/activate
- 核心包"三剑客"安装
我们将一次性安装基础依赖:
Bash
pip install pytest pytest-xdist pytest-ordering pytest-rerunfailures pytest-html
三、 实战:第一个 Pytest 脚本与核心配置
- 编写测试脚本 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
- 核心配置文件 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。专业测试框架必须保证环境可移植性。
- 创建虚拟环境
python -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
- 核心包安装
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 别乱放:它是插件式的配置,同级及下级目录有效。不要试图在里面写业务逻辑,它只放初始化和清理。