首页 文章

如何在空手道DSL中操纵xml文件的变量?

提问于
浏览
1

使用Karate 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

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

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

1 回答

  • 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'
    

相关问题