вторник, 20 ноября 2012 г.

Тестирование Web-services. SoapUI. Использование Groovy Script для изменения Properties

Изменение переменных в Property TestStep

Создаем новый Property TestStep.

Предположим, что нам необходимо изменить значение переменной login перед использованием в Request'е.
Для этого создаем Groovy Script TestStep
И добавляем следующий код:

def propertyStep = testRunner.getTestCase().getTestSuite()
 .getTestCaseByName("TestCase 1").getTestStepByName("Properties")
//Get Нужен скорее для проверок того, что сейчас лежит в переменной login
def login = propertyStep.getPropertyValue("login");
propertyStep.setPropertyValue("login", "YourLogin");
//Также можно добавлять новые переменные по ходу теста:
propertyStep.setPropertyValue("pass", "Pwd");

Далее создаем шаг с request'ом:

<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:soap="http://soap.rpc.jira.atlassian.com">
   <soapenv:Header/>
   <soapenv:Body>
      <soap:login soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <in0 xsi:type="xsd:string">${Properties#login}</in0>
         <in1 xsi:type="xsd:string">${Properties#pass}</in1>
      </soap:login>
   </soapenv:Body>
</soapenv:Envelope>

Результат выполнения тестового шага: успешная авторизация. Ура!!!

3 комментария:

  1. Добрый день! Вы отлично пишите и по полезной теме. Жаль что давно не было новых заметок. Вы забросили блог или временно переключили силы на другие дела? Я сейчас как раз работаю с SoapUI и много нового и интересного почерпнул в том числе и из ваших заметок. К сожалению, ответов на многие вопросы по SoapUI я так и не нашел. К тому же я пока по определенным причинам могу пользоваться только Free-версией и некоторые решения заточенный под PRO мне просто не подходят.

    Вы не могли бы мне подсказать, как можно ссылаться на текущий ТестКейс из GroovyScript, чтобы не писать в каждом скрипте имя кейса при попытке присвоить переменной значение из Properties. Дело в том, что у меня есть десятки однотипных тестов (не спрашивайте зачем, просто решили что для различных случаев лучше заводить отдельные тесты) и в них есть передача параметров из Properties в Request'ы, по несколько штук в каждом тесте. Проблема в том, что тесты похожи, но имена отличны. В итоге каждый скрипт после "клонирования" приходится "причесывать" вручную и менять параметр в getTestCaseByName. Не то чтобы это сильно напрягало, но это вносит дополнительную сложность и вероятность внести ошибку или что-то забыть/потерять. Причем проблема еще в том, что нельзя даже в Properties забить имя кейса и использовать переменную с ним, так как мы как раз и используем имя кейса в строчке считывания параметра из Properties. Есть ли способ как-то явно указать на то, что нужно считывать параметр именно из текущего кейса? Попытка убрать параметр вовсе приводила к ошибке.

    ОтветитьУдалить
  2. Рука-лицо! Написал и тут же нашел ответ.
    Нужно было использовать контекст!

    def propertyStep = context.testCase.getTestStepByName("Properties");

    очень надеюсь, что это то что нужно.
    Подтолкнула на мысль вот эта статья:
    http://www.techinterviewpuzzles.com/2013/07/how-to-use-properties-in-soapui.html

    Пока отрабатывает как надо. На всей куче не смотрел еще.

    ОтветитьУдалить
  3. Добрый день! Спасибо за отзыв.
    SoapUI в настоящее время не занимаюсь, поэтому пока не пишу.

    Да, можно и так.
    Можно, в случае необходимости перебирать степы по индексам:

    def project = context.testCase.testSuite.project
    log.info(project.name + ” ” + project)
    def testSuite = project.getTestSuiteAt(1) // 1 is the index number of testsuite
    log.info(testSuite.name + ” ” + testSuite)
    def testCase = testSuite.getTestCaseAt(0) // 0 is the index number of testcase
    log.info(testCase.name + ” ” + testCase)
    def testStep = testCase.getTestStepAt(7) // 7 is the index number of teststep
    log.info(testStep.name + ” ” + testStep)

    http://learnsoapui.wordpress.com/2011/05/19/gr-oo-vy-ii-testrunnercontext-variable/

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

    ОтветитьУдалить