XPath выбирает только один узел из нескольких случайно - PullRequest
0 голосов
/ 14 декабря 2018

В SOAPUI у меня есть шаг запроса JDBC со следующим результатом:

<Results>
    <ResultSet fetchSize="10">
        <Row rowNumber="1">
            <CUSTOMER_ID>1963</CUSTOMER_ID>
            <ID>444</ID>
            <COMM_PRODUCT_ID>229</COMM_PRODUCT_ID>
            <DESCRIPTION>vitae consectetuer eget rutrum</DESCRIPTION>
            <STATUS>1</STATUS>
        </Row>
        <Row rowNumber="2">
            <CUSTOMER_ID>4389</CUSTOMER_ID>
            <ID>6008</ID>
            <COMM_PRODUCT_ID>229</COMM_PRODUCT_ID>
            <DESCRIPTION>neque</DESCRIPTION>
            <STATUS>1</STATUS>
        </Row>
        <Row rowNumber="3">
            <CUSTOMER_ID>8836</CUSTOMER_ID>
            <ID>5304</ID>
            <COMM_PRODUCT_ID>229</COMM_PRODUCT_ID>
            <DESCRIPTION>lectus suspendisse potenti</DESCRIPTION>
            <STATUS>1</STATUS>
        </Row>
        <Row rowNumber="4">
            <CUSTOMER_ID>7360</CUSTOMER_ID>
            <ID>8279</ID>
            <COMM_PRODUCT_ID>229</COMM_PRODUCT_ID>
            <DESCRIPTION>at turpis a</DESCRIPTION>
            <STATUS>1</STATUS>
        </Row>
        <Row rowNumber="5">
            <CUSTOMER_ID>823</CUSTOMER_ID>
            <ID>235</ID>
            <COMM_PRODUCT_ID>229</COMM_PRODUCT_ID>
            <DESCRIPTION>non interdum</DESCRIPTION>
            <STATUS>1</STATUS>
        </Row>
        <Row rowNumber="6">
            <CUSTOMER_ID>5430</CUSTOMER_ID>
            <ID>4278</ID>
            <COMM_PRODUCT_ID>229</COMM_PRODUCT_ID>
            <DESCRIPTION>leo maecenas pulvinar</DESCRIPTION>
            <STATUS>1</STATUS>
        </Row>
        <Row rowNumber="7">
            <CUSTOMER_ID>9209</CUSTOMER_ID>
            <ID>9974</ID>
            <COMM_PRODUCT_ID>229</COMM_PRODUCT_ID>
            <DESCRIPTION>ut suscipit</DESCRIPTION>
            <STATUS>1</STATUS>
        </Row>
        <Row rowNumber="8">
            <CUSTOMER_ID>8135</CUSTOMER_ID>
            <ID>8296</ID>
            <COMM_PRODUCT_ID>229</COMM_PRODUCT_ID>
            <DESCRIPTION>lectus pellentesque eget</DESCRIPTION>
            <STATUS>1</STATUS>
        </Row>
        <Row rowNumber="9">
            <CUSTOMER_ID>8247</CUSTOMER_ID>
            <ID>4569</ID>
            <COMM_PRODUCT_ID>229</COMM_PRODUCT_ID>
            <DESCRIPTION>vulputate nonummy</DESCRIPTION>
            <STATUS>1</STATUS>
        </Row>
        <Row rowNumber="10">
            <CUSTOMER_ID>7156</CUSTOMER_ID>
            <ID>836</ID>
            <COMM_PRODUCT_ID>229</COMM_PRODUCT_ID>
            <DESCRIPTION>adipiscing molestie</DESCRIPTION>
            <STATUS>1</STATUS>
        </Row>
    </ResultSet>
</Results>

Пользовательское свойство: "ResponseAsXml"

И у меня есть Porperty Transfer со следующим источником:

Источник : запрос JDBC

Свойство : ResponseAsXml

Язык пути : XPath

Текстовое поле : Результаты / ResultSet / Row [1] / CUSTOMER_ID [1]

Мне нужноget Row [Случайный узел] / CUSTOMER_ID [1] , (это позволяет избежать использования одного и того же клиента в нескольких тестовых выполнениях), но я не знаю, как это предложение, чтобы получить случайный узел.

Заранее спасибо!

Джулиан.

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Спасибо за ответ,

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

Random rnd = new Random () def rowCount = context.expand ('$ {COUNT # ResponseAsXml # Results / ResultSet / Row / COUNTDISTINCTAD.CUSTOMER_ID}') .toInteger ()

int randomNumber = rnd.nextInt (rowCount + 1 - 0)

testRunner.testCase.testSteps ["Свойства"]. SetPropertyValue ("x", randomNumber.toString ())

def customer = context.expand ('$ {CustomerQuery # ResponseAsXml # Results/ ResultSet / Row [$ {Properties # x}] / CUSTOMER_ID} ')

testRunner.testCase.testSteps ["Свойства"]. SetPropertyValue ("CustomerId", customer)

0 голосов
/ 14 декабря 2018

Добро пожаловать в переполнение стека.(Или просто так, как некоторые говорят)

Я не думаю, что вы можете сделать это с помощью xpath.Но это довольно просто сделать в Groovy Script Teststep.

Возможно, вы захотите заглянуть в XmlSlurper одновременно.Очень полезно знать, когда вы хотите сделать что-то еще.

Добавьте тестовый шаг Groovy Script после вашего JDBC Testetep.Используйте его, чтобы узнать, сколько клиентов вернул ваш поиск в базе данных.Используйте это число, чтобы сгенерировать случайное целое число в любом месте в интервале от 0 до количества клиентов минус один.

Затем используйте это случайное число, чтобы получить идентификатор клиента от этого конкретного клиента.Затем просто верните идентификатор из вашего скрипта.Это значение теперь можно легко использовать в другом месте.

Попробуйте сами.Если вам не удается заставить его работать, отправьте свой код здесь, и я вам помогу.

РЕДАКТИРОВАТЬ

Я только что посмотрел, и вы можете почтиделайте это исключительно с xpath.Но вам также понадобится генератор случайных чисел.И было бы неправильно встроить это в ваш xpath.Итак, мое второе предложение будет следующим:

  1. Создайте шаг теста Groovy Script, который рассчитывает количество строк.Назовите это «RandomInteger».Если вы всегда получаете 10 строк, просто жестко запишите это.На основе этого числа верните случайное целое число в интервале от 0 до количества строк минус один.

  2. Поместите этот сценарий между вашим шагом теста JDBC-запроса и вашим шагом теста передачи свойства.

  3. Измените свой xpath на что-то вроде

    Results / ResultSet / Row [$ {RandomInteger # result] / CUSTOMER_ID [1]

...