将多个 JSON 值分配给从空手道上的数据库调用返回的 XML 文件

Assigning multiple JSON values to XML file which returned from a Database call on Karate

对于测试项目,我正在调用数据库,并获取我将在我的 xml 文件中设置的必要字段以进行 SOAP 服务调用。

据我所知,数据库调用 returns 作为 JSON 值,因此我在将值赋值给“some 时遇到了一些麻烦" 我的部分 xml.

假设我有一个 .xml 文件,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xxxxxx>
<soapenv:Header/>
<soapenv:Body>
<int:createSubscriber soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <custBean xxxxx>
        <accountNumber xsi:type="xsd:string">#(accountNo)</accountNumber>
        <custName xsi:type="xsd:string" xs:type="type:string">Xbox</custName>
    </custBean>
    <addSubscriberBean xxxxx>7
        <subscriberID xsi:type="xsd:string">#(subsID)</subscriberID>
        <password xsi:type="xsd:string" xs:type="type:string">0</password>
        <areaID xsi:type="xsd:string" xs:type="type:string">1</areaID>
        <lineOfCredit xsi:type="xsd:int" xs:type="type:int"></lineOfCredit>
        <creditCycle xsi:type="xsd:int" xs:type="type:int"></creditCycle>
        <points xsi:type="xsd:int" xs:type="type:int"></points>
        <bandwidth xsi:type="xsd:int" xs:type="type:int"></bandwidth>
        <physicalPorts xsi:type="xsd:string" xs:type="type:string">8080</physicalPorts>
        <mobilePhoneNo xsi:type="xsd:string" xs:type="type:string">#(mobile)</mobilePhoneNo>
        <stbCount xsi:type="xsd:int" xs:type="type:int">5</stbCount>
        <oTTCount xsi:type="xsd:int" xs:type="type:int">10</oTTCount>
        <subscriptionType xsi:type="xsd:string" xs:type="type:string">#(subsType)</subscriptionType>
    </addSubscriberBean>
    <sequenceID xxxxx>1234567840123422700</sequenceID>
</int:createSubscriber>

然后我调用数据库,得到以下响应:

[
{
"ACCOUNT_NO": "123",
"SUBSCRIBER_ID": "123456",
"MOBILE": "123456789",
"SUBSCRIBER_TYPE": "XXXX"
},
{
"ACCOUNT_NO": "456",
"SUBSCRIBER_ID": "456789",
"MOBILE": "456789123",
"SUBSCRIBER_TYPE": "YYYY"
}
]

如上所示,我返回了 2 个对象,这意味着我需要将这些值动态分配给变量。

找不到线索来引导我找到一个解决方案,我可以在其中转换我的 JSON 类型值以将它们分配给我基于 XML 的变量。

循环 JSON 和

* def xml = <users></users>
* def fun =
"""
function(u, i) {
  var base = '/users/user[' + (i + 1) + ']/';
  karate.set('xml', base + 'account', u.accountNo);
  karate.set('xml', base + 'mobile', u.mobile);
  karate.set('xml', base + 'type', u.subsType);
}
"""
* eval karate.forEach(users, fun)