接口测试与UI测试应互补协同:通过统一数据管理、前置接口校验、共用业务动作封装及分级执行报告,构建高效稳定的自动化体系。

接口测试和UI测试不是非此即彼的选择,而是互补的两层验证。真正稳定的自动化体系,是让接口测试快速覆盖核心逻辑,再用UI测试守住用户真实操作路径——两者通过统一的数据管理、用例组织和执行调度协同工作。
用同一套测试数据驱动接口与UI测试
避免接口测试用一套JSON,UI测试又手动填一遍表单。推荐在conftest.py或独立data/模块中定义结构化测试数据:
- 用Pydantic模型声明请求体、预期响应、页面输入字段三者映射关系
- 例如登录场景:同一组{"username": "test01", "password": "123456"}既用于调用/api/v1/login,也传给Selenium的用户名/密码输入框
- 数据变更时只需改一处,接口和UI用例自动同步生效
接口前置校验 + UI流程断言 = 更快定位问题
不要等UI跑完才发现登录失败。在UI操作前,先用Requests调用登录接口并断言token返回成功;UI步骤只聚焦“带有效token能否打开个人中心页”:
- UI测试函数开头插入assert api_login(username, password).status_code == 200
- 后续UI操作失败时,可立刻区分是接口层异常(如鉴权服务挂了),还是前端渲染/交互bug
- 这种组合让失败日志自带上下文,省去一半排查时间
共用Page Object与API Client,降低维护成本
Page Object不只封装元素定位,API Client也不只发请求。把业务动作抽象成一致接口:
立即学习“Python免费学习笔记(深入)”;
- 定义UserActions类,含login()方法:内部先调API获取token,再根据参数决定走UI登录还是直接注入token
- UI测试调用UserActions.login(method="ui"),接口测试调用UserActions.login(method="api")
- 新增一个“忘记密码”流程?只需在UserActions里加一个reset_password(),两边测试都能复用
统一执行入口 + 分级报告,看清哪层出了问题
用pytest的--tb=short + 自定义hook生成双维度报告:
- 运行pytest tests/ --level=smoke时,自动执行高优先级接口用例+关键路径UI用例
- Allure报告中用@feature("API Auth")和@feature("UI Dashboard")打标签,失败用例自动归类到对应模块
- CI流水线里,接口测试失败直接阻断,UI测试失败则标记为“需人工确认”,不卡住发布










