【问题标题】:How to manipulate xml file's variable in Karate DSL?如何在空手道 DSL 中操作 xml 文件的变量?
【发布时间】:2018-11-22 11:52:52
【问题描述】:

空手道 DSL 的 SOAP 服务示例数量非常有限。

我想要做的是,创建一个 XML 文件,稍后我将使用它作为模板。由于它将成为一个模板,我需要将它的某些部分动态化。 在 .json 文件上很容易做到这一点,但我找不到一个例子来实现 .xml 文件。

下面是我的 .xml 文件:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.bigldap.ttech.com/">
<soapenv:Header/>
<soapenv:Body>
    <ws:createwMsisdn>
        <name></name>
        <password>1</password>
        <appId>1</appId>
    </ws:createwMsisdn>
</soapenv:Body>

我想将 name 部分转换为动态变量。

我尝试过空手道的 .replace.set 方法,但没有成功。

* def user = read ('classpath:xxx/assign-name-password.xml')
* replace user.name = anotheruser.username
* print user

当打印工作时,它只向我显示标签,作为空标签。 () 我找不到任何相关的例子。

任何帮助将不胜感激。 提前致谢。

【问题讨论】:

    标签: testing soap cucumber bdd karate


    【解决方案1】:

    我认为你错过了这组示例,它在文档中被提及但不是演示的一部分:xml.feature

    我想你会喜欢你找到的东西。有很多选择,包括通过数据驱动的表格,下面只是几个:

    * def name = 'John Smith'
    * def xml =
    """
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.bigldap.ttech.com/">
    <soapenv:Header/>
    <soapenv:Body>
        <ws:createwMsisdn>
            <name>#(name)</name>
            <password>1</password>
            <appId>1</appId>
        </ws:createwMsisdn>
    </soapenv:Body>
    </soapenv:Envelope>
    """
    * match xml//name == 'John Smith'
    * set xml/Envelope/Body/createwMsisdn/name = 'Jane Doe'
    * match xml//name == 'Jane Doe'
    

    【讨论】:

    • 我看到了这些,但我猜它们不能正常工作。我已经尝试了所有这些,但它们没有用。我正在打印我的 xml,我看到我的 name 变量仍被视为 #(name)。
    • @Prometheus 哇,好的。是时候向您指出这一点了,一切顺利:github.com/intuit/karate/wiki/How-to-Submit-an-Issue
    • 谢谢,但不需要。很抱歉有额外的时间来解决问题。这是工作!自从您编写以来,我一直在尝试此操作,但显然我的代码行位置错误。我有更多的测试行,想在这里粘贴只需要的部分。当我更改了一些行时,它起作用了。我想说的是您的解决方案有效!
    • 你能分享一下这个解决方案吗?
    猜你喜欢
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    相关资源
    最近更新 更多