Создаем новый 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>
Результат выполнения тестового шага: успешная авторизация. Ура!!!
Добрый день! Вы отлично пишите и по полезной теме. Жаль что давно не было новых заметок. Вы забросили блог или временно переключили силы на другие дела? Я сейчас как раз работаю с SoapUI и много нового и интересного почерпнул в том числе и из ваших заметок. К сожалению, ответов на многие вопросы по SoapUI я так и не нашел. К тому же я пока по определенным причинам могу пользоваться только Free-версией и некоторые решения заточенный под PRO мне просто не подходят.
ОтветитьУдалитьВы не могли бы мне подсказать, как можно ссылаться на текущий ТестКейс из GroovyScript, чтобы не писать в каждом скрипте имя кейса при попытке присвоить переменной значение из Properties. Дело в том, что у меня есть десятки однотипных тестов (не спрашивайте зачем, просто решили что для различных случаев лучше заводить отдельные тесты) и в них есть передача параметров из Properties в Request'ы, по несколько штук в каждом тесте. Проблема в том, что тесты похожи, но имена отличны. В итоге каждый скрипт после "клонирования" приходится "причесывать" вручную и менять параметр в getTestCaseByName. Не то чтобы это сильно напрягало, но это вносит дополнительную сложность и вероятность внести ошибку или что-то забыть/потерять. Причем проблема еще в том, что нельзя даже в Properties забить имя кейса и использовать переменную с ним, так как мы как раз и используем имя кейса в строчке считывания параметра из Properties. Есть ли способ как-то явно указать на то, что нужно считывать параметр именно из текущего кейса? Попытка убрать параметр вовсе приводила к ошибке.
Рука-лицо! Написал и тут же нашел ответ.
ОтветитьУдалитьНужно было использовать контекст!
def propertyStep = context.testCase.getTestStepByName("Properties");
очень надеюсь, что это то что нужно.
Подтолкнула на мысль вот эта статья:
http://www.techinterviewpuzzles.com/2013/07/how-to-use-properties-in-soapui.html
Пока отрабатывает как надо. На всей куче не смотрел еще.
Добрый день! Спасибо за отзыв.
ОтветитьУдалить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/
На индекс можно завязать и свойства теста, а значения параметра перечилять через разделитель, перед отправкой реквеста получившуюся строку парсим, пользоваться, наверное, будет не очень удобно, но как вариант решения думаю подойдет.