使用Cypress进行API测试时GET请求遭遇406错误的解决求助
解决Cypress cy.request()调用API返回406 Not Acceptable的问题
确认API支持的Accept类型
406错误核心是服务器没法返回你指定的Accept格式。先查API文档,或者用curl/postman测试,看看服务器实际支持哪些Accept值——比如有些API要求用application/vnd.api+json,或者允许通配符*/*。可以先把Accept设为*/*试试,排查是不是格式不匹配导致的问题。检查请求头的细节
有些服务器对请求头的拼写、大小写敏感,务必确保Authorization和Accept的写法完全正确。注意Bearer后面必须加空格,token里不能有多余的空格或换行符。补充Cypress默认缺失的请求头
浏览器发送请求时通常会带User-Agent这类默认头,但cy.request()可能没有。尝试添加这类头信息:cy.request({ method: 'GET', url: 'https://your-api.com/endpoint', headers: { 'Authorization': `Bearer ${token}`, 'Accept': 'application/json', 'User-Agent': 'Cypress/13.0.0' // 替换成你使用的Cypress版本 } })临时关闭状态码校验(用于排查)
如果想先看服务器返回的具体错误信息,可以在cy.request里加上failOnStatusCode: false,这样即使返回406,也能拿到响应内容:cy.request({ method: 'GET', url: 'https://your-api.com/endpoint', headers: { 'Authorization': `Bearer ${token}`, 'Accept': 'application/json' }, failOnStatusCode: false }).then((response) => { console.log(response.body); // 打印服务器返回的错误提示,定位问题 expect(response.status).to.eq(200); });验证token的有效性
别默认token一定没问题,先在postman里用同一个token调用API,确认token没过期、权限足够,或者是否需要搭配其他请求头(比如部分API还要求X-API-Key)。
内容的提问来源于stack exchange,提问作者Mohamed Khlifi
相关产品推荐
相关产品推荐

