Развој вођен понашањем (БДД) Тестирање РЕСТ АПИ-ја са понашањем

Шта је БДД тестирање?

БДД (Бехавиоур-дривен девелопмент) Тестирање је техника агилног развоја софтвера и представља продужетак ТДД-а, тј. Тест Дривен Девелопмент. У БДД-у су тестови написани на природном језику који могу читати и они који нису програмери.

У овом БДД водичу видећемо БДД тестирање РЕСТ АПИ-ја са Бехаве и Питхон

  • Како функционише БДД тестирање?
  • Шта је РЕСТ АПИ тестирање?
  • Шта је понашање?
  • Постављање оквира за понашање понашања на Виндовс-у:
  • Пример ПОСТ сценарија:
  • Кораци имплементације
  • Покретање тестова:
  • Извештаји

Како функционише БДД тестирање?

Сматрајте да вам је додељено да креирате модул за пренос средстава у апликацији за мрежно банкарство.

Постоји више начина да се то тестира

  1. Трансфер средстава треба да се изврши ако на изворном рачуну постоји довољно стања
  2. Пренос средстава треба да се изврши ако су детаљи о одредишном клима уређају тачни
  3. Пренос средстава треба да се изврши ако је тачна лозинка за трансакцију / РСА код / ​​сигурносна потврда идентитета за трансакцију коју је унео корисник
  4. Пренос средстава би се требао извршити чак и ако је то празник
  5. Пренос средстава треба да се изврши на будући датум који одреди власник рачуна

Тестни сценарио постаје сложенији и сложенији, јер узимамо у обзир додатне функције попут преноса износа Кс за интервал И дана / месеци, заустављања преноса по распореду када укупан износ достигне З итд.

Општа тенденција програмера је да касније развијају функције и пишу тест код. Као што је очигледно у горњем случају, развој тест случаја за овај случај је сложен и програмер ће одложити тестирање до издања, након чега ће обавити брзо, али неефикасно тестирање.

Да би се превазишло ово питање (Бехавиоур Дривен Девелопмент) осмишљен је БДД. Олакшава програмеру читав поступак тестирања

У БДД-у, шта год да напишете, мора ићи у кораке Дато-када-тада . Размотримо исти пример горе у БДД-у

С обзиром да је развијен модул за пренос средстава у апликацији нето банкарстваИ приступам му са одговарајућом потврдом идентитета
Када будем пребацио са довољно средстава на свом изворном рачунуИли ћу пребацити на празникИли ћу пребацити на будући датумИ детаљи клима уређаја одредишта су тачниИ лозинка за трансакцију / РСА код / ​​безбедносна потврда идентитета за трансакцију је тачнаИ притисните или кликните на дугме за слање
Тада износ мора бити пребаченА догађај ће бити забележен у датотеку евиденције

Није ли лако писати и читати и разумети? Обухвата све могуће тестове за модул за пренос средстава и може се лако изменити како би се прилагодило више. Такође, више личи на писање документације за модул за пренос средстава.

Шта је РЕСТ АПИ тестирање?

Како је РЕСТ данас постао прилично популаран стил за изградњу АПИ-ја, постало је подједнако важно аутоматизовати РЕСТ АПИ тест случајеве заједно са УИ тест случајевима. Дакле, у основи, ово РЕСТ АПИ тестирање укључује тестирање ЦРУД (Цреате-Реад-Упдате-Делете) акција методама ПОСТ, ГЕТ, ПУТ и ДЕЛЕТЕ.

Шта је понашање?

Бехаве је један од популарних Питхон БДД тест оквира.

Погледајмо како функционише понашање:

Датотеке карактеристика пише ваш пословни аналитичар / спонзор / онај ко садржи сценарије вашег понашања. Има формат на природном језику који описује особину или део особине са репрезентативним примерима очекиваних исхода

Ови кораци сценарија мапирају се са имплементацијама корака написаним на Питхону

И опционално, постоје неке контроле околине (код за покретање пре и после корака, сценарији, функције или цео меч за снимање).

Почнимо са подешавањем нашег оквира за тестирање аутоматизације са Бехаве:

Постављање оквира за понашање понашања на Виндовс-у:

Инсталација:

  • Преузмите и инсталирајте Питхон 3 са хттпс://ввв.питхон.орг/
  • Извршите следећу наредбу на командној линији да бисте се инсталирали понашајући се
  • пип инсталл понашати се
  • ИДЕ: Користио сам ПиЦхарм Цоммунити Едитион хттпс://ввв.јетбраинс.цом/пицхарм/довнлоад

Постављање пројекта:

  • Направите нови пројекат
  • Направите следећу структуру директоријума:

Датотеке са карактеристикама:

Дакле, хајде да направимо нашу датотеку карактеристика Сампле_РЕСТ_АПИ_Тестинг.феатуре која има функцију као Извођење ЦРУД операција на услузи „постови“.

У нашем примеру сам користио хттп://јсонплацехолдер.типицоде.цом/ постс сампле РЕСТ Сервице.

Пример ПОСТ сценарија:

Сценариј: Пример ПОСТ поста -> Овде разматрамо стварање нове ставке поста помоћу услуге „постови“Дато: Поставио сам крајњу тачку АПИ-ја за постове -> Ово је предуслов за тест који поставља УРЛ адресу услуге постоваКада: Подесим тип садржаја ХЕАДЕР парам захтјева као „апплицатион / јсон“.И поставите тело захтеваИ пошаљите ПОСТ ХТТП захтев -> Ово је стварни пробни корак слања захтева за постЗатим: Тада примам важећи ХТПП одговор на одговор 201А тело одговора „ПОСТ“ није празно -> Ово је верификација тела одговора

Слично томе, преостале Сценарије можете написати на следећи начин:

Сампле_РЕСТ_АПИ_Тестинг.феатуре

Карактеристика: Тестирајте ЦРУД методе у узорку РЕСТ АПИ оквира за тестирањеПозадина:С обзиром на то да сам поставио узорак УРЛ-а РЕСТ АПИ-јаСценариј: ПОСТ пример примераС обзиром да сам поставио ПОСТ поруке апи крајњу тачкуКада поставим тип садржаја садржаја ХЕАДЕР парам као „апплицатион / јсон“.И поставите тело захтеваИ пошаљите ПОСТ ХТТП захтевТада примам важећу шифру ХТТП одговора 201А ТЕЛО за одговор „ПОСТ“ није празно.Сценариј: Пример ГЕТ постоваС обзиром да сам поставио ГЕТ постове апи крајње тачке "1"Када поставим тип садржаја садржаја ХЕАДЕР парам као „апплицатион / јсон“.И пошаљите ГЕТ ХТТП захтевТада примам важећу ХТТП шифру одговора 200 за „ГЕТ“.И ТЕЛО одговора „ГЕТ“ није празноСценариј: АЖУРИРАЊЕ примера постоваС обзиром да сам поставио ПУТ постове апи крајње тачке за „1“Када поставим тело захтева за ажурирањеИ пошаљите ПУТ ХТТП захтевТада примам важећи ХТТП код одговора 200 за „ПУТ“.И ТЕЛО одговора „ПУТ“ није празноСценариј: ДЕЛЕТЕ пример постоваС обзиром да сам поставио ДЕЛЕТЕ објаве апи крајњу тачку за „1“Када пошаљем ИЗБРИШИ ХТТП захтевТада примам важећу ХТТП шифру одговора 200 за „ДЕЛЕТЕ“.

Кораци имплементације

Сада, за Кораке карактеристика који се користе у горе наведеним сценаријима, можете да напишете имплементације у Питхон датотекама у директоријум „кораци“.

Бехаве фрамеворк идентификује функцију Степ помоћу декоратера који се подударају са предикатом датотеке карактеристика. На пример, дати предикат у датотеци са карактеристикама Сценарио тражи функцију корака која има украшени декор. Слична подударања се дешавају када и тада. Али у случају „Али“, „И“, функција Корак узима декоратор исто као и претходни корак. На пример, ако 'И' долази за Дано, одговарајући украсник функција корака је @дан.

На пример, када се корак за ПОСТ може применити на следећи начин:

@вхен (у'И постављам тип садржаја садржаја ХЕАДЕР парам као "{хеадер_цонент_типе}" '))Мапирање када, овде је обавештење „апплицатион / јсон“ прослеђено из датотеке функције за „{хеадер_цонент_типе}“. То се назива параметризацијадеф степ_импл (цонтект, хеадер_цонент_типе):Ово је потпис метода имплементације коракарекуест_хеадерс ['Цонтент-Типе'] = хеадер_цонент_типеКорак за имплементацију корака, овде ћете поставити тип садржаја за заглавље захтева

Слично томе, имплементација осталих корака у датотеци корака питхон изгледаће овако:

сампле_степ_имплементатион.пи

фром понашати увоз дато, када, онда, коракзахтеви за увозапи_ендпоинтс = {}рекуест_хеадерс = {}кодови одговора = {}респонсе_тектс = {}рекуест_бодиес = {}апи_урл = Нема@гивен (у'Сам сампле РЕСТ АПИ урл ')деф степ_импл (контекст):глобал апи_урлапи_урл = 'хттп://јсонплацехолдер.типицоде.цом'# СТАРТ ПОШАЉИ Сценариј@гивен (у'И постављам ПОСТ поруке апи крајњу тачку ')деф степ_импл (контекст):апи_ендпоинтс ['ПОСТ_УРЛ'] = апи_урл + '/ постови'принт ('урл:' + апи_ендпоинтс ['ПОСТ_УРЛ'])@вхен (у'И постављам тип садржаја садржаја ХЕАДЕР парам као "{хеадер_цонент_типе}" '))деф степ_импл (цонтект, хеадер_цонент_типе):рекуест_хеадерс ['Цонтент-Типе'] = хеадер_цонент_типе# Као корак можете укључити и „И“ или „Али“ - они се преименују у понашају да би узели име свог претходног корака, па:@вхен (у'Сет боди боди ')деф степ_импл (контекст):рекуест_бодиес ['ПОСТ'] = {"титле": "фоо", "боди": "бар", "усерИд": "1"}# Као корак можете укључити и „И“ или „Али“ - они се преименују у понашају да би узели име свог претходног корака, па:@вхен (у'Сенд ПОСТ ХТТП рекуест ')деф степ_импл (контекст):# слање захтева за добијање и чување одговора као објекта одговорареспонсе = рекуест.пост (урл = апи_ендпоинтс ['ПОСТ_УРЛ'], јсон = рекуест_бодиес ['ПОСТ'], заглавља = рекуест_хеадерс)#респонсе = рекуест.пост (урл = апи_ендпоинтс ['ПОСТ_УРЛ'], заглавља = рекуест_хеадерс) #хттпс: //јсонплацехолдер.типицоде.цом/постс# издвајање текста одговорареспонсе_тектс ['ПОСТ'] = респонсе.тектиспис ("одговор на пост: + респонсе.тект)# вађење одговора статус_цодестатусцоде = респонсе.статус_цодереспонсе_цодес ['ПОСТ'] = статусни код@ тхен (у'примам важећу шифру ХТТП одговора 201 ')деф степ_импл (контекст):принт ('Поштански код за реп;' + стр (кодови одговора ['ПОСТ']))потврди кодове одговора ['ПОСТ'] је 201# ЕНД ПОСТ Сценарио# СТАРТ ГЕТ Сценарио@гивен (у'И Сет ГЕТ постс апи ендпоинт "{ид}" ')деф степ_импл (цонтект, ид):апи_ендпоинтс ['ГЕТ_УРЛ'] = апи_урл + '/ постс /' + идпринт ('урл:' + апи_ендпоинтс ['ГЕТ_УРЛ'])# Као корак можете укључити и „И“ или „Али“ - они се преименују у понашају да би узели име свог претходног корака, па:@вхен (у'Сенд ГЕТ ХТТП рекуест ')деф степ_импл (контекст):# слање захтева за добијање и чување одговора као објекта одговорареспонсе = рекуест.гет (урл = апи_ендпоинтс ['ГЕТ_УРЛ'], заглавља = рекуест_хеадерс) #хттпс: //јсонплацехолдер.типицоде.цом/постс# издвајање текста одговорареспонсе_тектс ['ГЕТ'] = респонсе.тект# вађење одговора статус_цодестатусцоде = респонсе.статус_цодереспонсе_цодес ['ГЕТ'] = статусни код@ тхен (у'примам важећи ХТТП код одговора 200 за „{рекуест_наме}“ ')деф степ_импл (контекст, име_захтева):принт ('Набавите код за реп за' + име_захтева + ':' + стр (кодови одговора [име_захтева)))потврдити кодове одговора [име_захтева] је 200@ тхен (у'Респонсе ТЕЛО "{рекуест_наме}" није празно ')деф степ_импл (контекст, име_захтева):принт ('име_захтева:' + име_захтева)испис (тект_тектс)потврдити текст_одговора [име_захтева] није Ниједан# ЕНД ГЕТ Сценарио#СТАРТ ПУТ / УПДАТЕ@гивен (у'И постављам ПУТ постове апи крајње тачке за „{ид}“ ')деф степ_импл (цонтект, ид):апи_ендпоинтс ['ПУТ_УРЛ'] = апи_урл + '/ постс /' + идпринт ('урл:' + апи_ендпоинтс ['ПУТ_УРЛ'])@вхен (у'Постављам тело захтева за ажурирање ')деф степ_импл (контекст):рекуест_бодиес ['ПУТ'] = {"титле": "фоо", "боди": "бар", "усерИд": "1", "ид": "1"}@вхен (у'Сенд ПУТ ХТТП рекуест ')деф степ_импл (контекст):# слање захтева за пријем и чување одговора као објекта одговора # респонсе = захтеве.пост (урл = апи_ендпоинтс ['ПОСТ_УРЛ'], хеадерс = рекуест_хеадерс) #хттпс: //јсонплацехолдер.типицоде.цом/постсреспонсе = рекуест.пут (урл = апи_ендпоинтс ['ПУТ_УРЛ'], јсон = рекуест_бодиес ['ПУТ'], заглавља = рекуест_хеадерс)# издвајање текста одговорареспонсе_тектс ['ПУТ'] = респонсе.тектиспис ("упдате респонсе: + респонсе.тект)# вађење одговора статус_цодестатусцоде = респонсе.статус_цодереспонсе_цодес ['ПУТ'] = статусни код#ЕНД СТАВИТЕ / АЖУРИРАЈТЕ#СТАРТ ДЕЛЕТЕ@гивен (у'И Сет тхе ДЕЛЕТЕ постс апи ендпоинт фор "{ид}" ')деф степ_импл (цонтект, ид):апи_ендпоинтс ['ДЕЛЕТЕ_УРЛ'] = апи_урл + '/ постс /' + идпринт ('урл:' + апи_ендпоинтс ['ДЕЛЕТЕ_УРЛ'])@вхен (у'И Шаљем ИЗбриШИ ХТТП захтев ')деф степ_импл (контекст):# слање захтева за добијање и чување одговора као објекта одговораодговор = захтеви.делете (урл = апи_ендпоинтс ['ДЕЛЕТЕ_УРЛ'])# респонсе = рекуест.пост (урл = апи_ендпоинтс ['ПОСТ_УРЛ'], заглавља = рекуест_хеадерс) #хттпс: //јсонплацехолдер.типицоде.цом/постс# издвајање текста одговорареспонсе_тектс ['ДЕЛЕТЕ'] = респонсе.тектиспис ("ДЕЛЕТЕ респонсе: + респонсе.тект)# вађење одговора статус_цодестатусцоде = респонсе.статус_цодереспонсе_цодес ['ДЕЛЕТЕ'] = статусни код#ЕНД ДЕЛЕТЕ

Покретање тестова:

Сада смо завршили са нашим делом за развој скрипти за тестирање, па покренимо наше тестове:

Извршите следећу команду у командној линији да бисте покренули нашу датотеку карактеристика

Ц: \ Програмс \ Питхон \ Питхон37> понашајте се -ф лепо Ц: \ <ваша путања до пројекта> \ феатурес \ феатуре_филес_фолдер \ Сампле_РЕСТ_АПИ_Тестинг.феатуре

Ово ће приказати резултате извршавања теста на следећи начин:

Приказ извештаја на конзоли

Да видимо још једну цоол ствар овде.

Како корисници увек више воле да резултате теста виде у читљивијем и презентабилнијем облику, хајде да уз помоћ Аллуре имамо извештаје у ХТМЛ формату.

Извештаји

Прво морате да инсталирате програм за обликовање Аллуре Бехаве [хттпс://доцс.камета.ио/аллуре/]:

А сада извршите следећу команду:

За извештаје

> понашати се -ф јсон -о <пут-до-вашег-извештаја-директоријума> Пример_РЕСТ_АПИ_Тестинг.феатуре

<аллуре-бин путања до мапе >> аллуре серве <патх-то-иоур-репорт-фолдер>

Ово ће генерисати ваш извештај о резултатима теста у презентативном и информативном формату попут овог:

Извештај о тестирању у ХТМЛ формату

Извештај о испитивању који приказује појединачне резултате сценарија

Резиме:

  • БДД је развој вођен понашањем. То је једна од техника агилног развоја софтвера.
  • РЕСТ је постао прилично популаран стил за израду АПИ-ја у данашње време, постало је подједнако важно аутоматизовати РЕСТ АПИ тест случајеве заједно са УИ тест случајевима.
  • БДД има формат природног језика који описује особину или део функције са репрезентативним примерима очекиваних исхода
  • Бехаве фрамеворк идентификује функцију Степ помоћу декоратера који се подударају са предикатом датотеке карактеристика

Занимљиви Чланци...