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

问题描述 投票:2回答:3

enter image description hereenter image description hereenter 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提取器,但它没有将它存储在变量中。

我已经成功地使用Boundary提取器提取了SFDCProductlist但是作为一个数组我只想要在元素中有“New”关键字的SFDCProductlist。

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??
xpath xml-parsing jmeter
3个回答
1
投票

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

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

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

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


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()函数等函数而不是标记名称
  3. 如果遇到任何问题,首先检查jmeter.log文件 - 在大多数情况下,它包含足够的信息以解决问题的根源。

参考文献:


1
投票

从您的响应代码,似乎有多个产品列表。

要获取全部,需要在Boundary提取器中将Match No.设置为-1。然后,使用vars.get {“Product_List_1”}来获取特定的一个。

enter image description here

如果你需要一个变量,一种方式,就是组合不同的数组列表。

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

© www.soinside.com 2019 - 2024. All rights reserved.