用 pytest.mark.parametrize 把请求路径和预期状态码放在同一张表里。每组参数都会单独执行,适合同时覆盖接口成功和资源不存在的情况。

用本地服务固定测试响应
将以下内容保存为 test_status.py。fixture 在随机本地端口启动服务,退出时关闭。
from http.server import BaseHTTPRequestHandler, HTTPServer
from threading import Thread
import pytest
import requests
class Handler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200 if self.path == "/health" else 404)
self.end_headers()
@pytest.fixture
def base_url():
server = HTTPServer(("127.0.0.1", 0), Handler)
worker = Thread(target=server.serve_forever)
worker.start()
try:
yield f"http://127.0.0.1:{server.server_port}"
finally:
server.shutdown()
worker.join()
server.server_close()测试只访问本机。真实接口可用测试环境的地址替换 fixture。
把成功和失败的预期写入参数表
把用例追加到同一文件。每个测试使用超时限制等待。
立即学习“Python免费学习笔记(深入)”;
@pytest.mark.parametrize(
"path, expected",
[("/health", 200), ("/missing", 404)],
ids=["health-ok", "missing-not-found"],
)
def test_status(base_url, path, expected):
response = requests.get(base_url + path, timeout=2)
assert response.status_code == expected
404 是测试所期待的响应,因此直接断言状态码。
运行并查看失败用例的名字
在已有虚拟环境中安装依赖并执行。
python -m pip install pytest requests python -m pytest -v test_status.py
预期看到两个用例通过。将某条预期状态码改错,再跑一次可看到具体失败的参数组合。


















