step argument transformations specflow tables
Vodič za transformacije argumenata u koraku i tablice specflowa:
Naš nas je prethodni tutorial o Specflowu kratko upoznao Dijeljeni i obuhvaćeni vezovi, kuke i ponovna upotreba koraka detaljno. Ovdje ćemo u ovom vodiču istražiti više o preobrazbama koračnih argumenata u Specflowu.
Slobodno pročitajte naš Kompletni vodič za obuku specflowa za početnike za jasno razumijevanje koncepta. Značajka pretvorbe argumenta koraka Specflow, omogućuje korisniku da osigura prilagođenu transformaciju za parametre dane u Koracima.
Omogućuje dodavanje prilagođene logike za pretvaranje ulaznih parametara u određeni parametar. Na primjer, možete izravno stvoriti objekt klase iz parametara i vratiti konstruirani objekt iz funkcije transformacije.
Još jedna značajka Specflowa koju ćemo pogledati su tablice specflowa koje omogućuju prosljeđivanje ulaznih podataka u tabličnom obliku jednim korakom, a pomagači tablice mogu ih izravno preslikati na instancu objekta po želji.
Gledaj video:
Evo video vodiča o koraku Transformacije argumenata i tablice specflowa:
Što ćete naučiti:
Korak preobrazbe argumenata
Da bismo bolje razumjeli transformacije argumenata, prvo pokušajmo shvatiti kako se Specflow točno podudara s parametrima. Kao što smo vidjeli u prethodnim člancima, za primjer pretraživanja YouTubea prosljeđivali smo pojam za pretraživanje kao parametar za izvršenje scenarija.
Podudaranje parametara obično se događa putem regularnog izraza, a podudaranje regularnog izraza rezultira postavljanjem parametra metode na isporučeni pojam za pretraživanje u koraku.
Pokušajmo prvo shvatiti koje su zadane podržane konverzije u Specflowu i kada transformacije argumenata mogu biti korisne.
Podržane konverzije
Specflow ne podržava puno pretvorbi iz okvira, gledajući sam tip podataka nakon podudaranja regularnog izraza. Može se automatski pobrinuti za pretvorbe poput - String, integer, GUID, Enums itd.
Pogledajmo primjer nekih od ovih u nastavku:
Scenario: Get Transactions in my account Given I have entered customer name as Test Customer And I have entered customer account id as 0f8fad5b-d9cb-469f-a165-70867728950e And I select sorting order as DESCENDING And I select number of transactions to be displayed as 25 Then I should see my account transactions
U gornjem uzorku koda istaknuli smo različite vrste unosa koje prenosimo u Koracima, a u implementacijama koraka oni se pretvaraju u odgovarajuće tipove podataka.
Pogledajmo implementacije koraka za ove u nastavku (radi jednostavnosti upravo smo napravili konzolu za svaki od koraka kako bismo ilustrirali da se navedeni argument automatski pretvara u očekivani tip):
[Given(@'I have entered customer name as (.*)')] public void GivenIHaveEnteredCustomerNameAsTestCustomer(String customerName) { Console.Out.WriteLine(customerName); } [Given(@'I have entered customer account id as (.*)')] public void GivenIHaveEnteredCustomerAccountIdAs(Guid accountId) { Console.Out.WriteLine(accountId.ToString()); } [Given(@'I select sorting order as (.*)')] public void GivenISelectSortingOrderAsAscending(SortOrder sortOrder) { Console.Out.WriteLine(sortOrder.ToString()); } [Then(@'I should see my account transactions')] public void ThenIShouldSeeMyAccountTransactions() { Console.Out.WriteLine('success!'); } [Given(@'I select number of transactions to be displayed as (.*)')] public void GivenISelectNumberOfTransactionsToBeDisplayedAs(int p0) { Console.Out.WriteLine(p0.ToString());
Pri izvršavanju gornjeg scenarija, izlaz uspješno ispisuje sve vrijednosti pokazujući da je automatska konverzija argumenata u očekivane tipove podataka bila uspješna.
Ovako izgleda izlaz:
Given I have entered customer name as Test Customer Test Customer -> done: SupportedSpecflowConversions.GivenIHaveEnteredCustomerNameAsTestCustomer('Test Customer') (0.0s) And I have entered customer account id as 0f8fad5b-d9cb-469f-a165-70867728950e 0f8fad5b-d9cb-469f-a165-70867728950e -> done: SupportedSpecflowConversions.GivenIHaveEnteredCustomerAccountIdAs(0f8fad5b-d9cb-469...) (0.0s) And I select sorting order as DESCENDING DESCENDING -> done: SupportedSpecflowConversions.GivenISelectSortingOrderAsAscending(DESCENDING) (0.0s) And I select number of transactions to be displayed as 25 25 -> done: SupportedSpecflowConversions.GivenISelectNumberOfTransactionsToBeDisplayedAs(25) (0.0s) Then I should see my account transactions success! -> done: SupportedSpecflowConversions.ThenIShouldSeeMyAccountTransactions() (0.0s)
Argumentne transformacije
Pogledajmo primjer na djelu da bismo to razumjeli. Podrška, imate aplikaciju koja pretvara dano vrijeme i pretvara ga u minute. Primjer: Ako je korisnički unos 1 dan - izlaz je - 1440, ako je unos korisnika 1 dan 2 sata 2 minute, tada bi izlaz trebao biti 1562.
Sada se može vidjeti da će za podršku različitim vrstama ulaza trebati napisati različite implementacije vezanja, ovisno o vrsti ulaza. Na primjer: Za ulaze koji imaju samo dio dana, postojat će zasebna implementacija koraka, za ulaze koji imaju dan, mjesec - bit će odvojena implementacija koraka, itd.
Pogledajmo kako se to može implementirati kroz implementaciju u jednom koraku kroz transformaciju koračnog argumenta, a pruženi ulaz jednostavno se pretvara u objekt vremenske oznake i vraća u izvorni korak koji se naziva koračna transformacija.
Zamislite to kao skeniranje regularnog izraza prve razine na vaš ulaz koje vraća djelomično transformiranu vrijednost u pozivni korak.
Pogledajte datoteku značajke koja ima 3 različite inačice unosa, s jednom transformacijom pretvaranjem u cjeloviti objekt vremenskog raspona i vraćanjem natrag.
Scenario: Convert timestamp to minutes - variant 1 Given I have entered 50 days into the timestamp to minute converter When I press calculate Then the result should be 72000.00 on the screen Scenario: Convert timestamp to minutes - variant 2 Given I have entered 1 day, 2 hours, 3 minutes into the timestamp to minute converter When I press calculate Then the result should be 1563.00 on the screen Scenario: Convert timestamp to minutes - variant 3 Given I have entered 1 day, 1 hour, 1 minute, 30 seconds into the timestamp to minute converter When I press calculate Then the result should be 1501.50 on the screen
Pogledajte istaknute vrijednosti u gornjem primjeru koda. Sve će se to pobrinuti za potpuno istu transformaciju, a krajnji rezultat bit će transformirana ulazna vrijednost TimeSpan-a koja se šalje natrag pozivajućem koraku protoka.
Pogledajmo provedbu Transformacije u nastavku:
[StepArgumentTransformation(@'(?:(d*) day(?:s)?(?:, )?)?(?:(d*) hour(?:s)?(?:, )?)?(?:(d*) minute(?:s)?(?:, )?)?(?:(d*) second(?:s)?(?:, )?)?')] public TimeSpan convertToTimeSpan(String days, String hours, String minutes, String seconds) { int daysValue; int hoursValue; int minutesValue; int secondsValue; int.TryParse(days, out daysValue); int.TryParse(hours, out hoursValue); int.TryParse(minutes, out minutesValue); int.TryParse(seconds, out secondsValue); return new TimeSpan(daysValue, hoursValue, minutesValue, secondsValue); }
Da bi okvir znao da je to obvezujuća transformacija, atribut StepArgumentTransformation mora se dodati metodi koja implementira pretvorbu argumenta.
Ostale važne napomene koje treba napomenuti u vezi s pretvaranjem argumenata su:
# 1) Korak Transformacije argumenta izvode se za svaki podudarni korak, tj. Neovisno o vrsti koraka, tj. Je li dato, kada ili tada, transformacija će se dogoditi za svaki podudarni regularni izraz.
#dva) Ovisno o vrsti povratka transformiranog izlaza, ako stvarni pozivni korak nema odgovarajući povratni tip za ulazni parametar, tada se transformacija neće dogoditi.
Što to znači, pretpostavimo da pozivni korak zahtijeva transformirani ulaz, ali ima spomenutu vremensku oznaku ulaza kao nešto što se ne podudara s povratnom vrstom transformirane metode, tada će podudaranje regularnog izraza biti poništeno i pretvorba se neće izvršiti.
Pogledajmo provedbu pozivanja koraka 'Dano':
private TimeSpan ts; [Given(@'I have entered (.*) into the timestamp to minute converter')] public void GivenIHaveEnteredDaysIntoTheTimestampToMinuteConverter(TimeSpan tsTransformed) { ts = tsTransformed; }
Ovdje pogledajte vrstu ulaznog parametra, tj. Njegov TimeSpan, koji odgovara tipu vraćenom iz koraka transformacije ako je ovaj promijenjen u neki drugi tip. Na primjer, String, tada se pretvorba argumenta neće dogoditi i podudaranje regularnog izraza poništit će izvorna implementacija Koraka.
Pro savjet: Ovdje je važno napomenuti da je cjelokupan tekst koji treba transformirati treba unositi / podudarati kroz koračnu transformaciju argumenata. Dakle, zadani će korak sada omotati sve moguće ulazne formate u jedan niz, a pretvorbeni regularni izraz pretvorit će ga u TimeSpan objekt i vratiti natrag.Tablice spektra
Tablice spektluka način su za prosljeđivanje popisa vrijednosti u funkciju koračne implementacije. U našim prethodnim člancima pogledali smo način na koji možemo implementirati testove vođene podacima koristeći okvir scenarija i primjere. Ali to je prvenstveno trebalo izvesti scenarij s različitim ulazima.
Ovdje se u tablicama radi o prosljeđivanju svih podataka odjednom u tabličnom obliku na implementaciju koraka koja isporučuje podatke.
Na primjer, razmotrite primjer gdje testirate sustav upravljanja studentima i da biste stvorili novi studentski objekt, od vas se traži da ispunite puno detalja kao što su ime, prezime, dob, godina rođenja itd.
Jedan od načina je prosljeđivanje svake od ovih informacija kao zasebnog koraka koji će u osnovi biti puno standardnih kodova, a u svakom ćete koraku na kraju ažurirati isti objekt koji treba testirati. Drugi način može biti izrada složenog regularnog izraza i pokušaj prosljeđivanja svih podataka u istom koraku, ali prilično je podložan pogreškama i neispravan.
Ovdje nas spašavaju stolovi. Svi ulazni podaci povezani sa studentima mogu se poslati u isti korak implementacije na lijep tabelarni način kroz značajku tablice specflowa.
Pogledajmo dolje uzorak koda za implementaciju značajke i koraka:
Scenario: Pass data through Specflow tables for StudentInfo object Given I have entered following info for Student | FirstName | LastName | Age | YearOfBirth | | test | student | 20 | 1995 | When I press add Then i student should get added to database and entered info should be displayed on the screen
Podaci tablice istaknuti su u gornjem koraku scenarija.
stvoriti niz nizova java
Specflow pruža puno TableHelpers-a, koji izravno omogućuju korisne značajke poput stvaranja instance objekta od korisničkih ulaznih podataka, a ne samostalno raščlanjivanje svakog polja.
Pogledajmo implementaciju koraka u nastavku:
private StudentInfo studInfo; [Given(@'I have entered following info for Student')] public void GivenIHaveEnteredFollowingInfoForStudent(Table table) { // converting supplied input data directly to instance of StudentInfo object studInfo = table.CreateInstance(); }
Pogledajte gornji istaknuti odjeljak. Ovdje je samo jedan mali redak koda, cijeli objekt StudentInfo (koji je POCO koji sadrži polja s podacima o studentu, tj. Ime, prezime, dob, godina rođenja itd.)
Neke druge značajke / koncepti povezani sa tablicama specflow prikazani su u nastavku:
# 1) Tablice mogu biti vodoravne ili okomite. Okomite tablice više su poput parova ključ / vrijednost, au gornjem scenariju više poput preslikavanja imena i vrijednosti, dok vodoravne tablice sadrže sve podatke za objekt u jednom retku (baš kao što smo vidjeli u našem primjeru).
#dva) Vertikalne tablice mogu se preslikati u samo jedan .NET objekt, dok se horizontalne tablice također mogu preslikati u skup ili zbirku objekata.
# 3) Svaka vrijednost polja u tablici trebala bi biti atomska jer će se preslikati u jedno odgovarajuće polje u raščlanjenom objektu.
Ovdje je važno napomenuti da čak i ako i vi automatski generirati korak povezivanja s tabličnim podacima, generator povezivanja Specflow automatski će uzeti u obzir takve vrste unosa i prepoznati ih kao valjane tablične podatke.
Zaključak
U ovom smo članku pokušali objasniti 2 važna i zgodna koncepta u Specflowu.
Prvi korak je Korak Transformacije argumenta koji omogućuju pretvorbu prilagođenih tipova za argumente Specflow kako bi se izbjegao standardni obrazac (i omogućuje testnu skriptu da izgleda modulariziranijom i logičnijom), a druga značajka koju smo pogledali je Tablice spektra koji dobro dođu kada trebate u jednom koraku proslijediti puno polja / podataka u korisničkom tabelarnom formatu.
U našem nadolazećem vodiču naučit ćemo više o tome kako možete automatski generirati prekrasnu dokumentaciju pomoću Specflowa u različitim formatima pomoću alata otvorenog koda poput Picklesa koji mogu poslužiti kao jednostavna referenca svim dionicima projekta.
PREV Vodič | SLJEDEĆA Vodič
Preporučena literatura
- Implementacija u MongoDB: Vodič korak po korak
- Koračna instalacija i postavljanje Appium Studija
- Primjer specflowa i selena Webdriver s kraja na kraj
- Detaljni vodič za integraciju QTP-a s ALM / QC
- 15 najpopularnijih pitanja o specflow intervjuu
- Napredni specflow dijeljeni i opsežni vezovi, kuke i ponovna upotreba koraka
- Instalirajte MongoDB na Windows: Vodič korak po korak
- Kako integrirati JIRA-u s qTestom: Vodič korak po korak