РЕСТ клијентско тестирање помоћу алата Рестито

Преглед садржаја:

Anonim

Шта је РЕСТ?

РЕСТ је скраћеница од „Репресентатионал Стате Трансфер“, што је нови начин комуникације између било која два система у датом тренутку. Један од система назива се „РЕСТ клијент“, а други се зове „РЕСТ сервер“.

У овом РЕСТ упутству ћете научити:

  • Шта је РЕСТ?
  • Шта је РЕСТ клијент?
  • Шта је РЕСТ сервер?
  • Шта је Рестито?
  • Како тестирати РЕСТ клијента користећи Рестито?
  • Предности употребе Рестито Фрамеворк-а за тестирање клијента РЕСТ
  • Мане употребе Рестито Фрамеворк-а за тестирање клијента РЕСТ

Пре него што научимо о Рестито Фрамеворк-у за РЕСТ тестирање клијента, прво научимо неколико основа.

Шта је РЕСТ клијент?

РЕСТ клијент је метода или алат за позивање АПИ-ја услуге РЕСТ који је изложен за комуникацију било којим системом или добављачем услуга. На пример: ако је АПИ изложен да би од Гоогле-а добивао информације о саобраћају у реалном времену о рути, софтвер / алат који позива Гоогле АПИ за саобраћај назива се РЕСТ клијент.

Шта је РЕСТ сервер?

То је метода или АПИ који је изложен комуникацији било ког система или добављача услуга. На пример, Гоогле излаже АПИ за добијање информација о саобраћају у реалном времену на датој рути.

Овде Гоогле сервер треба да ради и да слуша све захтеве за изложени АПИ различитих клијената.

Пример:

Време је да се из горенаведених дефиниција успостави комплетан сценарио од краја до краја.

Размотримо апликације за резервацију таксија попут Убера јер компанији требају информације у реалном времену о стању у саобраћају око рута на којима се налази одређено возило.

Остали клијент:

Овде је клијент Убер мобилна апликација на коју се возач пријавио. Ова апликација шаље захтев РЕСТ АПИ-ју изложеном на Гоогле мапама за добијање података у реалном времену. На пример, ХТТП ГЕТ захтев.

Рест Сервер:

У овом примеру, Гоогле је добављач услуга, а АПИ Гоогле мапс одговара потребним детаљима на захтев апликације Убер.

И клијент и сервер су подједнако важни у РЕСТ комуникацији.

Овде смо применили примере за аутоматско тестирање само РЕСТ клијента. За тестирање РЕСТ сервера погледајте хттпс://ввв.гуру99.цом/топ-6-апи-тестинг-тоол.хтмл.

Шта је Рестито?

Рестито је оквир који је развио Мкотсур. То је лагана апликација која ће вам помоћи да извршите било коју врсту ХТТП захтева. Рестито можете да користите за тестирање РЕСТ АПИ-ја и за претраживање проблема у вашој апликацији или мрежи.

Како тестирати РЕСТ клијента користећи Рестито?

Подијелимо вјежбу у сљедећа 4 корака:

  1. Направите ХТТП клијент и метод за слање ХТТП ГЕТ захтева на било коју крајњу тачку сервера. За сада узмите у обзир крајњу тачку хттп: // лоцалхост: 9092 / гетевентс.
  1. Покрените Рестито сервер да преслуша и ухвати захтеве послате крајњој тачки 'гетевентс' у лоцалхост хттп: // лоцалхост: 9092 / гетевентс.
  1. Направите тест класу да бисте тестирали горе наведеног клијента. Позовите методу 'сендГЕТРекуест' ХТТП клијента да бисте покренули ГЕТ захтев за АПИ 'гетевентс'.
  1. Потврдите ХТТП ГЕТ позив користећи Рестито фрамеворк.

Заронимо дубоко у сваки од горе наведених корака.

Корак 1) Креирајте ХТТП клијент и метод за слање ХТТП ГЕТ захтева на било коју крајњу тачку сервера.

========== ЈАВА ЦОДЕ започиње ===========

пакет цом.цхамлабс.рестфулсервицес.цлиент;импорт јава.утил.ХасхМап;импорт јава.утил.Мап;импорт орг.апацхе.хттп.цлиент.ХттпЦлиент;импорт орг.апацхе.хттп.цлиент.метходс.ХттпГет;импорт орг.апацхе.хттп.цлиент.метходс.ХттпПост;импорт орг.апацхе.хттп.ентити.СтрингЕнтити;импорт орг.апацхе.хттп.импл.цлиент.ХттпЦлиентБуилдер;импорт орг.јсон.ЈСОНОбјецт;/ *** Ова класа креира ХТТП клијента и има метод за слање ХТТП ГЕТ захтева:* сендГЕТРекуест (…)* /јавни разред РестЦлиент {/ *** Конструктор за класу РестЦлиент* /јавни РестЦлиент () {Систем.оут.принтлн ("Креирање конструктора РестЦлиент");}/ *** Метода за слање ГЕТ захтева на хттп: // лоцалхост: <<порт>> / гетевентс* @парам порт* @ретурн труе ако је ГЕТ захтев успешно послат. Лажно, иначе.* /јавни статички логички сендГЕТРекуест (инт порт) {покушати {ХттпЦлиент клијент = ХттпЦлиентБуилдер.цреате (). Буилд ();ХттпГет гетРекуест = нови ХттпГет ("хттп: // лоцалхост: + порт + "/ гетевентс");// ХттпРеспонсе одговор = цлиент.екецуте (захтев);цлиент.екецуте (гетРекуест);Систем.оут.принтлн („ХТТП захтев је успешно послан.“+ "Враћање тачно");ретурн труе;}цатцх (изузетак е) {е.принтСтацкТраце ();}Систем.оут.принтлн ("Неки изузетак се догодио током креирања ХТТП клијента."+ "Враћање нетачно");ретурн фалсе;}}

========== ЈАВА ЦОДЕ Завршава ===========

Корак 2) Покрените Рестито сервер да преслуша и ухвати захтеве послате крајњој тачки 'гетевентс' у лоцалхост хттп: // лоцалхост: 9092 / гетевентс.

========== ЈАВА ЦОДЕ започиње ===========

пакет цом.цхамлабс.рестфултестинг.утил;импорт статиц цом.кебиалабс.рестито.буилдер.стуб.СтубХттп.вхенХттп;увоз статичких цом.кебиалабс.рестито.семантицс.Ацтион.статус;импорт статиц цом.кебиалабс.рестито.семантицс.Цондитион.гет;импорт статиц цом.кебиалабс.рестито.семантицс.Цондитион.пост;импорт јава.утил.Лист;импорт орг.глассфисх.гриззли.хттп.утил.ХттпСтатус;импорт цом.кебиалабс.рестито.семантицс.Цалл;импорт цом.кебиалабс.рестито.сервер.СтубСервер;/ *** Ова класа услужних програма садржи неколико корисних метода попут:* рестартРеститоСерверФорГЕТРекуестс (…)* рестартРеститоСерверФорПОСТРекуестс (…)* ваитАндГетЦаллЛист (...)** @аутор цхам6* @емаил: паперпланес.цхандра@гмаил.цом* @форк: хттпс://гитхуб.цом/цхам6/рестфултестинг.гит** /јавна класа ТестУтил {/ *** Услужни метод за покретање рестито стуб сервера за прихватање ГЕТ захтева* @парам сервер* @парам порт* @парам статус* /јавно статично воид рестартРеститоСерверФорГЕТРекуестс (СтубСервер сервер, инт порт, ХттпСтатус статус){// Убити рестито сервериф (сервер! = нулл) {сервер.стоп ();}// Покрени и конфигуриши новију инстанцу стуб серверасервер = нови СтубСервер (порт) .рун ();вхенХттп (сервер) .матцх (гет ("/ гетевентс")). тхен (статус (статус));}/ *** Услужни метод за покретање рестито стуб сервера за прихватање ПОСТ захтева* @парам сервер* @парам порт* @парам статус* /јавна статичка воид рестартРеститоСерверФорПОСТРекуестс (СтубСервер сервер, инт порт, ХттпСтатус статус){// Убити рестито сервериф (сервер! = нулл) {сервер.стоп ();}// Покрени и конфигуриши новију инстанцу стуб серверасервер = нови СтубСервер (порт) .рун ();вхенХттп (сервер) .матцх (пост ("/ постевентс")). тхен (статус (статус));}/ *** За дати рестито стуб сервер, петљајте за задату количину секунди и* разбијање и враћање листе позива са сервера.** @парам сервер* @парам ваитТимеИнСецондс* @ повратак* @тхровс ИнтерруптедЕкцептион* /јавна статичка листа <Цалл> ваитАндГетЦаллЛист (СтубСервер сервер, инт ваитТимеИнСецондс)баца ИнтерруптедЕкцептион{инт тимеоутЦоунт = 0;Листа <Цалл> цаллЛист = сервер.гетЦаллс ();вхиле (цаллЛист.исЕмпти ()) {Тхреад.слееп (1000);тимеоутЦоунт ++;иф (тимеоутЦоунт> = ваитТимеИнСецондс) {пауза;}цаллЛист = сервер.гетЦаллс ();}// Сачекајте 2 секунде да се сви позиви ставе на листу позива како би се елиминисала нејасноће.Тхреад.слееп (2000);вратити сервер.гетЦаллс ();}}

========== ЈАВА ЦОДЕ Завршава ===========

Корак 3) Направите тест класу за тестирање горе наведеног клијента. Позовите методу ХТТП клијента сендГЕТРекуест да бисте покренули ГЕТ захтев за АПИ 'гетевентс'.

========== ЈАВА ЦОДЕ започиње ===========

импорт јунит.фрамеворк.ТестЦасе;импорт цом.цхамлабс.рестфулсервицес.цлиент.РестЦлиент;импорт цом.цхамлабс.рестфултестинг.утил.ТестУтил;импорт цом.кебиалабс.рестито.семантицс.Цалл;импорт цом.кебиалабс.рестито.сервер.СтубСервер;увоз статичког орг.глассфисх.гриззли.хттп.утил.ХттпСтатус.АЦЦЕПТЕД_202;импорт орг.јсон.ЈСОНОбјецт;импорт јава.утил.Лист;импорт јава.утил.Мап;/ *** Ова класа садржи неколико тестних тестова за потврђивање операција РестЦлиент као што су:* послати захтев(… )* сендРекуестВитхЦустомХеадерс (…)* сендПОСТРекуестВитхЈСОНБоди (…)** /јавна класа РестЦлиентТестер проширује ТестЦасе {приватни статички коначни Интегер ПОРТ = 9098;приватни статички коначни цео број ПОРТ2 = 9099;приватни статички коначни цео број ПОРТ3 = 9097;јавни РестЦлиентТестер () {Систем.оут.принтлн („Покретање теста РестЦлиентТестер“);}/ *** Јунит тест за потврђивање ГЕТ захтева од РестЦлиент-а* Кораци:* 1) Направите стуб сервер користећи Рестито фрамеворк и конфигуришите га да преслушава на датом порту* 2) Позовите методу сендГЕТРекуест (…) РестЦлиент-а* 3) Рестито снима одговарајуће послате ГЕТ захтеве, ако их има.* 4) Потврдите да ли је Рестито забележио било који ГЕТ захтев на датој крајњој тачки* Очекивано понашање:*> Рестито је требало да забележи ГЕТ захтев и требало је да забележи само један ГЕТ захтев.* Коначно:*> Зауставите стуб сервер који је почео да користи рестито.* /јавни воид тестГЕТРекуестФромЦлиент () {СтубСервер сервер = нулл;покушати {// Ово ће покренути стуб сервер на 'ПОРТ' и одговорити ХТТП 202 'АЦЦЕПТЕД_202'ТестУтил.рестартРеститоСерверФорГЕТРекуестс (сервер, ПОРТ, АЦЦЕПТЕД_202);РестЦлиент.сендГЕТРекуест (ПОРТ);Листа <Цалл> цаллЛист = ТестУтил.ваитАндГетЦаллЛист (сервер, 30);ассертТруе ("ГЕТ захтев није примљен од РестЦлиент-а. Тест није успео.",(цаллЛист! = нулл) && (цаллЛист.сизе () == 1));}цатцх (изузетак е) {е.принтСтацкТраце ();фаил ("Тест није успео због изузетка: + е);}коначно {иф (сервер! = нулл) {сервер.стоп ();}}}

========== ЈАВА ЦОДЕ Завршава ===========

Корак 4) Како потврдити ГЕТ захтев помоћу заглавља и ПОСТ захтев помоћу тела Рестито фрамеворк.

========== ЈАВА ЦОДЕ започиње ===========

/ *** Јунит тест за потврду ГЕТ захтева са заглављима из РестЦлиент-а* Кораци:* 1) Направите стуб сервер користећи Рестито фрамеворк и конфигуришите га да преслушава на датом порту* 2) Позовите методу сендГЕТРекуестВитхЦустомХеадерс (…) РестЦлиент-а* 3) Рестито снима одговарајуће послате ГЕТ захтеве, ако их има.* 4) Потврдите да ли је Рестито забележио било који ГЕТ захтев на датој крајњој тачки* Очекивано понашање:*> Рестито је требало да ухвати ГЕТ захтев, а требало је да ухвати само један ГЕТ захтев.*> Набавите заглавља снимљеног ГЕТ захтева* и уверите се да се заглавља подударају са онима која су конфигурисана.* Коначно:*> Зауставите стуб сервер који је почео да користи рестито.* /јавни воид тестГЕТРекуестВитхХеадерсФромЦлиент () {СтубСервер сервер = нулл;покушати {// Ово ће покренути стуб сервер на 'ПОРТ' и одговорити ХТТП 202 'АЦЦЕПТЕД_202'ТестУтил.рестартРеститоСерверФорГЕТРекуестс (сервер, ПОРТ2, АЦЦЕПТЕД_202);РестЦлиент.сендГЕТРекуестВитхЦустомХеадерс (ПОРТ2);Листа <Цалл> цаллЛист = ТестУтил.ваитАндГетЦаллЛист (сервер, 30);ассертТруе ("ГЕТ захтев није примљен од РестЦлиент-а. Тест није успео.",(цаллЛист! = нулл) && (цаллЛист.сизе () == 1));// Потврдите заглавља ГЕТ захтева од РЕСТ клијентаМап <Стринг, Лист <Стринг>> хеадерсФромРекуест = цаллЛист.гет (0) .гетХеадерс ();ассертТруе („ГЕТ захтев садржи заглавље Аццепт и његову вредност“,хеадерсФромРекуест.гет ("Прихвати"). садржи ("текст / хтмл"));ассертТруе („ГЕТ захтев садржи ауторизацију заглавља и његову вредност“,хеадерсФромРекуест.гет ("Ауторизација"). садржи ("Носач 1234567890квертиуиоп"));ассертТруе („ГЕТ захтев садржи заглавље Цацхе-Цонтрол и његову вредност“,хеадерсФромРекуест.гет ("Цацхе-Цонтрол"). цонтаинс ("но-цацхе"));ассертТруе ("ГЕТ захтев садржи заглавље Цоннецтион и његову вредност",хеадерсФромРекуест.гет ("Веза"). садржи ("одржавај у животу"));ассертТруе („ГЕТ захтев садржи заглавље Цонтент-Типе и његову вредност“,хеадерсФромРекуест.гет ("Цонтент-Типе"). цонтаинс ("апплицатион / јсон"));}цатцх (изузетак е) {е.принтСтацкТраце ();фаил ("Тест није успео због изузетка: + е);}коначно {иф (сервер! = нулл) {сервер.стоп ();}}}
/ *** Јунит тест за потврду ПОСТ захтева с телом и заглављима из РестЦлиента* Кораци:* 1) Направите стуб сервер користећи Рестито фрамеворк и конфигуришите га да преслушава на датом порту* 2) Позовите методу сендПОСТРекуестВитхЈСОНБоди (…) РестЦлиент-а* 3) Рестито снима одговарајуће послане ПОСТ захтеве, ако их има.* 4) Потврдите да ли је Рестито забележио било који ПОСТ захтев на датој крајњој тачки* Очекивано понашање:*> Рестито је требало да ухвати ПОСТ захтев и требало је да ухвати само један ПОСТ захтев.*> Набавите тело снимљеног ПОСТ захтева и потврдите ЈСОН вредности* Коначно:*> Зауставите стуб сервер који је почео да користи рестито.* /јавни воид тестПОСТРекуестВитхЈСОНБоди () {СтубСервер сервер = нулл;покушати {// Ово ће покренути стуб сервер на 'ПОРТ' и одговорити ХТТП 202 'АЦЦЕПТЕД_202'ТестУтил.рестартРеститоСерверФорПОСТРекуестс (сервер, ПОРТ3, АЦЦЕПТЕД_202);РестЦлиент.сендПОСТРекуестВитхЈСОНБоди (ПОРТ3);Листа <Цалл> цаллЛист = ТестУтил.ваитАндГетЦаллЛист (сервер, 30);ассертТруе ("ПОСТ захтев није примљен од РестЦлиент-а. Тест није успео.",(цаллЛист! = нулл) && (цаллЛист.сизе () == 1));// Потврдите заглавља ГЕТ захтева од РЕСТ клијентаСтринг рекуестБоди = цаллЛист.гет (0) .гетПостБоди ();ЈСОНОбјецт постРекуестЈСОН = нови ЈСОНОбјецт (рекуестБоди);ассертТруе ("ВремеУпдатед у јсон је нетачно",постРекуестЈСОН.гет ("тимеУпдатед"). тоСтринг (). екуалсИгнореЦасе ("1535703838478"));ассертТруе ("Аццесс_токен у јсон-у је нетачан",постРекуестЈСОН.гет ("аццесс_токен"). тоСтринг ().екуалсИгнореЦасе ("абф8714д-73а3-42аб-9дф8-д13фцб92а1д8"));ассертТруе ("Освежавање_токена у јсон-у је нетачно",постРекуестЈСОН.гет ("рефресх_токен"). тоСтринг ().екуалсИгнореЦасе ("д5а5аб08-ц200-421д-ад46-2е89ц2ф566ф5"));ассертТруе ("Тип токена у јсон-у је нетачан",постРекуестЈСОН.гет ("тип_токена"). тоСтринг (). екуалсИгнореЦасе ("носилац"));ассертТруе ("екпирес_ин у јсон-у је нетачан",постРекуестЈСОН.гет ("екпирес_ин"). тоСтринг (). екуалсИгнореЦасе ("1024"));ассертТруе ("Опсег у јсон-у је нетачан",постРекуестЈСОН.гет ("опсег"). тоСтринг (). екуалсИгнореЦасе (""));}цатцх (изузетак е) {е.принтСтацкТраце ();фаил ("Тест није успео због изузетка: + е);}коначно {иф (сервер! = нулл) {сервер.стоп ();}}}}

========== ЈАВА ЦОДЕ Завршава ===========

Предности употребе Рестито Фрамеворк-а за тестирање клијента РЕСТ

Ево предности / предности Рестито Фрамеворк-а за тестирање клијената РеСТ

  • За тестирање РЕСТ клијента није нам потребан стварни РЕСТ сервер.
  • Рестито пружа снажне и разноврсне услужне програме и методе за исмевање различитог понашања сервера. На пример: Да бисте тестирали понашање РЕСТ клијента када Сервер одговори ХТТП 404 грешком или ХТТП 503 грешком.
  • Рестито сервери се могу подесити за неколико милисекунди и могу се прекинути након завршетка тестова.
  • Рестито подржава све врсте садржаја ХТТП метода као што су компресовани, некомпресовани, обједињени, апликација / текст, апликација / ЈСОН итд.

Мане употребе Рестито Фрамеворк-а за тестирање клијента РЕСТ

Ево слабости / недостатака Рестито Фрамеворк-а за тестирање клијената РеСТ

  • Извор РЕСТ клијента треба подесити да би се „лоцалхост“ сматрао серверском машином.
  • Отварање сервера у било којем порту може доћи до сукоба ако користимо неки често коришћени порт попут '8080' или '9443' итд.
  • Саветује се коришћење прикључака попут 9092 или 9099, које други алати често не користе.

Резиме:

  • РЕСТ је скраћеница од „Репресентатионал Стате Трансфер“, што је нови стандардни начин комуникације између било која два система у датом тренутку.
  • РЕСТ клијент је метода или алат за позивање АПИ-ја услуге РЕСТ који је изложен комуникацији било ког система или добављача услуга.
  • У РестСервер методи или АПИ-ју који је изложен за комуникацију било којим системом или добављачем услуга.
  • Рестито је лагана апликација која вам помаже да извршите било коју врсту ХТТП захтева
  • Направите ХТТП клијент и метод за слање ХТТП ГЕТ захтева на било коју крајњу тачку сервера
  • Покрените Рестито сервер да преслуша и ухвати захтеве послате крајњој тачки „гетевентс“.
  • Покрените Рестито сервер да преслуша и ухвати захтеве послате крајњој тачки 'гетевентс' у лоцалхост-у
  • Овде смо применили примере за аутоматско тестирање само РЕСТ клијента.
  • За тестирање РЕСТ клијента није нам потребан стварни РЕСТ сервер.
  • Извор РЕСТ клијента треба подесити да би се „лоцалхост“ сматрао серверском машином.

Овај чланак је написао Цхандрасекхар Муттинени