Параметризация в SoapUI. Хранение параметров
Что такое параметризация и зачем она нужна. Параметры = переменная = аргумент - то, что наша функция (метод) принимает на вход и возвращает на выход. Некоторые запросы в SoapUI не нуждаются в параметрах, например запросы, которые возвращают нам небольшие списки чего либо. Мы посылаем запрос без параметров: список всех людей на планете. И в ответе приходит список:
<getPerson>
<id>13222312</id>
<name>Oleg</name
<character>scandalous</character>
<country>Russia</country>
<profession>astronaut</profession>
<theFavoriteMusic>blues</theFavoriteMusic>
</getPerson>
Таких блоков в ответе будет почти 8 миллиардов. Параметры ответа могут быть любыми и описываются они в xsd проекта. В нашем случае ответ приходит с шестью параметрами.
Но чаще всего схема предусматривает запросы с параметрами. Например, если наш запрос позволит, то мы укажем, что хотим найти только людей, которые живут в Англии, с именем Фёдор, с характером дружелюбным, по профессии стекольщик, любимая музыка рэгги. Все это мы укажем в запросе (с точными формулировками, соответствующими ожиданию, так как SOAP это протокол, а протокол любит только заранее оговоренные значения). И когда мы отправим запрос с такими параметрами, нам в ответе вернется только 1 человек. Или ноль (если Фёдор переехал или сменил профессию).
В любом случае в SOAP у нас есть параметры запроса и параметры ответа. И для того, чтобы посылать параметры в запросах и брать их в ответах у нас есть специальные места хранения и инструменты получения.
Представьте себе - 1000 запросов в сотне кейсов, и у всех запросов вверху указан адрес стенда, где развернуто приложение. А стендов у вас, например, 5. Т.е. иногда вы отправляете на один, иногда на другой. В любом случае совершенно не хочется каждый раз 1000 раз открывать запросы и заменять в них адреса сервера. Хотя есть такие люди, которые пишут скрипт, подменяющий везде адреса, но это немного слишком - гораздо проще параметризовать этот параметр.
SoapUI дает возможность хранить:
- Глобальные параметры (их могут использовать все проекты) "Global Properties"
- Параметры проекта (их могут использовать все сьюты проекта "Project Properties"
- Параметры cьюта (их могут использовать все кейсы сьюта) "TestSuite Properties"
- Параметры кейса (используются всем методами кейса) "TestCase Properties"
- Параметры метода (их обычно вообще никто не использует) "TestRequest Properties"
Что обычно хранится в глобальных параметрах? То, что вы используете постоянно, во всех проектах и что неизменно, но такие вещи редко встречаются, поэтому глобальные параметры практически никогда не используются.
В параметрах проекта обычно хранятся endPointы (адреса продуктов на тестовых стендах), настройки подключения к БД, еще какие-то параметры, которые могут быть использованы во всех кейсах проекта.
В параметрах кейса хранятся более узкоиспользуемые параметры, нужные в данном конкретном кейсе.
В сьюте чаще всего хранят переменные параметры из этого самого сьюта. Подробнее я расскажу ниже, в примерах.
Вот картинка, где я попыталась понятно изобразить как мы храним свойства нашего эндпойнта в properties проекта и как ссылаемся на эти пропертиз.
В этом примере мы видим вместо ссылки в поле endPoint-а этот текст: ${#Project#endPoint}, который означает, что необходимо пойти в параметры проекта и найти там переменную, которая называется endPoint и свойства этой переменной подставить в поле.
Ссылки на параметры выглядят следующим образом:
${#Project#Parameter} - ссылка на параметр проекта, в котором находится тест
${#TestSuite#Parameter} - ссылка на параметр сьюта, в котором находится тест
${#TestCase#Parameter} - ссылка на параметр кейса, в котором находится тест
Но запоминать все это не нужно, так как подставлять параметры мы можем прямо в интерфейсе, нужно просто щелкнуть правой кнопкой в том месте, куда нужно подставить параметр и выбрать из списка GetData (при условии, что в этих всех местах есть заранее установленные параметры):
Там мы просто выбираем параметр, на который хотим ссылаться, а значения этого параметра меняем в Properties когда это будет нужно. Тогда везде, где указана ссылка на это свойство, произойдут изменения.
Соответственно если мы в параметре endPoint изменим свойства (поменяем один стенд на другой), то это свойство изменится и во всех 1000 тестах.
Что нужно не забыть: когда Вы параметризуете свои тесты, ссылки на пропертиз будут работать только внутри вашего проекта, и если вы хотите перенести тест в другой проект, или просто скинуть кому-то запрос из теста, то нужно копировать из формата raw: