7. Pytest 基础用法怎么讲
Pytest 是 Python 自动化测试中非常常用的测试框架。相比直接写普通脚本,Pytest 可以帮助我们组织用例、执行用例、生成结果、参数化数据、管理前后置、集成报告。测试工程师准备 Pytest 面试,不要只说“Pytest 是测试框架”,而要讲清楚它在接口自动化项目中怎么用。
面试中常问 Pytest 的用例命名规则、断言、执行方式、参数化、fixture、跳过用例、失败重跑、报告集成等。基础回答要围绕“如何组织和运行自动化用例”。
一、Pytest 解决什么问题
普通 Python 脚本也能调接口和断言,但缺少测试框架能力。Pytest 提供:
- 自动发现测试用例;
- 执行用例并统计结果;
- 支持 assert 断言;
- 支持参数化;
- 支持 fixture 前后置;
- 支持插件扩展;
- 可集成 Allure 报告;
- 支持失败重跑、并发执行等。
所以 Pytest 是自动化框架的核心执行层。
二、用例命名规则
Pytest 默认识别:
- 文件名:
test_*.py或*_test.py; - 函数名:
test_开头; - 类名:
Test开头; - 类中的方法:
test_开头。
例如:
def test_login_success():
assert 1 == 1
如果命名不符合规则,Pytest 可能不会执行。
三、断言怎么写
Pytest 直接使用 Python 的 assert。
def test_status_code():
status_code = 200
assert status_code == 200
接口自动化中常见断言:
assert response.status_code == 200
assert result["code"] == 0
assert result["data"] is not None
断言要覆盖 HTTP 状态码、业务 code、关键字段和数据库结果。
四、执行方式
命令行执行:
pytest
执行指定文件:
pytest test_login.py
执行指定用例:
pytest test_login.py::test_login_success
显示详细信息:
pytest -v
输出打印:
pytest -s
五、参数化怎么用
参数化适合一套逻辑跑多组数据。
import pytest
@pytest.mark.parametrize("username,password,expected", [
("tester", "123456", 0),
("tester", "wrong", 1001),
])
def test_login(username, password, expected):
assert isinstance(username, str)
assert expected in [0, 1001]
接口自动化中,参数化可以结合 JSON、YAML、Excel 测试数据。
六、fixture 基础作用
fixture 用于前置和后置。
比如登录获取 Token、准备测试数据、清理测试数据。
import pytest
@pytest.fixture
def token():
return "mock_token"
def test_order(token):
assert token != ""
更复杂的 fixture 会在下一篇详细讲。
七、用例跳过和标记
跳过用例:
import pytest
@pytest.mark.skip(reason="暂不执行")
def test_demo():
assert True
条件跳过:
@pytest.mark.skipif(True, reason="条件满足时跳过")
def test_skip_if():
assert True
标记用例:
@pytest.mark.smoke
def test_login():
assert True
可以按标记执行冒烟用例。
八、Pytest 在接口自动化中的结构
常见结构:
testcases/
test_login.py
test_order.py
common/
request_util.py
assert_util.py
data/
login_cases.json
conftest.py
pytest.ini
Pytest 负责编排执行,用例中调用封装好的请求方法和断言方法。
九、常见插件
常见插件包括:
- pytest-html:生成 HTML 报告;
- allure-pytest:生成 Allure 报告;
- pytest-rerunfailures:失败重跑;
- pytest-xdist:并发执行;
- pytest-ordering:控制执行顺序。
面试中不用每个都精通,但要知道常用插件能解决什么问题。
十、常见错误
1. 用例命名不规范
导致 Pytest 找不到用例。
2. 断言太少
只断言状态码 200,不断言业务结果。
3. 用例互相依赖
一个用例失败导致后面全失败,稳定性差。
4. fixture 滥用
所有逻辑都塞到 fixture,导致用例不清晰。
5. 不区分环境数据
测试环境、预发环境配置混乱,执行结果不稳定。
十一、面试回答模板
如果面试官问“Pytest 基础用法怎么讲”,可以这样回答:
Pytest 是 Python 自动化测试常用框架,主要用于组织、发现和执行测试用例。它默认识别
test_开头的文件和函数,用 Python 原生 assert 做断言,支持命令行执行、参数化、fixture 前后置、用例标记和插件扩展。在接口自动化中,我会用 Pytest 管理测试用例,用参数化驱动多组测试数据,用 fixture 处理登录 Token、测试数据准备和清理,再结合 Allure 或 HTML 报告输出结果。断言不只看 HTTP 状态码,还会校验业务 code、关键字段和必要的数据库结果。
十二、练习清单
- 安装 pytest;
- 写一个 test_ 开头用例;
- 使用 assert;
- 用 pytest -v 执行;
- 执行指定文件;
- 使用参数化;
- 写一个 fixture;
- 标记 smoke 用例;
- 生成测试报告;
- 准备 Pytest 面试回答。
Pytest 的核心价值是让自动化用例可组织、可执行、可扩展。基础用法必须和接口自动化项目结构结合起来理解。
配套刷题:

