使用 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>
我想将名称部分转换为动态变量。
我尝试过 Karate 的.replace和.set方法,但没有成功。
* def user = read ('classpath:xxx/assign-name-password.xml')
* replace user.name = anotheruser.username
* print user
当打印工作时,它只向我显示标签,作为空标签。 () 我找不到任何相关示例。
任何帮助将不胜感激。 提前致谢。
最佳答案
我认为您错过了这组示例,文档中提到了它,但不是演示的一部分: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'
关于testing - 如何在 Karate DSL 中操作 xml 文件的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53430439/