You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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目录维护:

  1. 在cypress/fixtures下创建soap-request.xml,粘贴你的XML内容。
  2. 测试代码中读取并发送:
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ş

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 01:45:33