
Pozdravljeni. Počasi prihajamo iz sence in nadaljujemo s serijo člankov o našem produktu. Po pregledni članku smo prejeli številne povratne informacije (večinoma pozitivne), predloge in poročila o napakah. Danes vam bomo pokazali v akciji, tako da boste lahko ocenili nekatere funkcionalnosti naše aplikacije. Za bolj popolno potopitev priporočamo obisk naše dokumentacije na naslovu . No, gremo naprej!
Namestitev
Začnimo s splošnimi informacijami. Aplikacija je na voljo in se lahko preizkuša na treh platformah — Linux, Windows, MacOS. Prenesete lahko namestitveni program za želeni operacijski sistem s . Za uporabnike Linuxa imamo možnost namestitve . Zelo upamo, da bomo kmalu dodali tudi Microsoft Store in App Store (ali je to potrebno? Kaj menite?).
Podatkovni scenarij
Kot testni scenarij smo izbrali naslednji standardni postopek:
- prijavili se bomo: uporabnik — admin, geslo — password
- dodali novo vnos
- preverili pravilno dodajanje vnosa
Testirali bomo na . To je običajen , ki je odličen za testiranje takšnih aplikacij. Dodali smo le avtentikacijo z žetonom za vse poti json-serverja in ustvarili metodo login za pridobitev tega žetona. Napredovali bomo postopoma, postopoma izboljšujejoč naš projekt.
Ustvarjanje projekta in poskus ustvarjanja entitete brez avtentikacije
Najprej ustvarimo nov projekt (Datoteka->Nov projekt). Če aplikacijo odpirate prvič, se bo nov projekt avtomatsko odprl. Za začetek poskusimo izvesti zahtevke za ustvarjanje novega vnosa (morda je ustvarjanje vnosov dostopno brez avtentikacije). V kontekstnem meniju vozlišča Project izberite Dodaj vozlišče -> ZahtevaKorak. Kot ime vozlišča določimo create-post. V rezultatu bo v drevesu ustvarjeno novo vozlišče in odprta zavihka tega vozlišča. Določimo naslednje parametre zahtevka:
- Tip zahtevka: POST
- url:
- Telo zahtevka: json s vrednostjo
{"title": "New testmace quick start post"}
Če ste vse naredili pravilno, bo vmesnik izgledal takole:

Vendar če poskusimo izvesti zahtevek, bo strežnik vrnil kodo 401 in brez avtentikacije na tem strežniku ne bo nič mogoče. No, v splošnem pričakovano).
Dodajamo zahtevek za avtentikacijo
Kot že omenjeno, imamo POST endpoint /login, ki sprejema json pravilne oblike kot telo zahtevka: {"username": "", "password": ""}, gde username in password (ponovno, iz uvoda iznad) imaju značenje admin in password odnosno. Kao odgovor, ovaj endpoint vraća JSON formata {"token": ""}. Iskoristićemo ga za autorizaciju. Kreiraćemo ZahtevaKorak čvor pod imenom login, kao roditelj će se koristiti Projekt čvor. Pomoću drag-and-drop premestite ovaj čvor u drvetu iznad čvora create-post. Dodelićemo novokreiranom zahtevu sledeće parametre:
- Tip zahtevka: POST
- url:
- Telo zahtevka: json s vrednostjo
{"username": "admin", "password": "password"}
Izvršićemo zahtev i dobićemo dvesta kod sa tokenom u odgovoru. Otprilike ovako:

Refactoring: uklanjanje dupliciranja domena
Za sada zahtevi nisu povezani u jedinstveni scenarij. Ali to nije jedini nedostatak. Ako se pažljivo pogleda, može se primetiti da se najmanje domen duplicira u oba zahteva. Nije dobro. Najbolje je vreme da refaktorišemo ovaj deo budućeg scenarija i u tome će nam pomoći promenljive.
Na prvom približavanju promenljive izvršavaju istu ulogu kao i u drugim sličnim alatima i programskim jezicima — uklanjanje dupliciranja, povećanje čitljivosti itd. Više o promenljivim se može pročitati u . U ovom slučaju biće nam potrebne korisničke promenljive.
Definišemo na nivou projekta čvor promenljivu domain z vrednostjo https://testmace-quick-start.herokuapp.com. Da bismo to uradili, potrebno je
- Otvoriti karticu sa ovim čvorom i kliknuti na ikonu kalkulatora u gornjem desnom uglu
- Kliknuti na + ADD VARIABLE
- Uneti ime i vrednost promenljive
U našem slučaju dijalog sa dodatom promenljivom će izgledati ovako:

OK. Sada zahvaljujući nasleđivanju možemo koristiti ovu promenljivu u potomcima bilo kog nivoa ugnježdenosti. U našem slučaju to su čvorovi login in create-post. Da bismo koristili promenljivu u tekstualnom polju, potrebno je napisati ${}. Na primer, URL za prijavu se pretvara u ${domain}/login, odnosno za create-post čvor URL će izgledati ovako ${domain}/posts.
Tako, vodeći se principom DRY, malo smo poboljšali scenarij.
Skladištimo token u promenljivu
Kako smo počeli razgovor o promenljivima, hajde da malo razvijemo ovu temu. U ovom trenutku, u slučaju uspešne prijave dobijamo od servera autorizacijski token, koji će nam biti potreban u narednim zahtevima. Hajde da sačuvamo ovaj token u promenljivoj. Pošto će se vrednost promenljive odrediti tokom izvršenja scenarija, koristićemo za to poseban mehanizam — .
Začnimo z zahtevkom za prijavo. Na zavihku Parsed za odgovor postavite kazalec na žeton in v kontekstnem meniju (ki ga sprožite z desnim klikom ali s pritiskom na gumb …) izberite možnost Dodeli spremenljivki. Pojavila se bo pogovorna okna z naslednjimi polji:
- Pot — kateri del odgovora se vzame (v našem primeru je to
body.token) - Trenutna vrednost — kakšna vrednost leži po poti Pot (v našem primeru je to vrednost žetona)
- Ime spremenljivke — ime spremenljivke, v katero Trenutna vrednost se bo shranjevala. V našem primeru bo to
token - Čvor — v katerem od prednikov bo ustvarjena spremenljivka Ime spremenljivke. Izberimo Projekt
Zapolnjeno pogovorno okno izgleda takole:

Zdaj se bo ob vsakem izvajanju vozlišča login dinamična spremenljivka token posodabljala z novo vrednostjo iz odgovora. In ta spremenljivka bo shranjena v Projekt vozlišču in bo zahvaljujoč dedovanju dostopna potomcem.
Da bi dostopali do dinamičnih spremenljivk, je potrebno uporabiti $dynamicVar. Na primer, da pridemo do shranjenega žetona, je potrebno poklicati ${$dynamicVar.token}.
Prehodimo avtentikacijski žeton v zahtevke
Na prejšnjih korakih smo pridobili avtentikacijski žeton in vse, kar moramo storiti, je dodati glavo Authorization s vrednostjo Bearer vse zahtevke, ki zahtevajo avtentikacijo, tudi v create-post. Za to obstaja več načinov:
- Ročno kopirati žeton in dodati avtentikacijsko glavo v zahtevane zahteve. Ta metoda deluje, vendar je njena uporaba omejena samo na zahtevkov tipa „naredil in vrgel stran“. Za večkratno izvedbo scenarijev ne bo delovalo.
- Izkoristite funkcionalnost .
- Uporabite
Uporaba drugega načina se zdi očitna, vendar v kontekstu tega članka tak pristop ... ni zanimiv. No, res: mehanizem avtentikacij je več ali manj znan iz drugih orodij (čeprav imamo tudi stvari, kot so ) in verjetno ne bo povzročilo vprašanj.
Drugi problem su podrazumevani naslovi! Ukratko, podrazumevani naslovi su nasleđeni HTTP naslovi koji se po defaultu dodaju u zahtev, osim ako ih izričito ne isključimo. Ova funkcionalnost može se koristiti, na primer, za implementaciju prilagođene autorizacije ili jednostavno da se reši problem dupliranja u scenarijima. Iskoristimo ovu mogućnost za slanje tokena u naslovima.
Ranije smo pametno sačuvali token u dinamičkoj varijabli $dynamicVar.token na nivou Project čvora. Preostaje da uradimo sledeće:
- Definišemo podrazumevani naslov
Authorizationz vrednostjoBearer ${$dynamicVar.token}na nivou Project čvora. Da bismo to uradili, u interfejsu Project čvora potrebno je otvoriti dijalog sa podrazumevanim naslovima (dugme Headers u gornjem desnom uglu) i dodati odgovarajući naslov. Dijalog sa popunjenim vrednostima izgledat će ovako:

- Isključiti ovaj naslov iz login zahteva. To je jasno: u trenutku prijave još nemamo token i tim zahtevom ga zapravo postavljamo. Stoga u interfejsu login zahteva na kartici Headers u oblasti Inherited uklanjamo oznaku sa Authorization naslova.
To je to. Sada će se naslov za autorizaciju dodavati u sve zahteve koji su potomci Project čvora, osim login čvora. Tako da sada već imamo spreman scenario i preostaje nam samo da ga pokrenemo. Scenario se može pokrenuti izborom opcije Zaženi u kontekstualnom meniju Project čvora.
Proveravamo tačnost kreiranja posta
U ovom trenutku naš scenario može da se prijavi, i, koristeći autorizacioni token, kreira post. Međutim, moramo se uveriti da novokreirani post ima ispravno ime. U suštini, još treba da uradimo sledeće:
- Pošaljemo zahtev za dobijanje posta po id-u,
- Proverimo da ime koje je stiglo sa servera odgovara imenu koje je prosleđeno prilikom kreiranja posta.
Razmotrićemo prvi korak. Budući da se vrednost id određuje tokom izvođenja skripta, potrebno je kreirati dinamičku varijablu (nazvaćemo je postId) iz čvora create-post na nivou Project čvora. Kako to uraditi već znamo, dovoljno je obratiti se odeljku Skladištimo token u promenljivu. Preostaje samo da kreiramo zahtev za dobijanje posta po ovom id-u. Za to ćemo kreirati RequestStep get-post sa sledećim parametrima:
- Tip zahteva: GET
- URL: ${domain}/posts/${$dynamicVar.postId}
Za izvedbo drugega koraka se moramo spoznati z vozliščem. Assertion vozlišče — to je vozlišče, ki omogoča pisanje preverjanj za določene poizvedbe. Vsako Assertion vozlišče lahko vsebuje več trditev (preverjanj). Več o vseh vrstah assertion-ov lahko preberete v našem . Uporabili bomo Compare assertion z operatorjem equal. Obstaja več načinov za ustvarjanje assertion-ov:
- Dolgotrajen. Ročno iz kontekstnega menija RequestStep vozlišča ustvarite Assertion vozlišče. V ustvarjenem Assertion vozlišču dodajte zanimiv assertion in izpolnite polja.
- Hitro. Ustvarite Assertion vozlišče skupaj z assertion-om iz odgovora RequestStep vozlišča s pomočjo kontekstnega menija
Uživajmo v drugem načinu. Tako bo to videti za naš primer.

Za tiste, ki niso razumeli, se tukaj dogaja naslednje:
- Izvedite poizvedbo v vozlišču get-post
- V zavihku Parsed odgovora, pokličite kontekstni meni in izberite Create assertion -> Compare -> Equal
Čestitam, ustvarili smo prvi test! Preprosto, kajne? Zdaj lahko zaženete scenarij popolnoma in uživate v rezultatu. Ostaja še malo, da refaktorizirate in izpeljete title v ločeno spremenljivko. Ampak to vam prepuščamo kot domačo nalogo)
Zaključek
V tem priročniku smo ustvarili popoln scenarij in obenem pregledali nekatere funkcije našega izdelka. Seveda nismo izkoristili vse funkcionalnosti in v naslednjih člankih bomo podrobneje obravnavali možnosti TestMace. Spremljajte novosti!
P.S. Za tiste, ki jim je lene ponavljati vse korake, smo prijazno pripravili s projektom iz članka. Odpreti ga je mogoče s pomočjo Datoteka -> Open project in izberite mapo Project.
Izvor: habr.com

