我最近学习了如何在Ready API中使用数据驱动的测试以及如何基于数据进行循环调用。我的目标是循环运行这些步骤,最后使用DataSink创建一个自动导出工具,以便自动导出结果。
现在,当我尝试转到DataSink时,据我了解,我需要按如下方式创建列标题
存储相应的子值
如果每个siteId的肥皂响应都具有相同的XML结构,它将很好地工作。但就我而言,我收到的每个2000多个回复中都有不同数量的孩子
<retrun> </return>
例如,请查看响应1和响应2。这两个响应具有不同数量的子代。
回应1
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:getSiteInfoResponse xmlns:ns2="http://billing.xyz.cc/">
<return>
<address1>A</address1>
<city>B</city>
<closeDate>2018-10-15T00:00:00-05:00</closeDate>
<contact1/>
<contact2>TBD</contact2>
<country>X1</country>
<customerNbr>288</customerNbr>
<emailAddr1/>
<emailAddr2/>
<fax1>0</fax1>
<fax2>0</fax2>
<gps>C</gps>
<grouping2>Leased</grouping2>
<grouping4>D</grouping4>
<jobTitle1/>
<jobTitle2/>
<phone1>0</phone1>
<phone2>0</phone2>
<siteId>862578</siteId>
<siteName>D</siteName>
<squareFoot>0.0</squareFoot>
<state>E</state>
<weatherStation>D</weatherStation>
<zip4>4</zip4>
<zip5>F</zip5>
</return>
</ns2:getSiteInfoResponse>
</soap:Body>
</soap:Envelope>
回应2
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:getSiteInfoResponse xmlns:ns2="http://billing.xyz.cc/">
<return>
<address1>1202</address1>
<city>QA</city>
<contact1/>
<contact2>BL</contact2>
<country>A</country>
<customerNbr>288</customerNbr>
<emailAddr1/>
<emailAddr2/>
<fax1>0</fax1>
<fax2>0</fax2>
<gps>LTE</gps>
<grouping1>1345</grouping1>
<grouping2>Leased</grouping2>
<grouping3>ZX</grouping3>
<grouping4>AA</grouping4>
<grouping5>2000</grouping5>
<jobTitle1/>
<jobTitle2/>
<phone1>0</phone1>
<phone2>0</phone2>
<services>
<accountNbr>11099942</accountNbr>
<liveDt>2013-07-01T00:00:00-05:00</liveDt>
<service>2</service>
<serviceType>gas</serviceType>
<vendorAddr1/>
<vendorAddr2>M</vendorAddr2>
<vendorCity>N</vendorCity>
<vendorName>O</vendorName>
<vendorNbr>P</vendorNbr>
<vendorPhone>Q</vendorPhone>
<vendorState>R</vendorState>
<vendorZip>S</vendorZip>
</services>
<services>
<accountNbr>13064944</accountNbr>
<liveDt>2018-05-20T00:00:00-05:00</liveDt>
<service>2</service>
<serviceType>gas</serviceType>
<vendorAddr1/>
<vendorAddr2>A</vendorAddr2>
<vendorCity>B</vendorCity>
<vendorName>C</vendorName>
<vendorNbr>677</vendorNbr>
<vendorPhone>D</vendorPhone>
<vendorState>E</vendorState>
<vendorZip>F</vendorZip>
</services>
<siteId>101567</siteId>
<siteName>X</siteName>
<squareFoot>4226.0</squareFoot>
<state>Y</state>
<weatherStation>Z</weatherStation>
<zip4>0</zip4>
<zip5>L</zip5>
</return>
</ns2:getSiteInfoResponse>
</soap:Body>
</soap:Envelope>
现在,我需要使用整个响应来进一步创建一个表,以用于商业智能。如果必须在DataSink中创建匹配的标头,则需要遍历每个响应,以确保已在datasink中创建了相应的属性。在不影响准确性的情况下,这是人为不可能的。
有什么方法可以对Ready API进行编程,以通过每次循环调用将单独的XML响应存储在我指定的文件中(2000+ XML响应),或者通过响应节点的子级存储所有值,而无需我指定所有标头名称在“数据接收器”窗口中。如果发生这种情况,在两种情况下我都可以利用BI工具从那里创建对应的表。
先感谢你。
@克里斯·亚当斯(Chris Adams)感谢你的出色创意。即使我不能完全将其付诸实践。但是由于你的想法(获取数据),我走了一条不同的路线,我得到了想要的东西。
这就是我所做的。我没有使用DataSink,而是使用创建文件。想法是,每当我安排此任务时,Ready API便可以循环运行整个过程并将结果扔到静态文件夹中
带有文件名
包含
从获取数据原始请求agr3获得的网站ID
${getSiteInfo#RawRequest#declare namespace bil='http://billing.xyz.cc/'; //bil:getSiteInfo[1]/arg3[1]}.xml
和
文件内容
来自根节点响应的完整响应
${getSiteInfo#Response#declare namespace soap='http://schemas.xmlsoap.org/soap/envelope/'; //soap:Envelope[1]}
最终结果是这样
但是,我仍然对此感兴趣,并且可以使这部分起作用。
That said, you can still use datasink to dump out all values in one go. In the datasink, create a single header and use 'get data' to select the root node of your response.
我很高兴这个主意帮助您取得了一些进展。祝你好运!