如何在Cypress中发送XML API请求(SOAP API)
在Cypress中发送XML(SOAP)请求的实现方法
Cypress完全支持发送XML请求,用你熟悉的cy.request就能搞定,不需要额外安装插件——核心是配置正确的请求头和XML格式的请求体。下面结合你提供的SOAP请求示例,一步步实现自动化测试:
实现步骤
- 准备XML请求体:可以直接将XML内容写成JavaScript模板字符串(保留格式),也可以把XML文件放在
cypress/fixtures目录下(更易维护)。 - 配置请求头:必须设置
Content-Type为text/xml或application/soap+xml(SOAP接口通常用后者),如果接口需要认证,也要在headers里添加对应信息。 - 发送并验证请求:通过
cy.request配置请求参数,后续可对响应状态、内容做断言。
示例1:直接嵌入XML的测试代码
cy.request({ method: 'POST', url: '你的SOAP接口完整地址', headers: { 'Content-Type': 'application/soap+xml; charset=utf-8', // 若需认证,添加对应头信息,比如:Authorization: 'Bearer xxx' }, body: `<?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <MT_ServiceOrderInitiaionandMgmt xmlns:prx="***" xmlns="***"> <VKONTO>***</VKONTO> <NAME>***</NAME> <PORTION>***</PORTION> <AKLASSE/> <DATUM>***</DATUM> <Contact> <RELTYP/> <NAME>***</NAME> <TEL_NUMBER>***</TEL_NUMBER> <PHTYPE>***</PHTYPE> <SMTP_ADDR>***</SMTP_ADDR> </Contact> <LifeSupportIndicator/> <QMNUM>***</QMNUM> <QMART>***</QMART> <MNCOD>***</MNCOD> <QMTXT>***</QMTXT> <NOTST>***</NOTST> <ServiceAddress> <STREET>***</STREET> <CITY1>***</CITY1> <REGIO>***</REGIO> <LOCATION>***</LOCATION> <POST_CODE1>***</POST_CODE1> <HAUS_NUM2/> </ServiceAddress> <ABLEINH>***</ABLEINH> <CO_ASTTX>***</CO_ASTTX> <STRMN/> <STRUR>***</STRUR> <LTRMN/> <LTRUR>***</LTRUR> <ERDAT>***</ERDAT> <MZEIT>***</MZEIT> <ERNAM>***</ERNAM> <AEDAT/> <AEZEIT>***</AEZEIT> <AENAM/> <PPSID>***</PPSID> <ExternalReference> <ID></ID> <SYSNAME>***</SYSNAME> <TYPE>***</TYPE> </ExternalReference> <REFNUM/> <PRIOK/> <LONT_TXT>***</LONT_TXT> <PREMS>***</PREMS> <Meters> <TPLNR>***</TPLNR> <VBSARTTEXT>***</VBSARTTEXT> <TERMSCHL/> <DLNOT>***</DLNOT> <STORT>***</STORT> <KTEXT>***</KTEXT> <EINBDAT>***</EINBDAT> <ISPRIM>***</ISPRIM> <SERNR>***</SERNR> <MET_SERNR></MET_SERNR> <HERST>***</HERST> <TYPBZ/> <PREISKLA>***</PREISKLA> <EQKTX>***</EQKTX> <DSTAT>***</DSTAT> <MEINS>***</MEINS> <STANZVORE>***</STANZVORE> <ISTABLART>***</ISTABLART> <V_ZWSTAND></V_ZWSTAND> <E_ZWSTANDO>***</E_ZWSTANDO> <E_ZWSTANDU>***</E_ZWSTANDU> <E_VERBERW>***</E_VERBERW> <ADAT>***</ADAT> <ATIM>***</ATIM> <MTU_TPLNR/> <MTUSN>***</MTUSN> <MTU_EQKTX/> <MTU_EINBDAT>***11</MTU_EINBDAT> <MTU_SERNR></MTU_SERNR> <PORT>***</PORT> </Meters> </MT_ServiceOrderInitiaionandMgmt> </soap:Body> </soap:Envelope>` }).then((response) => { // 断言响应状态码 expect(response.status).to.eq(200); // 解析XML响应并断言(示例) const parser = new DOMParser(); const xmlDoc = parser.parseFromString(response.body, "text/xml"); const orderNumber = xmlDoc.querySelector('返回节点').textContent; expect(orderNumber).to.not.be.empty; });
示例2:从fixtures读取XML的测试代码
如果XML内容较长,建议放在fixtures目录维护:
- 在
cypress/fixtures下创建soap-request.xml,粘贴你的XML内容。 - 测试代码中读取并发送:
cy.fixture('soap-request.xml').then((xmlBody) => { cy.request({ method: 'POST', url: '你的SOAP接口完整地址', headers: { 'Content-Type': 'application/soap+xml; charset=utf-8', // 其他必要请求头 }, body: xmlBody }).then((response) => { expect(response.status).to.eq(200); // 按需添加其他断言逻辑 }); });
关键注意事项
- 修复XML语法错误:你提供的XML中,
<MTUSN>***</MTUSN>后面多了一个>,需要删除,否则会导致接口解析失败。 - 字符编码一致性:确保请求头的
charset和XML声明的encoding保持一致(均为UTF-8)。 - 响应解析工具:浏览器原生的
DOMParser足够处理XML响应的解析和断言,无需额外依赖。
内容的提问来源于stack exchange,提问作者Barış Can Ateş
相关产品推荐
相关产品推荐

