Käitumispõhine arendus (BDD) REST API testimine käitumisega

Mis on BDD testimine?

BDD (käitumispõhine arendus) testimine on tarkvara kiire arendamise tehnika ja see on TDD ehk testpõhise arenduse laiendus. BDD-s on testjuhtumid kirjutatud loomulikus keeles, mida saavad lugeda ka mitte-programmeerijad.

Selles BDD õpetuses näeme REST API BDD testimist käitumise ja Pythoniga

  • Kuidas BDD testimine töötab?
  • Mis on REST API testimine?
  • Mis on käitumine?
  • Käitumise testiraamistiku seadistamine Windowsis:
  • POST-stsenaariumi näide:
  • Sammude rakendamine
  • Testide läbiviimine:
  • Aruanded

Kuidas BDD testimine töötab?

Mõelge, et teil on määratud Interneti-panga rakenduses rahaülekande moodul looma.

Selle testimiseks on mitu võimalust

  1. Rahaülekanne peaks toimuma, kui lähtekontol on piisavalt saldot
  2. Rahaülekanne peaks toimuma siis, kui sihtkoha kliimaseadme üksikasjad on õiged
  3. Rahaülekanne peaks toimuma siis, kui kasutaja sisestatud tehingu tehingu parool / rsa kood / turvaautentika on õige
  4. Rahaülekanne peaks toimuma ka siis, kui tegemist on pangapuhkusega
  5. Rahaülekanne peaks toimuma kontoomaniku määratud tulevikus

Teststsenaarium muutub keerukamaks ja keerukamaks, kuna kaalume täiendavaid funktsioone, nagu ülekande summa X intervalliga Y päeva / kuud, peatage ajakava ülekandmine, kui kogusumma jõuab Z-ni ja nii edasi

Arendajate üldine suundumus on funktsioonide väljatöötamine ja testkoodi kirjutamine hiljem. Nagu nähtub ülaltoodud juhtumist, on antud juhtumi testjuhtumite väljatöötamine keeruline ja arendaja lükkab testimise edasi kuni vabastamiseni, seejärel teeb ta kiire, kuid ebaefektiivse testimise.

Selle probleemi ületamiseks (käitumispõhine areng) loodi BDD. See muudab kogu testimisprotsessi arendaja jaoks lihtsaks

BDD-s peab ükskõik, mida kirjutate, minema antud-millal-siis- sammudesse. Vaatleme sama ülaltoodud näidet BDD-s

Arvestades, et netopanga rakenduses on välja töötatud rahaülekande moodulJa ma kasutan seda korraliku autentimisega
Kui kannan oma lähtekontol piisavalt saldogaVõi kannan üle riigipühalVõi kannan üle tulevasel kuupäevalJa sihtkoha kliimaseadme üksikasjad on õigedJa tehingu parool / rsa kood / turva autentimine on õigeJa vajutage või klõpsake nuppu Saada
Siis tuleb summa üle kandaJa sündmus logitakse logifaili

Kas pole lihtne kirjutada, lugeda ja aru saada? See hõlmab kõiki võimalikke rahaülekande mooduli testjuhtumeid ja seda saab hõlpsasti muuta, et mahutada rohkem. Samuti sarnaneb see pigem rahaülekande mooduli dokumentatsiooni kirjutamisega.

Mis on REST API testimine?

Kuna REST on tänapäeval API-de loomisel üsna populaarseks stiiliks muutunud, on sama oluliseks muutunud REST API testjuhtumite automatiseerimine koos kasutajaliidese testijuhtumitega. Põhimõtteliselt hõlmab see REST API testimine CRUD (Create-Read-Update-Delete-Delete) toimingute testimist vastavalt meetoditega POST, GET, PUT ja DELETE.

Mis on käitumine?

Käitumine on üks populaarsemaid Pythoni BDD testiraamistikke.

Vaatame, kuidas käitub:

Funktsioonifailid kirjutab teie ärianalüütik / sponsor / kes iganes teie käitumisstsenaariumitega. Sellel on loomulik keelevorming, mis kirjeldab funktsiooni või selle osa koos eeldatavate tulemuste esinduslike näidetega

Need stsenaariumi etapid on kaardistatud Pythonis kirjutatud sammude juurutamistega

Ja valikuliselt on olemas mõned keskkonnakontrollid (kood, mida käivitada enne ja pärast samme, stsenaariume, funktsioone või kogu laskemängu).

Alustame oma automaatikatesti raamistiku seadistamisega Behave abil:

Käitumise testiraamistiku seadistamine Windowsis:

Paigaldamine:

  • Laadige alla ja installige Python 3 saidilt https://www.python.org/
  • Käivitamiseks installige käsureal järgmine käsk
  • pip install käituma
  • IDE: olen kasutanud PyCharm Community Editioni https://www.jetbrains.com/pycharm/download

Projekti seadistamine:

  • Looge uus projekt
  • Looge järgmine kataloogistruktuur:

Funktsioonifailid:

Ehitame siis oma funktsioonifaili Sample_REST_API_Testing.feature, millel on funktsioon funktsiooniga CRUD toimingute tegemine teenuses "postitused".

Meie näites olen kasutanud http://jsonplaceholder.typicode.com/ postituste näidis-REST-teenust.

POST-stsenaariumi näide:

Stsenaarium: postituse postituse näide -> siin kaalume uue postituse loomist teenuse "postitused" abilArvestades: Ma määrasin postituste API lõpp-punkti -> See on eelduseks testile, mis määrab postitusteenuse URL-iMillal: seadsin HEADER-i parameetri päringu sisutüübiks "application / json".Ja määrake taotluse kehaJa saatke POST HTTP päring -> See on postitaotluse saatmise tegelik sammSiis: siis saan kehtiva HTPP vastuskoodi 201Ja reageerimiskeha "POST" on tühi -> see on vastuse keha kontroll

Samamoodi võite kirjutada ülejäänud stsenaariumid järgmiselt:

Proovi_REST_API_Testimine.funktsioon

Funktsioon: CRUD-meetodite testimine REST API testimisraamistikusTaust:Arvestades määrasin REST API URL-i prooviStsenaarium: postituse näide POSTArvestades valiku POST postituste api lõpp-punkti määramistKui ma määran HEADERi parameetri sisutüübiks "application / json".Ja määrake taotluse kehaJa saatke POST HTTP-päringSiis saan kehtiva HTTP vastuskoodi 201Ja Response BODY "POST" pole tühi.Stsenaarium: näide GET postitusedArvestades, et ma määran GET postitused api lõpp-punkt "1"Kui ma määran HEADERi parameetri sisutüübiks "application / json".Ja saatke GET HTTP päringSiis saan "GET" jaoks kehtiva HTTP-vastuskoodi 200.Ja Response BODY "GET" pole tühiStsenaarium: näide UPDATE postitustestArvestades, et määrasin "1" jaoks PUT-postituste api lõpp-punktiKui määran värskendustaotluse kehaJa saatke PUT HTTP-päringSiis saan "PUT" jaoks kehtiva HTTP-vastuskoodi 200.Ja Response BODY "PUT" on tühiStsenaarium: kustutage postituste näideArvestades valiku „1” määran postituste API lõpp-punktiKui saadan DELETE HTTP päringuSiis saan kehtiva HTTP vastuskoodi 200 kustutamiseks.

Sammude rakendamine

Nüüd saate ülaltoodud stsenaariumides kasutatavate funktsioonide sammude jaoks kirjutada rakendused Pythoni failidesse kataloogi "steps".

Käitumise raamistik tuvastab funktsiooni Samm funktsiooni faili predikaadiga sobitamise järgi. Näiteks otsib funktsioonifaili stsenaariumis antud predikaat sammufunktsiooni, millel on sisustus "antud". Sarnane sobitamine toimub ka millal ja siis. Kuid funktsioonide „But”, „And” korral võtab funktsioon Decator sama dekoratsiooni, nagu see on eelmisele sammule. Näiteks kui 'And' tuleb 'Given' puhul, on sammufunktsioonide dekoraatoriks @given.

Näiteks kui POST-i sammu saab rakendada järgmiselt:

@when (ma määran HEADER-i parameetri päringu sisutüübiks "{header_conent_type}" ')Millal kaardistamine, kui siin on teade „application / json” edastatud funktsiooni „{header_conent_type}” funktsioonifailist. Seda nimetatakse parameetriksdef step_impl (kontekst, header_conent_type):See on astmelise rakendusmeetodi allkirirequest_headers ['Content-Type'] = header_conent_typeSammude juurutuskood, siin määrate päringu päise sisutüübi

Samamoodi näeb samm-pythoni faili teiste sammude rakendamine välja selline:

sample_step_implementation.py

käituma impordi antud, kui siis sammimporditaotlusedapi_endpoints = {}request_headers = {}response_codes = {}response_texts = {}request_bodies = {}api_url = Puudub@given (u'Määrasin REST API URL-i proovi ')def step_impl (kontekst):globaalne api_urlapi_url = 'http://jsonplaceholder.typicode.com'# START POST Stsenaarium@given (u 'Ma määran postituste api lõpp-punkti')def step_impl (kontekst):api_endpoints ['POST_URL'] = api_url + '/ postitust'print ('url:' + api_endpoints ['POST_URL'])@when (ma määran HEADER-i parameetri päringu sisutüübiks "{header_conent_type}" ')def step_impl (kontekst, header_conent_type):request_headers ['Content-Type'] = header_conent_type#Võite lisada sammuna ka sõna „Ja” või „Aga” - need nimetatakse ümber käitumisega, et võtta nende eelmise sammu nimi, nii et:@when (u 'Määra päringu keha')def step_impl (kontekst):request_bodies ['POST'] = {"title": "foo", "body": "riba", "userId": "1"}#Võite lisada sammuna ka sõna „Ja” või „Aga” - need nimetatakse ümber käitumisega, et võtta nende eelmise sammu nimi, nii et:@when (u 'Saada POST HTTP-päring')def step_impl (kontekst):# saada päringu saatmine ja vastuse salvestamine vastuse objektinavastus = taotlused.post (url = api_endpoints ['POST_URL'], json = request_bodies ['POST'], päised = request_headers)#response = taotlused.post (url = api_endpoints ['POST_URL'], päised = request_headers) #https: //jsonplaceholder.typicode.com/posts# vastuse teksti väljavõtmineresponse_texts ['POST'] = response.textprint ("postita vastus: + vastus.text)# vastuse olekukoodi väljavõtmineolekukood = response.status_coderesponse_codes ['POST'] = olekukood@ siis (u'Ma saan kehtiva HTTP-vastuskoodi 201 ')def step_impl (kontekst):print ('Post rep code;' + str (response_codes ['POST']))kinnita vastuse_koodid ['POST'] on 201# LÕPP postitamise stsenaarium# Alusta stsenaariumi hankimist@given (ma määran GET postitused api lõpp-punkt "{id}" ')def step_impl (kontekst, id):api_endpoints ['GET_URL'] = api_url + '/ posts /' + idprint ('url:' + api_endpoints ['GET_URL'])#Võite lisada sammuna ka sõna „Ja” või „Aga” - need nimetatakse ümber käitumisega, et võtta nende eelmise sammu nimi, nii et:@when (u'Saada GET HTTP-päring ')def step_impl (kontekst):# saada päringu saatmine ja vastuse salvestamine vastuse objektinavastus = taotlused.get (url = api_endpoints ['GET_URL'], päised = request_headers) #https: //jsonplaceholder.typicode.com/posts# vastuse teksti väljavõtmineresponse_texts ['GET'] = vastus.tekst# vastuse olekukoodi väljavõtmineolekukood = response.status_coderesponse_codes ['GET'] = olekukood@then (u'Ma saan päringule "{request_name}" "kehtiva HTTP-vastuskoodi 200)def step_impl (kontekst, request_name):print ('Hankige' + request_name + 'rep kood: + str (vastuse_koodid [request_name]))kinnita vastuse_koodid [päringu_nimi] on 200@then (u'Response BODY "{request_name}" pole tühi ')def step_impl (kontekst, request_name):print ('request_name:' + request_name)print (vastuse_tekstid)assert response_texts [request_name] pole Puudub# LÕPP GET stsenaarium#START PUT / UPDATE@given (u'Määran postituse API lõpp-punkti "{id}" 'jaoks)def step_impl (kontekst, id):api_endpoints ['PUT_URL'] = api_url + '/ posts /' + idprint ('url:' + api_endpoints ['PUT_URL'])@when (u 'Ma määran värskendustaotluse keha')def step_impl (kontekst):request_bodies ['PUT'] = {"title": "foo", "body": "riba", "userId": "1", "id": "1"}@when (u 'Saada PUT HTTP-päring')def step_impl (kontekst):# saada päringu saamine ja vastuse salvestamine vastuse objektina # response = request.post (url = api_endpoints ['POST_URL'], päised = request_headers) #https: //jsonplaceholder.typicode.com/postsvastus = taotlused.put (url = api_endpoints ['PUT_URL'], json = request_bodies ['PUT'], päised = request_headers)# vastuse teksti väljavõtmineresponse_texts ['PUT'] = vastus.tekstprint ("värskenda vastust: + vastus.tekst)# vastuse olekukoodi väljavõtmineolekukood = response.status_coderesponse_codes ['PUT'] = olekukood#END PUT / UPDATE#START KUSTUTA@given (u'Määran rakenduse "{id}" '' Kustuta postitused api lõpp-punkti)def step_impl (kontekst, id):api_endpoints ['DELETE_URL'] = api_url + '/ posts /' + idprint ('url:' + api_endpoints ['DELETE_URL'])@when (ma saadan KUSTUTA HTTP-päringu ')def step_impl (kontekst):# saada päringu saatmine ja vastuse salvestamine vastuse objektinavastus = taotlused.delete (url = api_endpoints ['DELETE_URL'])# response = request.post (url = api_endpoints ['POST_URL'], päised = request_headers) #https: //jsonplaceholder.typicode.com/posts# vastuse teksti väljavõtmineresponse_texts ['DELETE'] = vastus.tekstprint ("KUSTUTA vastus: + vastus.tekst)# vastuse olekukoodi väljavõtmineolekukood = response.status_coderesponse_codes ['DELETE'] = olekukood#END DELETE

Testide läbiviimine:

Nüüd oleme testskripti väljatöötamise osaga valmis, seega käivitame testid:

Meie funktsioonifaili käivitamiseks käivitage järgmine käsk käsureal

C: \ Programs \ Python \ Python37> käituvad -f päris C: \ \ features \ feature_files_folder \ Sample_REST_API_Testing.feature

See kuvab testi täitmise tulemused järgmiselt:

Aruande kuvamine konsoolis

Vaatame siin veel ühte lahedat asja.

Kuna kasutajad eelistavad testitulemusi alati lugeda loetavamas ja esitatavamas vormingus, on meil Allure'i abil HTML-vormingus aruanded.

Aruanded

Esiteks peate installima vorminduse Allure Behave [https://docs.qameta.io/allure/]:

Nüüd täitke järgmine käsk:

Aruannete jaoks

> behave -f json -o suurearuande -kaust> Näide_REST_API_Testing.feature

> allure serve

See loob teie testitulemuste aruande esitatavas ja informatiivses vormingus järgmiselt:

Testaruanne HTML-vormingus

Testiaruanne, mis kuvab individuaalse stsenaariumi tulemuse

Kokkuvõte:

  • BDD on käitumispõhine areng. See on üks kiire tarkvaraarenduse tehnikatest.
  • REST on tänapäeval API-de loomisel muutunud üsna populaarseks stiiliks, sama oluliseks on muutunud REST API testjuhtumite automatiseerimine koos kasutajaliidese testijuhtumitega.
  • BDD-l on loomulik keelevorming, mis kirjeldab funktsiooni või selle osa koos eeldatavate tulemuste esinduslike näidetega
  • Käitumise raamistik tuvastab funktsiooni Samm funktsiooni faili predikaadiga sobitamise järgi

Huvitavad Artiklid...