Cypress使用cy.request如何从响应体提取PHP错误码与错误信息
解决方案
核心原因是你当前拿到的resp.body是PHP渲染的HTML错误页面,错误信息嵌在HTML标签/文本中,直接通过正则匹配固定特征即可提取目标字段。
实现代码示例
cy.request({ url: "待测试URL", failOnStatusCode: false }).then((resp) => { const rawContent = resp.body // 适配中英文冒号、前后空格、大小写的匹配规则 const codeReg = /Code\s*[::]\s*(\d+)/i const messageReg = /Message\s*[::]\s*([^\n\r<]+)/i const codeResult = rawContent.match(codeReg) const messageResult = rawContent.match(messageReg) // 组装结果 const testResult = { url: resp.url, httpStatusCode: resp.status, businessErrorCode: codeResult ? codeResult[1] : "无匹配业务错误码", businessErrorMsg: messageResult ? messageResult[1].trim() : "无匹配业务错误信息" } // 原有写入文件逻辑 cy.writeFile("test-result.json", testResult, { flag: "a+" }) })
规则适配调整
如果实际返回的错误内容结构和默认规则不匹配,可以按以下方式调整:
- 如果错误字段放在指定HTML标签中,比如
<span class="err-code">500</span>,修改正则为/<span class="err-code">(\d+)<\/span>/i即可 - 如果异常时PHP返回JSON格式响应,先判断响应头
content-type为application/json后,直接取resp.body.Code和resp.body.Message即可 - 如果返回内容包含HTML实体编码,先调用
Cypress._.unescape(rawContent)解码后再做匹配
排查技巧
如果出现匹配不到的情况,先将完整的resp.body写入本地txt文件,查看实际返回的文本结构,针对性调整正则规则即可。
内容的提问来源于stack exchange,提问作者cypher_null
相关产品推荐
相关产品推荐

