JMeters XPath2 Extractor всегда возвращает значение по умолчанию - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь извлечь значение из ответа SOAP, используя XPath2 Extractor, но он всегда возвращает значение по умолчанию.

Моя конфигурация JMeter следующая:

  1. Мастер: 1 машина
  2. Slave: 1 машина (в случае успеха мне нужно настроить 10 рабов.)
  3. JMeter Версия: 5.0

XML-ответ выглядит следующим образом:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <h:ResHeader xmlns:h="http://www.ssss.com/ResHeader/SSS" xmlns="http://www.SSS.com/ResHeader/SSS" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        ...
    </h:ResHeader>
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <element  xmlns="http://www.SSS.com/xx/xx">
        ...
        <ServerSettingInfo>
            <ServerUrl>https://SomeServer.com/XX</ServerUrl>
            <UserName>SomeUser</UserName>
            <Password>SomePassword</Password>
        </ServerSettingInfo>
        ...
    </element>
  </s:Body>
 </s:Envelope>

Я пробовал следующее выражение XPath:

  1. // ServerSettingInfo / ServerURL / текст ()
  2. // ServerURL / текст ()
  3. / s: Envelope / s: Body / элемент / ServerSettingInfo / ServerURL
  4. / s: Envelope / s: Body / элемент / ServerSettingInfo / @ ServerURL

У меня не работает ни одно из приведенных выше выражений XPath.

XPath2 Extractor имеет следующие настройки:

  1. Применить к: только основной образец
  2. Имя созданной переменной: ServerURL
  3. XPAth: // ServerUrl / text ()
  4. Матч № 0
  5. Значение по умолчанию: не найдено
  6. Список псевдонимов пространства имен: EMPTY

Кто-нибудь знает, почему XPath2 Extractor не работает ??

Есть ли способ добиться этого?

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Работает с XPath2 Extractor :

XPath 2 Extractor

Поскольку у вас есть пространства имен, вам нужно что-то добавить в список псевдонимов пространства имен.

Используйте Xpath2 Tester в дереве результатов просмотра, чтобы извлечь список пространства имен:

XPath 2 Tester

Затем добавьте, например, в Список псевдонимов пространства имен, чтобы выбрать в качестве псевдонима для 'http://www.SSS.com/xx/xx':

а = http://www.SSS.com/xx/xx

Тогда вы можете использовать:

// а: ServerURL

Обратите внимание, что если вы поставили http://www.SSS.com/xx/xx только для того, чтобы скрыть начальное пространство имен, то, конечно, вам нужно изменить его, чтобы оно соответствовало реальному пространству имен элемента ServerUrl

Примечание: примечание Дмитрия о распределенном тестировании не имеет отношения к вашей проблеме.

0 голосов
/ 05 ноября 2018
  1. Начиная с JMeter 2.9 по умолчанию подчиненные двигатели JMeter отправляют результаты мастеру в режиме StrippedBatch
  2. Согласно Документация JMeter :

    1013 * семейство полос режима responseData, поэтому это означает, что некоторые элементы, которые полагаются на доступность предыдущего responseData, не будут работать. На самом деле это не проблема, так как всегда есть более эффективный способ реализовать эту функцию.

Исходя из приведенных выше утверждений, я ожидаю, что проблема исчезнет, ​​если вы добавите следующую строку в файл user.properties на главном и всех ведомых устройствах:

mode=Standard

JMeter перезапуск потребуется, чтобы забрать собственность.

Ссылки:


Обновление: по какой-то причине у меня сложилось впечатление, что ошибка связана с распределенным тестированием, если вы не можете найти ServerUrl текстовое значение с помощью XPath Extractor даже в нераспределенном режиме, вы можете сделать это с помощью name () работает как:

(//*[name() = 'ServerUrl'])/text()

Демо-версия:

enter image description here

Если это все еще не работает (т.е. вы предоставили неполную структуру ответа SOAP), вы можете перейти к функции local-name ()

(//*[local-name() = 'ServerUrl'])/text()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...