step argument transformations specflow tables
Vadnica za preoblikovanje argumentov v korakih in tabele specflow:
Naša prejšnja vadnica Specflow nas je seznanila z vsemi o tem Povezave v skupni rabi in obseg, kljuke in ponovna uporaba Podrobno. Tu v tej vadnici bomo raziskali več o preoblikovanju korakov v Specflowu.
Vas prosimo, da preberete našo Izpolnite Priročnik za usposabljanje za specflow za začetnike za jasno razumevanje koncepta. Funkcija preoblikovanja argumentov koraka Specflow omogoča uporabniku, da zagotovi pretvorbo po meri za parametre, podane v korakih.
Omogoča dodajanje logike po meri za pretvorbo vhodnih parametrov v določen parameter. Na primer, objekt parametra lahko neposredno ustvarite iz parametrov in zgrajeni objekt vrnete iz funkcije pretvorbe.
Druga značilnost Specflowa, ki si jo bomo ogledali, so tabele Specflow, ki omogočajo posredovanje vhodnih podatkov v obliki tabele v enem koraku, pomočniki tabele pa jih lahko po želji preslikajo neposredno v primerek predmeta.
Poglej si posnetek:
Tu je video vadnica o korakih Transformacije argumenta in tabele Specflow:
Kaj se boste naučili:
Preobrazbe argumenta v korakih
Da bomo lažje razumeli pretvorbe argumentov, poskusimo najprej ugotoviti, kako natančno se Specflow ujema s parametri. Kot smo videli v prejšnjih člankih, smo za primer iskanja v YouTubu podali iskalni izraz kot parameter za izvedbo scenarija.
Ujemanje parametrov se običajno zgodi z regularnim izrazom, ujemajoči se regularni izraz pa nastavi parameter metode na dobavljeni iskalni izraz v koraku.
Najprej poskusimo razumeti, katere so privzeto podprte pretvorbe v programu Specflow in kdaj so lahko pretvorbe argumentov koristne.
Podprte konverzije
Specflow podpira veliko pretvorb iz škatle, tako da pogleda sam podatkovni tip po ujemanju regularnih izrazov. Samodejno lahko skrbi za pretvorbe, kot so - String, integer, GUID, Enums itd.
Spodaj si oglejmo primer nekaterih od teh:
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
V zgornjem vzorcu kode smo poudarili različne vrste vnosa, ki jih posredujemo v korakih, v izvedbah korakov pa se te pretvorijo v ustrezne podatkovne tipe.
Oglejmo si izvedbe korakov za te spodaj (za poenostavitev smo pravkar izdelali konzolo za vsak korak, da ponazorimo, da se podani argument samodejno pretvori v pričakovani 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());
Po izvedbi zgornjega scenarija izhod uspešno natisne vse vrednosti z navedbo, da je bila samodejna pretvorba argumentov v pričakovane tipe podatkov uspešna.
Takole je videti rezultat:
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
Poglejmo primer v akciji, da to razumemo. Podpora, imate aplikacijo, ki pretvori dani čas in ga pretvori v minute. Primer: Če je vnos uporabnika 1 dan - izhod je - 1440, če je vnos uporabnika 1 dan 2 uri 2 minuti, mora biti izhod 1562.
Zdaj lahko vidimo, da je za podporo različnim vrstam vhodov treba napisati različne izvedbe vezave, odvisno od vrste vhodov. Na primer: Za vložke, ki imajo samo dnevni del, bo izveden ločen korak, za vložke z dnevnim, mesečnim delom - izveden bo ločen korak itd.
Poglejmo, kako je to mogoče izvesti z enostopenjsko implementacijo s preoblikovanjem koračnega argumenta, podani vhod pa se preprosto pretvori v objekt časovnega žiga in vrne v prvotni korak, ki se imenuje preoblikovanje korakov.
Pomislite na to kot na prvo raven vnaprejšnjega iskanja vnosa, ki vrne delno preoblikovano vrednost v klicni korak.
Oglejte si funkcijsko datoteko s tremi različnimi vhodnimi različicami z eno samo pretvorbo, tako da jo pretvorite v celoten časovni razpon in vrnete nazaj.
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
Oglejte si označene vrednosti v zgornjem primeru kode. Vse to bo poskrbljeno za popolnoma enako preobrazbo, končni rezultat pa bo preoblikovana vhodna vrednost TimeSpan, ki se pošlje nazaj kličučemu koraku specflow.
Oglejmo si izvajanje Transformacije spodaj:
(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 ogrodje ve, da gre za zavezujočo transformacijo, je treba metodi, ki izvaja pretvorbo argumenta, dodati atribut StepArgumentTransformation.
Druge pomembne točke, ki jih je treba upoštevati pri pretvorbi argumentov, so:
# 1) Korak Argumentne transformacije se izvajajo za vsak ujemajoč se korak, tj. Ne glede na vrsto koraka, tj. Ali je podano, kdaj ali potem, se bo preoblikovanje zgodilo za vsak ujemajoči se regularni izraz.
#two) Če dejanski klicni korak nima ustreznega tipa povratka za vhodni parameter, odvisno od vrste vrnitve transformiranega izhoda, potem pretvorba ne bo izvedena.
Kaj to pomeni, domnevamo, da klicni korak zahteva transformiran vhod, vendar ima omenjeni časovni žig vnosa kot nekaj, kar se ne ujema z vrnitvijo vrste transformirane metode, potem bo ujemanje regularnih izrazov razveljavljeno in pretvorba ne bo izvedena.
Oglejmo si izvedbo klica koraka »Dano«:
private TimeSpan ts; (Given(@'I have entered (.*) into the timestamp to minute converter')) public void GivenIHaveEnteredDaysIntoTheTimestampToMinuteConverter(TimeSpan tsTransformed) { ts = tsTransformed; }
Tu si oglejte vrsto vhodnega parametra, tj. Časovni razpon, ki se ujema s tipom, vrnjenim iz koraka transformacije, če je spremenjen v drug tip. Na primer String, pretvorba argumenta se ne bo zgodila in ujemanje regularnega izraza bo razveljavilo prvotna izvedba koraka.
Nasvet za profesionalce: Pomembno je omeniti, da je treba celotno besedilo, ki ga je treba preoblikovati, dovajati / ujemati s postopnim preoblikovanjem argumentov. Zato bo dani korak zdaj vse možne vhodne formate zavil v en niz in pretvorbeni regularni izraz ga bo pretvoril v objekt TimeSpan in vrnil nazaj.Preglednice spekt
Tabele specflow so način za posredovanje seznama vrednosti funkciji koračne izvedbe. V naših prejšnjih člankih smo s pomočjo načrta scenarijev in primerov preučili način za izvajanje preskusov na podlagi podatkov. Toda to je bilo predvsem za izvajanje scenarija z različnimi vložki.
Tukaj v tabelah gre za posredovanje vseh podatkov naenkrat v obliki tabele v izvedbo koraka, ki podaja podatke.
Na primer, razmislite o primeru, ko preizkušate sistem za upravljanje študentov, in če želite ustvariti nov predmet za študente, morate vnesti veliko podrobnosti, kot so ime, priimek, starost, leto rojstva itd.
Eden od načinov je, da vsako od teh informacij posredujete kot ločen korak, ki bo v bistvu veliko vzorčne kode in v vsakem koraku boste na koncu posodobili isti predmet, ki ga je treba preizkusiti. Drug način je lahko gradnja zapletenega regularnega izraza in poskušanje posredovanja vseh podatkov v istem koraku, vendar je precej nagnjen k napakam in nenavaden.
Tu nam pomagajo mize. Vse vhodne podatke, povezane s študenti, lahko v tabelarni obliki v tabelarni obliki pošljemo v tabelarno funkcijo specflow.
Oglejmo si spodnji vzorec kode za izvedbo funkcije in 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
Podatki tabele so označeni v zgornjem koraku scenarija.
najboljša programska oprema za ustvarjanje diagramov poteka
Specflow ponuja veliko TableHelpers, ki neposredno omogočajo uporabne funkcije, kot je ustvarjanje primerka predmeta iz uporabniških vhodnih podatkov, namesto da bi sami razčlenili vsako polje.
Oglejmo si izvedbo koraka spodaj:
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(); }
Oglejte si zgornji razdelek. Tu je le ena majhna vrstica kode, celoten objekt StudentInfo (to je POCO, ki vsebuje polja za podatke o študentu, tj. Ime, priimek, starost, leto rojstva itd.)
Nekatere druge funkcije / koncepti, povezani s tabelami Specflow, so prikazani spodaj:
# 1) Tabele so lahko vodoravne ali navpične. Navpične tabele so bolj podobne parom ključ-vrednost, v zgornjem scenariju pa bolj podobne preslikavam imena-vrednosti, medtem ko vodoravne tabele vsebujejo vse podatke za objekt v eni vrstici (tako kot smo videli v našem primeru).
#two) Navpične tabele se lahko preslikajo v en sam predmet .NET, medtem ko se vodoravne tabele lahko preslikajo tudi v niz ali zbirko predmetov.
# 3) Vsaka vrednost polja v tabeli mora biti atomska, saj bo preslikana v eno ustrezno polje v razčlenjenem objektu.
Pomembno je omeniti, da tudi če bi samodejno ustvari korakovne vezave s tabelarnimi podatki, bo generator vezav Specflow samodejno upošteval take vhodne vrste in jih prepoznal kot veljavne tabelarne podatke.
Zaključek
V tem članku smo poskušali razložiti dva pomembna in priročna koncepta v programu Specflow.
Prvi korak je Korak Argument transformacije ki omogočajo pretvorbe po meri za argumente Specflow, da se izognejo vzorčni kodi (in omogočajo, da je testni skript videti bolj modulariziran in logičen), druga značilnost, ki smo si jo ogledali, pa je Preglednice spekt ki pridejo prav, ko morate v enem koraku v uporabniku prijazni tabelarni obliki predati veliko polj / podatkov.
V naši prihajajoči vadnici bomo izvedeli več o tem, kako lahko samodejno ustvarite čudovito dokumentacijo s pomočjo Specflowa v različnih oblikah z uporabo odprtokodnih orodij, kot je Pickles, ki so lahko enostavna referenca za vse zainteresirane strani v projektu.
PREV Vadnica | NASLEDNJA Vadnica
Priporočeno branje
- Uvajanje v MongoDB: Vadnica po korakih
- Postopna namestitev in namestitev Appium Studio
- Primer Specflow in Selenium Webdriver od konca do konca
- Vodnik po korakih za integracijo QTP z ALM / QC
- 15 najbolj priljubljenih vprašanj o intervjuju Specflow
- Napredne vezave v skupni rabi in obsegu, kljuke in ponovna uporaba korakov
- Namestite MongoDB v sistem Windows: vodnik po korakih
- Kako integrirati JIRA s qTest: Vodnik po korakih