Извлечение элементов из ответа xml в jmeter в соответствии с определенной строкой в ​​элементе - PullRequest
0 голосов
/ 13 сентября 2018

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, но он не хранится в переменной.

Я успешно извлек SFDCProductlist с помощью Boundary extractor, но в качестве его массива я хочу только тот 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 голосов
/ 13 сентября 2018

Из вашего кода ответа кажется, что существует более одного списка продуктов.

Чтобы получить все, вам нужно установить для номера совпадения -1 в Boundary Extractor.Затем используйте vars.get {"Product_List_1"}, чтобы получить конкретный файл.

enter image description here

Если вам нужно все в одной переменной, одним из способов является объединение разных списков массивов.

С RegEx :-(. \ d \ n) enter image description here

0 голосов
/ 13 сентября 2018

Не видя полного ответа XML, мы не можем найти точное решение, однако для XML типов ответов имеет смысл придерживаться XPath Extractor

Соответствующий запрос XPath должен выглядеть примерно так: //SFDCProductList - он будет в основном возвращать все под тегом <SFDCProductList>:

JMeter XPath Extractor Demo

Если это не так - дважды проверьте выражение XPath, используя режим «XPath Tester» прослушивателя View Results Tree , в некоторых случаях вам может потребоваться:

  1. Установите флажок Use Tidy, если ответ недействителен XML / XHTML
  2. Если в ответе есть пространства имен XML , вам нужно либо объявить пространства имен с использованием свойства xpath.namespace.config , либо использовать такие функции, как name () или local-name () функции вместо имен тегов
  3. В случае каких-либо проблем прежде всего проверьте файл jmeter.log - в большинстве случаев он содержит достаточно информации, чтобы добраться до сути проблемы.

Ссылки:

0 голосов
/ 13 сентября 2018

Для извлечения содержимого внутри определенных границ вы можете использовать Boundary Extractor :

Выберите в качестве левой границы и </SFDCProductList> в качестве правой границы.

Поместите имя новой переменной в Name of created variable как productList и используйте его позже как ${productList} или vars.get("productList") внутри скрипта JSR223.

Позволяет пользователю извлекать значения из ответа сервера, используя левую и правую границы. В качестве постпроцессора этот элемент будет выполняться после каждого запроса Sample в своей области, проверяя границы, извлекая запрошенные значения, генерируя строку шаблона и сохраняя результат в заданном имени переменной.

...