Cypress API测试:如何复用Mock的AUTH Token到后续请求
解决Cypress Mock Token接口并用于后续API请求的方案
问题分析
你原代码的核心问题包括:
- Mock拦截的
response未指定具体返回值,Cypress无法识别要返回的模拟数据 - 拦截的URL和实际请求的URL不一致(存在空格差异)
- 未从Mock响应中提取Token,也未将Token传递给第二个接口的请求头
可行实现代码
// 1. Mock第一个获取Token的接口,返回预设的Token数据 cy.intercept('GET', '/firstendpoint', { statusCode: 200, body: { authToken: 'mock-valid-token-12345' // 替换成你需要的Mock Token值 } }).as('mockToken'); // 2. 请求Mock后的第一个接口,提取Token cy.request('GET', '/firstendpoint').then((tokenResponse) => { const authToken = tokenResponse.body.authToken; // 3. 使用提取的Token请求第二个接口,添加认证头 cy.request({ method: 'GET', url: '/secondendpoint', headers: { 'Authorization': `Bearer ${authToken}` // 根据实际接口的认证格式调整,比如部分接口用"Token xxx" } }).then((secondResponse) => { // 执行你的断言逻辑 expect(secondResponse.status).to.eq(200); expect(secondResponse.body).to.have.property('result'); // 示例断言,按需修改 }); });
关键说明
- Mock响应配置:
cy.intercept的第三个参数直接定义返回的状态码和响应体,确保能拿到预期的Token结构 - URL一致性:拦截的URL和
cy.request的URL必须完全匹配,注意空格、大小写、路径参数等细节 - 认证头传递:多数API会用
Authorization头携带Token,格式需和目标接口要求一致 - 确保Mock生效:如果需要保证拦截规则注册完成后再发起请求,可添加
cy.wait('@mockToken'):cy.intercept(...).as('mockToken'); cy.wait('@mockToken'); // 等待Mock规则生效 cy.request(...);
内容的提问来源于stack exchange,提问作者abhay singh
相关产品推荐
相关产品推荐

