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 ще изпрати имейл, ако нещо се обърка.

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