Отваря се в нов раздел

Test Automation за API с Postman, Newman и Jenkins

Какво е Test Automation?

Тестова автоматизация е използването на софтуер за контрол на изпълнението на тестове и сравняване на реалните резултати с очакваните резултати.

За да обясним как се постига пълна автоматизация на тестването на API, се нуждаем от инструменти като Postman, Newman и Jenkins.

Postman

Първата програма, която ще използваме, за да направим автоматизация на тест, е Postman. Ето нещо като дефиниция за Postman:

Главната цел на Postman е да помогне за бързото разработване на API, като позволява лесно създаване на заявки и изграждане на работни потоци (workflows), използвайки колекции.

Заобикаляща среда (Environment)

Преди да започнем да създаваме тестове, първо трябва да установим средата за сървъра, в която ще изпълняваме тестовете. За да направим това, отиваме на Manage environments → Add. След това започваме да добавяме двойките ключ-стойност за променливите, където ключът е името на променливата. Тези променливи ще бъдат използвани многократно в заявките.

За пример в тази статия ще изберем следното API: swapi.co/api и така ще използваме променлива, която ще наречем host:

test automation environment

Това API не се нуждае от удостоверяване на потребител, за да бъде използвано. Ако имаме нужда от такова удостоверяване, можем да запазим в environment променливите параметрите id и password.

Колекции

Postman работи с колекции, в които се съхраняват заявките, така че първото нещо, което трябва да направим е да създадем Колекция, на която ще дадем Име (задължително) и Описание.

След това можем да създадем първата си заявка, която ще изглежда подобно на тази:

В този пример се опитваме да получим списък на космическите кораби, така че на снимката на екрана може да се види:

  • Името
  • Методът: Може да е GET, POST, PUT, DELETE…
  • API: Пълният път би трябвало да е: swapi.co/api/starships, но ние съхранихме swapi.co/api в променливата host, така че просто може да напишем {{host}}.
  • Environment.

Втората част от една заявка е секцията Тестове, където задаваме твърдения (asserts), за да проверим дали информацията, върната от сървъра, е тази, която очакваме и също така да създадем нова среда (environment) и глобални променливи за съхраняване на стойностите. Например:

В този тест задаваме твърдение (assert), с което проверяваме Статус кода на заявката дали e ОК (200), и един цикъл, в който търсим специфична информация, която ще запомним в environment променлива. От дясната страна на екрана имаме серия от парченца, откъси (snippets), които ни помагат да създадем тестовете.

Следващата стъпка ще бъде да запомним заявката - чрез клик на “Save” и избиране къде да я запазим. Можем да изберем да я запомним директно в Колекцията.

А може да я запомним в Папка. Записването на заявките в папки е полезно, ако искаме да отделим изпълнението на някои заявки от останалите:

Изпълнение на Тестовете

За да изпълним заявките, можем да кликнем на “Send”, но не забравяйте преди това да запазите заявките! След това можем да проверим в Body полученото в JSON формат с пълната информация за космическите кораби и резултатите от тестовете.

test automation results

В нашия случай един тест е пропаднал, защото ние индикирахме, че очакваме повече от 100 космически кораби и ако погледнем в Body, ще видим, че са по-малко.

Когато имаме всички заявки и техните тестове, ще искаме да ги изпълним. За да направим това, ще трябва да отворим Collection Runner:

run test automation

За да изпълним тестовете, е необходимо да следваме следните стъпки в указания ред:

  • Да изберем дали да изпълним цялата колекция или само някоя от нейните папки.
  • Да изберем средата (environment), където съхраняваме променливите.
  • Да зададем колко пъти (итерации) да бъдат изпълнени тестовете.
  • Стартиране на тестовете.

Сега можем да видим резултатите от теста от дясната страна на екрана. Най-отгоре е информацията за целия процес - колко тестове са преминали, колко не са, и колко време е било необходимо за изпълнението. Под тях можем да видим информация за всяка направена заявка.

Newman

Postman има Command Line версия, която се нарича Newman​

Newman има много възможности, но ние ще се спрем само на една от тях: Позволява ни да интегрираме Postman колекции в системи за изграждане като Jenkins.

Инсталацията на Newman е сравнително лесна:

npm install -g newman

Но преди да започнем изпълнението на Колекциите, първо е необходимо да направиме кспорт от Postman. Трябва да направим експорт на средата (environment):

newman test automation start

И на Колекцията:

Тези действия съхраняват един json за средата и още един за колекцията, в папка. Тази папка ще използваме в терминал при изпълнение на Newman.

Сега можем да изпълним цялата Колекция:

newman -c collection.json -e environment.json

Или само една папка:

newman -c collection.json -e environment.json -f Planets

И като изход можем да видим почти същото, което получихме като резултат от Postman: Изпълнението на всяка заявка и пълната информация от тестовете, които са преминали и на тези, които не са:

[tcb-script type=text/javascript src=https://asciinema.org/a/iLzj3SNz7F5DNz0ZbMa6EG1Rf.js id=asciicast-iLzj3SNz7F5DNz0ZbMa6EG1Rf async=][/tcb-script]

Jenkins

Финалната стъпка, за да приключим с aвтоматизацията на тестовете за API, е да инсталираме Newman на същия сървър, на който имаме Jenkins и да инсталираме някои плъгини:

Log Parser Plugin

Parsing Rules File: File with the rules and with the following content:

error /✗/

Email Extension Plugin

След това е необходимо да създадем нов job със следната информация:

Project name: Star Wars API (например)

Build → Add build step → Execute Shell и пишем на командния ред изпълнението на Newman така, както написахме локално:

newman -c path/collection.json -e path/environment.json -f Starships

Post-build Actions → Add post-build action → Console output (build log) parsing

След това в Select Parsing Rules избираме “Error parsing” (Описание)

Post-build Actions → Add post-build action → Editable Email Notification

И попълваме следната информация:

Advanced Settings → Add Trigger → Script – After Build

//да се изпрати имейл, само ако ✗ се среща в генерираните логове build.logFile.text.readLines().any { it =~ /.✗./ }

Save и Build Now…

Изходът в конзолата ще покаже същия резултат, като изпълнението на Newman локално + някои допълнителни редове, които се виждат, когато Jenkins прави проверките.

test automation console results

В случая, понеже при изпълнението на папката Starships има тест, който няма да премине, ще бъде изпратен имейл като този по-долу:

test automation error

Тук виждаме, че в Subject има нещо, което е било грешно, а в Body, че изграждането е било успешно, както и връзка към изхода на конзолата за проверка на резултата. След като веднъж сме в конзолата, може да навигираме до “Parsed Console Output”, за да видим подчертаните в червено тестове, които не са преминали.

Постигането на пълна автоматизация на тестовете на API е лесно, ако следвате стъпките в тази статия, необходимо е само да настроите три програми и да не се тревожите повече. Jenkins ще изпрати имейл, ако нещо се обърка.

Автор: Милена Бакалова

Secret Link