testing - 如何在 Karate DSL 中操作 xml 文件的变量?

标签 testing soap cucumber bdd karate

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

相关文章:

unit-testing - 你真的在使用单元测试吗?

google-chrome - 我怎样才能同时开始一个(多个) cucumber 测试?

ruby-on-rails - Cucumber 上的步骤定义在 Ruby on Rails 上找不到路径

java - 使用 WSO2 API 管理器管理 WSDL Soap 操作

ruby-on-rails - 集成测试在 Stripe 上创建测试用户,如何停止或 stub

javascript - 使用 Mocha 和 Chai-as-Promised 测试被拒绝 promise 的特定属性

python - 特拉维斯 ci : 'X' object has no attribute 'Y'

python - 如何为这个 Django 自定义标签编写测试用例

.net - 如何使用 WCF 跟踪查看器查看在线发送的原始 SOAP 信息?

c# - ASP.net Web 服务和智能感知