当前位置: 首页 > 知识库问答 >
问题:

空手道-[#文档:空]在输出中

翟棋
2023-03-14

我使用正则表达式删除了XML中一些不需要的项。现在,我需要打印所有包含多个子元素的包含服务节点。

这是我使用的代码;

* string test = read('classpath:PP1/data/Test.xml')
* string test= test.replaceAll("xsi:nil[^/]*", "")
* def Complete_XML = test
* def included = $Complete_XML/Envelope/Body/getPricePlanResponse/pricePlanSummary/includedService
* print included

如果我运行这个,我会得到下面的响应。

20:19:54.169 [ForkJoinPool-1-worker-1] INFO  com.intuit.karate - [print] [
  [#document: null],
  [#document: null]
]

但是,我可以将选定的元素打印到包括服务节点之外。请帮帮忙!

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Header/>
  <S:Body>
    <ns10:getPricePlanResponse>
      <ns10:pricePlanSummary>
        <ns5:descriptionFrench>Forfait Montre Affaires</ns5:descriptionFrench>
        <ns4:category/>
        <ns4:effectiveDate>2009-11-05</ns4:effectiveDate>
        <ns4:serviceDataSharingGroupList>
          <ns4:dataSharingGroupCode>CAD_DATA</ns4:dataSharingGroupCode>
          <ns4:contributingInd>true</ns4:contributingInd>
        </ns4:serviceDataSharingGroupList>
        <ns4:feature>
          <ns5:descriptionFrench>Service</ns5:descriptionFrench>
          <ns4:poolGroupId/>
        </ns4:feature>
        <ns4:recurringCharge>10.0</ns4:recurringCharge>
        <ns4:ppsStorageSize>0</ns4:ppsStorageSize>
        <ns4:includedService>
          <ns4:term>0</ns4:term>
          <ns4:brandId>1</ns4:brandId>
          <ns4:feature>
            <ns5:code>MBAPN</ns5:code>
            <ns4:type/>
            <ns4:additionalNumberRequiredInd>false</ns4:additionalNumberRequiredInd>
          </ns4:feature>
          <ns4:recurringCharge>0.0</ns4:recurringCharge>
          <ns4:callingCircleFeaturesInd>false</ns4:callingCircleFeaturesInd>
        </ns4:includedService>
        <ns4:includedService>
          <ns4:term>0</ns4:term>
          <ns4:brandId>1</ns4:brandId>
          <ns4:feature>
            <ns5:code>MBAPN</ns5:code>
            <ns4:type/>
            <ns4:additionalNumberRequiredInd>false</ns4:additionalNumberRequiredInd>
          </ns4:feature>
          <ns4:recurringCharge>0.0</ns4:recurringCharge>
          <ns4:callingCircleFeaturesInd>false</ns4:callingCircleFeaturesInd>
        </ns4:includedService>
        <ns4:availableTermInMonths>0</ns4:availableTermInMonths>
      </ns10:pricePlanSummary>
    </ns10:getPricePlanResponse>
  </S:Body>
</S:Envelope>

共有1个答案

公孙新觉
2023-03-14

请记住,XML必须始终包装在某个元素中。试试这个:

* def included = $xml/Envelope/Body/getPricePlanResponse/pricePlanSummary//includedService
* def root = <root></root>
* def fun = function(x, i){ karate.set('root', '/includedService[' + (i + 1) + ']', x) }
* eval karate.forEach(included, fun)
* print root

你应该得到:

<root>
  <ns4:includedService>
    <ns4:term>0</ns4:term>
    <ns4:brandId>1</ns4:brandId>
    <ns4:feature>
      <ns5:code>MBAPN</ns5:code>
      <ns4:type/>
      <ns4:additionalNumberRequiredInd>false</ns4:additionalNumberRequiredInd>
    </ns4:feature>
    <ns4:recurringCharge>0.0</ns4:recurringCharge>
    <ns4:callingCircleFeaturesInd>false</ns4:callingCircleFeaturesInd>
  </ns4:includedService>
  <ns4:includedService>
    <ns4:term>0</ns4:term>
    <ns4:brandId>1</ns4:brandId>
    <ns4:feature>
      <ns5:code>MBAPN</ns5:code>
      <ns4:type/>
      <ns4:additionalNumberRequiredInd>false</ns4:additionalNumberRequiredInd>
    </ns4:feature>
    <ns4:recurringCharge>0.0</ns4:recurringCharge>
    <ns4:callingCircleFeaturesInd>false</ns4:callingCircleFeaturesInd>
  </ns4:includedService>
</root>

关于其他想法,请参考这个答案:https://stackoverflow.com/a/53553979/143475

 类似资料:
  • 我使用空手道进行自动化测试,并利用Gitlab CI/CD管道在不同的管道中运行。是否可以在gitlab控制台中编辑输出? 现在,当空手道测试在管道中运行时,输出是典型的maven下载依赖项。 我希望输出显示空手道测试场景,并显示通过/失败测试的绿色/红色。

  • 我跟随空手道文档并将Junit HTML报告复制粘贴到浏览器中。然而,输出是纯文本的,看起来与视频中描述的完全不一样。我尝试了两个不同的浏览器,Firefox57.0.2和Chrome62.0,都给出了相同的输出。输出附于此。 注意:我按照文档中的说明使用@RunWith(karate.class)将.feature文件作为Junit测试运行。下面是Runner类的示例代码。 导入org.juni

  • 我95%的自动化框架是在空手道,工作得很好。我们需要检查应用程序日志中显示的中间结果的功能很少(不在Json响应中)。我写了一个外壳脚本,它在从邮递员手动发送请求后验证Linux机器上的应用程序日志。我使用eclipse的JSCH库调用这个脚本。 有没有什么方法可以让我从空手道发送请求,然后调用我的JSCH类进行验证,这样就可以避免手动发送请求的步骤? 谢谢,阿比

  • 我正在尝试使用空手道进行e2e测试,并已从最低设置开始。我想在用于测试,但karate报告该文件不是js函数,因此测试无法获取配置: 这是我的: 这是我的测试: 这是测试运行程序:

  • 我正在使用空手道v0.9.6,这是一个很棒的工具。我有一个 我空手道配置的一部分。js: 我正在使用。sh文件如下: 而且,它在v.0.9.6上长时间运行良好。但是,当我尝试升级到v 1.0或1.0.1时,a给出了一个错误: 我发现这个问题:https://github.com/intuit/karate/issues/1515 但这些例子并不适合我。我试着用“文件:”和空手道。属性['karat

  • 目标: 我们希望少数API调用应该转到mock-server(),而其他API调用应该转到实际的下游应用服务器。 设置: 在本地,模拟服务器在端口8001上有独立的jar。例如 在应用程序配置文件下游系统(需要模拟)定义mockserver IP i. e 测试场景和问题: 1. 现在,当我们通过邮递员或功能文件点击API请求时,它就会执行空手道。正确进入而不是但是,在此请求中,主机指的是而不是这