接口自动化测试
理解接口自动化的框架设计思路
能用 requests+pytest 实现接口自动化
掌握断言、数据驱动、依赖处理的实现
核心讲解
(1)为什么做接口自动化回归测试效率高,版本迭代快速验证
可持续集成,接入 CI/CD 流程
7×24 小时执行,无人值守
覆盖量大,人力无法比拟的执行量
用例层:pytest 测试用例,业务场景
公共层:封装请求、断言、工具方法
数据层:测试数据、配置文件
报告层:测试报告、日志、结果通知
封装公共请求:统一处理请求头、日志、异常
断言封装:统一断言方法,规范结果校验
数据驱动:测试数据和代码分离,用 Excel/YAML/JSON 存数据
接口依赖:提取上游响应字段,传给下游接口
配置分离:环境地址、账号等配置放配置文件
手工测试跑通所有接口
封装公共请求类
编写单接口测试用例
实现场景化用例
集成测试报告
持续迭代维护
代码示例
# 公共请求封装
import requests
import pytest
class RequestUtil:
def __init__(self):
self.session = requests.Session()
self.base_url = "https://api.demo.com"
def send_request(self, method, path, **kwargs):
url = self.base_url + path
resp = self.session.request(method, url, timeout=10, **kwargs)
return resp
# 测试用例
class TestLogin:
def setup_class(self):
self.req = RequestUtil()
def test_login_success(self):
"""登录成功用例"""
data = {"username": "admin", "password": "123456"}
resp = self.req.send_request("POST", "/login", json=data)
# 断言
assert resp.status_code == 200
result = resp.json()
assert result["code"] == 0
assert result["data"]["token"] != ""
return result["data"]["token"]
def test_login_wrong_pwd(self):
"""密码错误用例"""
data = {"username": "admin", "password": "wrong"}
resp = self.req.send_request("POST", "/login", json=data)
assert resp.status_code == 200
result = resp.json()
assert result["code"] == 1001
assert "密码错误" in result["msg"]
# 场景化测试:登录后查询信息
class TestUserScene:
def setup_class(self):
self.req = RequestUtil()
# 先登录获取token
data = {"username": "admin", "password": "123456"}
resp = self.req.send_request("POST", "/login", json=data)
self.token = resp.json()["data"]["token"]
def test_get_info(self):
headers = {"Authorization": f"Bearer {self.token}"}
resp = self.req.send_request("GET", "/user/info", headers=headers)
assert resp.status_code == 200
assert resp.json()["code"] == 0
assert resp.json()["data"]["username"] == "admin"
if __name__ == "__main__":
pytest.main(["-v", "-s", "--html=api_report.html"])
常见误区
脚本没有断言:没有断言的自动化等于没测,必须校验结果
数据全硬编码:地址、账号、参数全写死,换环境就要改代码
接口依赖处理混乱:到处复制 token,要用类变量或固件统一管理
不做异常用例自动化:只自动化正常场景,异常场景才是自动化的价值
脚本维护不及时:接口变了脚本没更新,导致大量失败
课后练习
基于 requests+pytest,实现一个登录接口的自动化测试
实现登录 + 查询用户信息的场景化用例
思考:接口自动化的维护成本高在哪里?怎么降低?
