Извлечь элементы из ответа xml в jmeter в соответствии с определенной строкой в ​​элементе

Извлечь элементы из ответа xml в jmeter в соответствии с определенной строкой в ​​элементеИзвлечь элементы из ответа xml в jmeter в соответствии с определенной строкой в ​​элементеИзвлечь элементы из ответа xml в jmeter в соответствии с определенной строкой в ​​элементеI хочет извлечь содержимое 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??

Помог ли мой ответ?

user7294900 16.09.2018 10:03

Я обновил фактическую полезную нагрузку.

Apu 17.09.2018 18:48

С помощью простого экстрактора xpath я могу получить общее количество переменных, сгенерированных с его помощью: SFDCProduct_matchNr. Но мне нужно поставить условие / цикл, который перебирает эти переменные, и если есть новая подстрока, используйте эту переменную «SFDC_Product_1» в следующих шагах.

Apu 17.09.2018 20:29

Я использовал цикл while, затем обработчик оболочки bean-компонентов и экстрактор регулярных выражений. В то время как проверяется номер SFDCProduct_matchNr и установлена ​​ли переменная в NEw из экстрактора Regex. Beanshell присваивает новой переменной нужный нам SFDCProduct_i, а регулярное выражение создает переменную, в которой хранится ключевое слово New, если в этой переменной присутствует NEw. Но почему-то он не попадает в цикл while. ??

Apu 17.09.2018 20:57

Условие while: $ {__ javaScript ("$ {SFDCProduct_matchNr}" == -1 && "$ {SFDCProduct_NewOffer}" == "New",)}.

Apu 17.09.2018 21:04

Спасибо всем за решение. Я решил до некоторой степени. Последняя часть, которую я публикую как вопрос.

Apu 17.09.2018 23:13
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
6
3 724
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Чтобы извлечь содержимое внутри определенных границ, вы можете использовать Пограничный экстрактор:

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

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

Allows the user to extract values from a server response using left and right boundaries. As a post-processor, this element will execute after each Sample request in its scope, testing the boundaries, extracting the requested values, generate the template string, and store the result into the given variable name.

Это сработало. Спасибо. Я успешно извлек SFDCProductlist с помощью Boundary extractor, но в качестве массива мне нужен только тот SFDCProductlist, который имеет ключевое слово «New» в элементе <OfferName>. Как я могу этого добиться?

Apu 17.09.2018 20:01

Судя по вашему коду ответа, существует более одного списка продуктов.

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

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

С RegEx: - (. \ D \ n)

Я успешно извлек SFDCProductlist с помощью Boundary extractor, но в качестве массива мне нужен только тот SFDCProductlist, который имеет ключевое слово «New» в элементе <OfferName>. Есть ли способ соединения регулярного выражения и границы?

Apu 17.09.2018 20:01

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

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

JMeter XPath Extractor Demo

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

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

Использованная литература:

Другие вопросы по теме