接口自动化新手避坑指南:用Pytest+Requests写第一个测试脚本时,这5个错误千万别犯
接口自动化新手避坑指南:用Pytest+Requests写第一个测试脚本时,这5个错误千万别犯
第一次用Python做接口自动化测试的新手,往往会在Pytest和Requests的组合使用上踩坑。本文将从实际项目经验出发,梳理五个最常见的"坑点",帮你快速上手。
1. 测试文件命名与结构:Pytest的默认规则
很多新手写完测试脚本后,发现Pytest根本找不到测试用例。这通常是因为没有遵守Pytest的默认发现规则:
- 文件命名:测试文件必须以
test_开头或_test.py结尾 - 类命名:测试类必须以
Test开头,且不能包含__init__方法 - 方法命名:测试方法必须以
test开头
# 正确示例 # 文件名:test_user_api.py class TestUserAPI: def test_login(self): pass def test_create_user(self): pass提示:如果必须使用不同的命名规范,可以在
pytest.ini中修改默认规则,但这会增加配置复杂度,建议新手先遵循默认规则。
2. Fixture与setup/teardown的混淆使用
Pytest提供了两种处理测试前后置逻辑的方式,新手容易混淆:
| 特性 | setup/teardown | fixture |
|---|---|---|
| 作用范围 | 方法/类级别 | 任意级别(方法/类/模块/会话) |
| 复用性 | 低 | 高(可跨文件共享) |
| 灵活性 | 固定名称 | 可自定义名称和作用域 |
| 依赖注入 | 不支持 | 支持 |
推荐新手优先学习fixture,它更符合现代测试框架的设计理念:
import pytest import requests @pytest.fixture(scope="module") def api_client(): # 模块级fixture,所有测试方法共享同一个client实例 client = requests.Session() yield client client.close() # 测试结束后清理 class TestUserAPI: def test_login(self, api_client): response = api_client.post("/login", json={"username": "test", "password": "123"}) assert response.status_code == 2003. 忽略pytest.ini的配置价值
很多新手直接在命令行输入一长串参数,比如:
pytest -vs --html=report.html --reruns=2 ./tests这既不便于团队共享,也容易出错。更专业的做法是使用pytest.ini:
[pytest] addopts = -vs --html=reports/report.html --reruns=2 testpaths = tests python_files = test_*.py python_classes = Test* python_functions = test_*配置文件的优势:
- 参数集中管理,团队统一
- 避免每次输入冗长命令
- 可以覆盖默认的测试发现规则
- 支持版本控制共享
4. 命令行参数使用不当
Pytest提供了丰富的命令行参数,但新手常误解几个关键参数:
-v:显示详细输出(每个测试用例的名称和状态)-s:允许print输出(默认会捕获所有标准输出)-k:按名称过滤测试用例-m:按标记(mark)过滤测试用例
典型误用场景:
# 错误:想查看调试信息但忘了加-s pytest -v test_debug.py # 正确:组合使用-vs pytest -vs test_debug.py # 高级过滤示例 pytest -vs -k "login and not admin" # 只运行名称包含login但不包含admin的测试 pytest -vs -m "smoke" # 只运行标记为smoke的测试5. 插件依赖管理混乱
新手常犯的插件相关错误:
手动逐个安装插件:
pip install pytest-html pip install pytest-xdist pip install allure-pytest # ...容易遗漏或版本冲突不锁定版本导致环境不一致
推荐做法:使用requirements.txt统一管理
# requirements.txt pytest==7.4.0 requests==2.31.0 pytest-html==4.1.1 pytest-xdist==3.3.1 allure-pytest==2.13.2 pytest-rerunfailures==11.1.2安装命令:
pip install -r requirements.txt6. 测试报告生成进阶技巧
除了基础的HTML报告,建议新手了解Allure报告的使用:
- 安装Allure命令行工具
- 运行测试并生成Allure数据
pytest --alluredir=./allure-results - 生成可视化报告
allure serve ./allure-results
Allure报告的优势:
- 更美观的界面
- 支持测试步骤展示
- 丰富的图表统计
- 历史趋势分析
7. 真实项目中的最佳实践
在实际项目中,建议采用这样的目录结构:
project/ ├── conftest.py # 全局fixture ├── pytest.ini # 配置文件 ├── requirements.txt # 依赖文件 ├── src/ # 源代码 └── tests/ ├── __init__.py ├── test_api/ │ ├── test_user.py │ └── test_product.py └── test_ui/关键技巧:
- 使用
conftest.py共享fixture - 合理组织测试套件
- 为不同环境配置不同的pytest.ini
- 在CI/CD流水线中集成测试执行
刚开始可能会觉得Pytest的规则和特性很多,但一旦掌握了这些核心概念,你会发现它比unittest更灵活强大。我在实际项目中最大的体会是:先遵循约定优于配置的原则,等熟悉后再逐步定制化。
