Cypress自动化测试失效但手动测试正常,求排查方案
问题概述
手动操作(包括在Cypress UI内手动操作)可正常保存并展示目标数据,但执行Cypress测试脚本时,触发的POST请求返回500 Internal Server Error,控制台抛出AxiosError(ERR_BAD_RESPONSE)。已尝试设置chromeWebSecurity=false、调用cy.saveLocalStorage()/cy.restoreLocalStorage(),问题未解决。环境:Chrome浏览器、Windows系统、VSCode、Bash终端。
排查思路
优先查看服务器端错误日志
500是服务器内部错误,后端服务的日志会包含具体报错原因(如参数校验失败、数据库操作异常、Google Maps API调用出错等),这是定位问题最核心的步骤。对比手动与自动化请求的参数差异
在Cypress的Network面板中导出失败POST请求的请求头、请求体;再手动操作一次,导出相同请求的参数,逐字段对比:- 检查必填参数是否在自动化请求中缺失或格式不符
- 核对请求头差异(如
Content-Type、Authorization、Cookie等) - 确认Google Maps计算生成的数据(如坐标、地址解析结果)在两种场景下是否一致
校验测试环境的前置状态
手动操作时的页面初始状态(如用户登录态、前置数据填充情况)可能与自动化测试不一致:- 确保测试脚本已正确完成登录、初始化必要页面状态
- 检查是否有依赖的异步数据未等待加载完成就执行保存操作
直接模拟请求调试
用Postman或curl复制Cypress中失败的请求参数,直接调用后端接口:- 若复现500错误,说明问题出在接口本身或参数,与Cypress无关
- 若无法复现,排查Cypress是否存在请求拦截、数据篡改的逻辑
检查Cypress的请求拦截与全局钩子
确认测试代码中是否有cy.intercept()修改了POST请求的参数、头信息,或beforeEach/afterEach等全局钩子中存在影响请求的逻辑。验证时间/时区一致性
部分服务器会校验请求中的时间戳,若Cypress运行时的系统时间、时区与手动操作时不一致,可能导致参数校验失败,可检查请求中是否包含时间相关字段。
内容的提问来源于stack exchange,提问作者Carlos E

