根据元素中的特定字符串从jmeter中的xml响应中提取元素

时间:2018-09-12 21:41:35

标签: xpath xml-parsing jmeter

enter image description here enter image description here enter image description here我想将SFDCProductList的内容提取到一个变量中,该变量是一个数组。 这该怎么做?

我有以下xml:             。        。        。        10000        谢谢!您的请求已成功执行。代码PIM 10000                                 sgfsuifg              sjkfbksgfsudf

      </SFDCProduct>
   </SFDCProductList>
   <SFDCProductList>
   .
   .
   .
</SFDCProductList>
<SFDCProductList>
   .
   .
   .
</SFDCProductList>
   <TransportInformation>
   .
   .
   .
   </TransportInformation>
</EnhancedServicePrequalResponse>

<EnhancedServicePrequalResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Code>10000</Code>
<Message>Thank You!</Message>
<SFDCProductList>
<SFDCProduct>
<OfferName>XYZ</OfferName>
<OfferDisplayName>New Offer</OfferDisplayName>
<OfferType>New</OfferType>
<EndDate>2021-02-16</EndDate>
<OfferLineItemList>
<OfferLineItem>
<OfferLineItemCategory>Transport Service</OfferLineItemCategory>
<OfferLineItemName>transport</OfferLineItemName>
</OfferLineItem>
<OfferLineItem>
<OfferLineItemCategory>Device</OfferLineItemCategory>
<OfferLineItemName>Billing</OfferLineItemName>
</OfferLineItem>
</OfferLineItemList>
<TransportName>BR</TransportName>
</SFDCProduct>
</SFDCProductList>
<SFDCProductList>
<SFDCProduct>
<OfferName>Upgrade</OfferName>
<OfferDisplayName>Upgrade</OfferDisplayName>
<OfferType>Upgrade</OfferType>
<EndDate>2021-02-16</EndDate>
<OfferLineItemList>
<OfferLineItem>
<OfferLineItemCategory>Transport</OfferLineItemCategory>
<OfferLineItemName>Billing</OfferLineItemName>
</OfferLineItem>
<OfferLineItem>
<OfferLineItemCategory>Device</OfferLineItemCategory>
<OfferLineItemName>Billing</OfferLineItemName>
</OfferLineItem>
</OfferLineItemList>
<TransportName>JR</TransportName>
</SFDCProduct>
</SFDCProductList>
<TransportInformation>
<TransportFeasibilityParameter>
<AvailabilityFlag>true</AvailabilityFlag>
<BusinessAvailabilityFlag>true</BusinessAvailabilityFlag>
<TransportName>BR</TransportName>
</TransportFeasibilityParameter>
<TransportFeasibilityParameter>
<AvailabilityFlag>true</AvailabilityFlag>
<BusinessAvailabilityFlag>true</BusinessAvailabilityFlag>
<TransportName>JR/TransportName>
</TransportFeasibilityParameter>
</TransportInformation>
</EnhancedServicePrequalResponse>

我尝试使用xpath提取程序,但未将其存储在变量中。

我已成功使用边界提取器提取了SFDCProductlist,但作为数组,我只希望该SFDCProductlist在元素中具有“ New”关键字。

The beanshell Script:

int SFDCProduct_matchNr =vars.get("SFDCProduct_matchNr");

String list="SFDCProduct"+"_"+"SFDCProduct_matchNr";
int SFDCProduct_matchNrvalue=SFDCProduct_matchNr-1;
vars.put("SFDCProduct_matchNr", "SFDCProduct_matchNrvalue");
vars.put("sfdc", "list");enter code here

But still its not assigning the sfdc with SFDCProduct_1 value??

3 个答案:

答案 0 :(得分:1)

要提取特定边界内的内容,可以使用Boundary Extractor

选择作为左边界,</SFDCProductList>作为右边界。

Name of created variable中将新的变量名称作为productList放置,然后在JSR223脚本中将其用作${productList}vars.get("productList")

  

允许用户使用左右边界从服务器响应中提取值。作为后处理器,此元素将在其范围内的每个Sample请求之后执行,测试边界,提取请求的值,生成模板字符串,并将结果存储到给定的变量名称中。   

答案 1 :(得分:1)

根据您的响应代码,似乎有不止一个产品列表。

要获取所有内容,您需要在边界提取器中将匹配号设置为-1。然后,使用vars.get {“ Product_List_1”}来获取特定的对象。

enter image description here

如果您只需要一个变量,一种方法是合并不同的数组列表。

使用RegEx:-(。\ d \ n) enter image description here

答案 2 :(得分:1)

没有看到完整的XML响应,我们无法提出确切的解决方案,但是对于XML响应类型,坚持使用XPath Extractor

相关的XPath查询应类似于://SFDCProductList-它基本上将返回<SFDCProductList>标签下的所有内容:

JMeter XPath Extractor Demo

如果没有,请使用View Results Tree侦听器的“ XPath Tester”模式再次检查XPath表达式,在某些情况下,您可能需要:

  1. 如果响应无效的XML / XHTML,请勾选Use Tidy
  2. 如果响应中包含XML Namespaces,则需要使用xpath.namespace.config属性声明名称空间,或者使用类似name()local-name()的函数代替标记名< / li>
  3. 如果有任何麻烦,请首先检查 jmeter.log 文件-在大多数情况下,它包含足够的信息来深入探讨问题。

参考文献: