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

问题描述 投票:0回答:1

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

据我所知,数据库调用返回为 JSON 值,因此我在为 xml 的“some”部分赋值时遇到了一些麻烦。

假设我有一个如下所示的 .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 的变量。

testing soap cucumber bdd karate
1个回答
0
投票

遍历 JSON 并 构建 XML.

* 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);
}
"""
* karate.forEach(users, fun)
© www.soinside.com 2019 - 2024. All rights reserved.