我的测试学习站TEST LEARNING HUB
开始学习
首页/精华文章/7. Pytest 基础用法怎么讲

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、关键字段和必要的数据库结果。

十二、练习清单

  1. 安装 pytest;
  2. 写一个 test_ 开头用例;
  3. 使用 assert;
  4. 用 pytest -v 执行;
  5. 执行指定文件;
  6. 使用参数化;
  7. 写一个 fixture;
  8. 标记 smoke 用例;
  9. 生成测试报告;
  10. 准备 Pytest 面试回答。

Pytest 的核心价值是让自动化用例可组织、可执行、可扩展。基础用法必须和接口自动化项目结构结合起来理解。

配套刷题: