soapUI: свойство не используется в расширении свойства в тестовом примере - PullRequest
1 голос
/ 11 января 2011

Я использую soapUI 3.6.1 и хочу протестировать SOAP-интерфейс с такой структурой теста:

MyWorkspace
    MyProject
        TestSuite
            TestCase Single
                TestStep 1
            TestCase Loop
                Properties #1
                Groovy #1
                Run TestCase Single
                Properties #2
                Groovy #2
                Run TestCase Single

TestCase Single содержит несколько запросов, которые должны быть выполнены с помощьютот же идентификатор аккаунта.TestCase Loop должен вызывать TestCase Single, используя разные идентификаторы аккаунта.Properties * должен изменить идентификатор учетной записи.

MyProject имеет свойство accountId, настроенное со значением 1234. Это должно работать как значение по умолчанию для одиночного тестирования тестовых случаев, т.е.TestCase Single.

Properties #1 и Properties #2 имеют accountId, заданные различными значениями.

Намерение состоит в том, чтобы разрешить выполнение TestStep 1 отдельно или как часть TestCase Loop.

TestStep 1 имеет общее SOAP-тело, в котором параметр, отправляемый веб-службе, имеет следующий параметр:

     <accId>${='${#accountId}' != '' ? '${#accountId}' : ${#Project#accountId}}</accId>

Groovy #1 и Groovy #2 выглядят так:

log.info('Using account ' + (context.expand('${#accountId}') != '' ? context.expand('${#accountId}') : context.expand('${#Project#accountId}')));

Моя проблема сейчас в том, что Groovy-скрипт записывает правильное значение accountId (т. Е. Значение внутри цикла), но TestStep 1 всегда использует значение из проекта.Я хочу, чтобы TestStep 1 использовал значение цикла.

В целях отладки я также поместил в TestStep 1 следующее:

<!--
{#Project#accountId}: ${#Project#accountId}
{#TestSuite#accountId}: ${#TestSuite#accountId}
{#TestRunContext#accountId}: ${#TestRunContext#accountId}
{#TestRun#accountId}: ${#TestRun#accountId}
{#TestCase#accountId}: ${#TestCase#accountId}
{#TestStep#accountId}: ${#TestStep#accountId}
{#MockService#accountId}: ${#MockService#accountId}
{#Global#accountId}: ${#Global#accountId}
{#System#accountId}: ${#System#accountId}
{#Env#accountId}: ${#Env#accountId}
{#accountId}: ${#accountId}
context.accountId: ${=context.accountId}
modelItem.accountId: ${=modelItem.accountId}
request.accountId: ${=request.accountId}
context.expand(): ${=context.expand('${#accountId}')}
-->

Я проследил сетевой трафик с помощью Wireshark и заметилчто только ${#Project#accountId} вернул значение.

Что я здесь не так делаю?Как мне нужно кодировать <accId> -элемент для отправки правильного значения на удаленный хост?

1 Ответ

0 голосов
/ 17 марта 2011

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

Я изменил структуру на такую:

MyWorkspace
    MyProject
        TestSuite
            TestCase Single
                TestStep 1
            TestCase Loop
                Groovy #1
                Run TestCase Single
                Groovy #2
                Run TestCase Single

Другими словами, я избавился от Properties и переместил логику в Groovies:

context.getTestCase().getTestSuite().setPropertyValue("accountId_loop", "1720");

и соответствующую строку в TestStep 1:

     <accId>${='${#TestSuite#accountId_loop}' != '' ? '${#TestSuite#accountId_loop}' : ${#MyProject#accountId}}</accId>
...