10 сентября 2014 г. 2:34:36

Первый набег на SoapUI Pro 5.1.2

1. Скачиваем с официального сайта www.soapui.org
2. Устанавливаем
3. Запускаем, регистрируемся, чтобы на почту прислали лицензионный ключ на 2 недели. Программа подскажет, что делать.
4. Cоздаем новый SOAP проект (Ctrl+Shift+N). 
Назовем проект: “Конвертер валют”
Іnitial WSDL: можно позже добавить. Но он (читаем в Вики: протокол обмена структурированными сообщениями в распределенной вычислительной среде) у нас уже есть, так почему бы сразу не задействовать. http://www.webservicex.net/CurrencyConvertor.asmx?WSDL
Жмем Ок. 


Примечание: (найдено на просторах гугла)
"s> известно, что для ASP.NET сервисов WSDL схему можно получить по запросу
 s> url+"?wsdl" а как узнать urlOfWSDL в произвольном случае.  Ответ: Никак. Автор сервиса должен тебе его сказать."
 

Что-то пошло не так?
Что может помочь: 
(1) проверить написание, вдруг что-то лишнее при копировании попало. Подсказка в тексте сообщения об ошибке.
 http://www.webservicex.net/{а вдруг здесь пробел? Его нужно убрать.}CurrencyConvertor.asmx?WSDL

(2) Сомнительный, но все же вариант:  File > Preferences > UI Settings > галочка Open startup web page when starting SOAP UI.  
(3) И еще один вариант. “Лаконичный”: выйти и зайти заново в Soap UI.
  
5. Теперь проверка на внимательность. Это в глазах двоится, или у нас 2 CurrencyConverterSoap?   

Все нормально. Это две версии. Договоримся, что будет работать с CurrencyConverterSoap и, чтобы избежать путаницы, удалим CurrencyConverterSoap12.
6. Теперь посмотрим, что из себя представляет Request 1 (запрос, реквест). 
Он сформировался по-умолчанию, когда мы создавали проект.
Открываем его и видим на вкладках:
Форма: Если из названия еще было непонятно (сарказм), что делает данный веб-сервис, то теперь все прояснилось.Перевод с одной валюты(FromCurrency) в другую (ToCurrency), есть форма и 2 выпадающих списка с названиями валют. 

Примечание: Гривны там есть, так что одобряю :)

XML: А вот так это выглядит на самом деле. Увидели знакомые “?” и названия из формы? 

Примечание: Вернитесь на форму и выберите “RUB” в “UAH”, а теперь вернитесь на XML, где теперь тоже “RUB” и “UAH”.


7. Чего стоим-ждем? Пробуем запустить.
В окне слева выводится курс, который в момент запроса был 0.3482

Поздравляю с Вашим первым запросом! 


8. Порадовались? А теперь быстро вспоминаем, что мы хоть и новоиспеченные, но тестировщики. Мы любим порядок, и нам срочно нужен тест-сьют для хранения тест-кейсов. Почему реквест это не тест-кейс, скажу дальше.

Сейчас жмем на “+” или через контестное меню, или просто Сtrl-Alt-A
TestSuite1
TestCase1
Соглашаемся добавить Request1 в  TestCase1

Теперь видим “дерево” с красивыми и греющими душу словами “Test Steps”
Заметим, что Request1 продублировался после добавления в тест-кейс, и унаследовал свое название от СonversionRate.
Откроем  “СonversionRate-Request1” для редактирования.
Почему сам по себе реквест – не тест-кейс?

Во-первых, не укажи мы ранее, с какой валюты в какую хотим конвертировать, то запрос запрашивал бы курс для перевода “?” в “?”.
Давайте сейчас заменим RUB и UAH на знаки вопроса и запустим реквест. Выполнился-то он успешно и окрасился в зеленый...вот только информации ценной не принес.
Вывод1: нужно указать конкретные значения в запросе. Дать входные данные.
Во-вторых, вернем  RUB и UAH обратно, и снова запустим запрос. 
Запрос успешно выполнился, позеленел. Слева в окне курс уже 0.3481 (а был 0.3482).
И опять, ценность информации сомнительна: откуда нам знать, правильное это поведение веб-сервиса или нет? Какие у нас вообще ожидания? 
Вывод2: как в каждом тест-кейсе есть ожидаемый результат, так и в реквесте нужно указывать “ожидаемое” или assertion. 

Приступим к написанию нашего первого простенького тест-кейса. 
Предупреждение: тест-кейс будет довольно бессмысленным!
Идея тест-кейса: проверить, что курс между рублем и гривной действительно равен 0.3481
Ожидаемый результат (он же будет assertion):  0.3481

Итак, переименовываем (F2) “СonversionRate-Request1” в “From RUB to UAH”.
Нажимает на “+”, чтобы добавить assertion.
Откроется окно с многообразием ассершенов, выбираем подоходящий по названию и описанию - “Contains”.
В новом окне заполняем “Соntent” проверяемым значением: 0.3481
Примечание: не путайте точку и запятую в цифрах.

Нажимаем Ок. Переходим на нижнюю вкладку “Assertions”. Если они зеленые – фактический результат совпадает с ожидаемым.
Но этот вывод сделан на основе данных о курсе, полученном в в прошлом запросе.
Запустим запрос “From RUB to UAH”, чтобы обновить данные о курсе рубля и гривны.
Есть! Наш аssertion окрасился в красный. И причину легко увидеть в окошке слева – курс теперь 0.3484.  И фактический результат отличается от ожидаемого...
Бессмысленность тест-кейса и заключалась в том, что бессысленно ставить один единственный курс в ожидаем результате, потому курс непредсказуемо меняется.


Давайте изменим идею тест-кейса:
Update: Идея тест-кейса: проверить, что курс между рублем и гривной действительно больше 0.3400 

Отредактировать assetion, дописав “>” не получится. Необходимо использовать другой вид ассершена – XPath Match. Выбираем его, в новом окне нажимаем “declare”.

Та-дамм...появился КОД:

declare namespace soap='http://schemas.xmlsoap.org/soap/envelope/';
declare namespace ns1='http://www.webserviceX.NET/';

/** soap и ns1 – переменные, а url – присваиваемые им значения. */

Чтобы получить результат (точнее его не получить, потому что ассершен не дописан!), нажимаем Select from Current.

Но сейчас строчки кода не могут выдать даже простой курс валют, не говоря уже о проверке на “>”. 
Поэтому разобъем задачу на шаги:

(1) вывести текущий курс для RUB в UAH.

Как понять, что написать дальше? Смотрим в окно слева, то самое, где отражается курс. В колонке “XML mode” читаем: ConversionRateResult, а в колонке “Value”: 0.3485 (у меня он уже обновился).

Допишем строчку:   //ns1:ConversionRateResult
и нажимаем Select from Current. Получаем результат: заветные 0.3485

(2) теперь укажем, что наш ассершен выполняется, если ConversionRateResult возвращает значение больше 0.3400

Изменим только что написанную строчку: //ns1:ConversionRateResult  > 0.3400
и нажимаем Select from Current. Получаем результат: true. Что для нас означает, что фактический результат равен ожидаемому.

Сохраняем ассершен и запускаем тест-кейс. Успешно пройден!

Поздравляю с Вашим первым тест-кейсом! 

 
Напишем второй тест-кейс.
Идея: Время ответа не должно превышать 1000 ms
Ожидаемый результат: время <= 1000 ms

Добавим новый вид ассершена: SLA > Response SLA и укажем 1000.



Запустим тест-кейс.

Примечание: наш первый бессмысленный ассершен удаляем, чтобы не портил общую зеленую картину.


Отлично! Все ассершены зеленые и валидные (VALID). Тест-кейс пройден успешно.

Интересное ограничение: некоторые виды ассершена может быть добавлен только 1 раз рамках 1 тест-кейса.


Теперь представим, что мы ожидаем не просто курс больше 0.3400, у нас есть еще одна граница, которую он не должен превышать. Допустим, эта граница – 0.4000.
Вернемся к предыдущим шагам, чтобы создать ассершен? А вот и нет. Мы “клонируем” уже созданный и изменим условие.
Клонируем: через контекстное меню или F9.
Назовем: Xpath Match<0.4000

Отредактируем, изменив последнюю строчку:
//ns1:ConversionRateResult  < 0.4000

и сохраним.


Это все, конечно, замечательно...Но что, если вам нужно проверить курс доллара и евро? А если всевозможные вариаты валют? Вы точно не захотите ручками выбирать их в форме запроса.


Добро пожаловать в мир Data Driven Testing!

(1) Сначала создаете источник данных
(2) Затем создаете тест, который будет использовать значения из этого источника данных (3) Создаете цикл, который будет по порядку обходить значения из источника. Поехали. (1) Создаем текстовый файл, который будем использовать как источик данных:
EUR, USD
EUR, GBP
SEK, PLN

(2) создаем новый шаг в TestSteps. Add Step > Data Source. С предложенным названием “DataSource” соглашаемся. В открывшемся окне выбираем тип File и указываем путь к файлу с данными.
Примечание: Сейчас самое время внимательнее ознакомиться с содержанием файла:
Первая валюта в строке должна попадать в FromCurrency
Вторая валюта в строке должна попадать в ToCurrency

Для этого представим, что первые валюты в строках – это колонка “FromCurrency”, вторые - “ToCurrency”, а запятая их разделяет.

Теперь объясняем наше желание SOAP UI.
Нажимаем на “+” и добавляем новое property в количестве 2 штук:
FromCurrency
ToCurrency

Запускаем, чтобы получить первые 10 строк из источника данных. 10 – по-умолчанию, чтобы в нижней части окна (DataLog) просмотреть, а получается ли вообще прочитать данные из источника.

Проверяем, что названия валют оказались в правильных колонках, тем более, что у нас их всего 6 штук.

Отлично!
Идем дальше: нужно создать запрос (request), и научить его использовать источник данных. Создаем реквест и называем его “Сonversion From Data Source” 

В появившемя окне наводим курсор примерно на середину поля “FromCurrency” и выбираем в контекстном меню GetData > Step2:DataSource > property “FromCurrency”
Затем повторяем для ToCurrency, выбрав уже  property “ToCurrency”
Можно попробовать запустить, чисто из любопытства. И переходить к последнему шагу.


(3) Создаем новый шаг в TestSteps. Add Step > Data Source Loop. С предложенным названием “DataSource Loop” соглашаемся.


Открываем новосозданный шаг и указываем:
DataSource Step: DataSourceLoop
Target Step: Conversion From Data Source


Поздравляю! Вы почти дошли до финала.
Открываем наш тест-кейс “Test-case1”.


Запускаем.
ФИНАЛ!!! Читаем шаги и считаем количество строк (row). Последних должно быть 3, ведь в тестовом файле 3 строки. Надеюсь, что ваш тест-кейс успешно выполнился и позеленел. :) И каждый чему-то научился. Особенно я, потому что писала этот пост “на ходу”, проходя шаги впервые. Удачи! p.s. Жду комментариев, критики, пожеланий, предложений, угроз...эээ последнее все же лишнее.
p.s.2 картинки будут в лучшем качестве. 

Комментарии? 

blog comments powered by Disqus