data driven parameterized testing with spock framework
Utforsk måtene å skrive datadrevne eller parametrerte tester med Spock Framework:
I dette Gratis opplæringsserie for Spock Training , vi utforsket alt om Enhetstesting i Spock og test inventar, påstander og rapportering i vår forrige opplæring.
I denne veiledningen vil vi prøve å forstå hva parametrerte tester er, og hvordan du kan utnytte de innebygde funksjonene i Spock for å oppnå datadrevet testing.
La oss begynne!!
Se videoopplæringen
Hva du vil lære:
- Hva er parametrerte tester?
- Skrive parametrerte tester med Spock
- Livssyklusen til 'hvor' -blokken
- Tips og triks
- Konklusjon
- Anbefalt lesing
Hva er parametrerte tester?
For alle som har jobbet med automatisering / enhetstester, er ikke datadrevet testing et nytt begrep.
Parameteriserte tester er ingenting, men det er noen form for tester som har samme kjøringslogikk og som i noen tilfeller bare skiller seg fra inngangsdata og utfall.
Eksempel: Anta at du har en kalkulatorapplikasjon, for å teste funksjonaliteten helt, vil du kanskje kjøre testene dine mot forskjellige inngangssett.
Eksempel: Negative verdier, brøktal, normale heltall, heltall nærmer seg maksimalt tillatt område osv. Uansett hvilke inngangsverdier du har, vil du kjøre samme utførelseslogikk.
En annen god grunn til å skrive parametrerte tester er at den ikke bare tester en lykkelig bane, den tester også feilbane eller negative scenarier.
Eksempel: Anta at det er et program som returnerer om en gitt filtype er gyldig eller ikke. Datadrevne tester kan raskt gjøre det mulig for utvikleren å utføre tester for støttede filutvidelser og eventuelle feilscenarier eller negative inngangstester.
Nå kan du tradisjonelt tenke på å skrive eller kopiere over testene for flere inngangsverdier, men det er ikke den riktige eller smarte måten å oppnå denne typen testutføring på. Dessuten, ettersom antall tester begynner å øke i appen din, blir disse testene vanskelige å vedlikeholde.
Skrive parametrerte tester med Spock
Hvor: blokk
Hvor-blokken i en Spock-test er blokken som inneholder data for den parametriserte testen. Den kan valgfritt inneholde både inngangs- og forventede utgangsverdier. Et viktig poeng å merke seg om denne blokken er at dette skal være den siste blokken i en Spock-test.
Når det er sagt, kan det kombineres med alle andre blokker som gitt, når og da, men skal være den siste blokken.
La oss se på et eksempel for å forstå det bedre
Vi bruker et kalkulatorprogram som tar to inngangsparametere og returnerer summen av de leverte inngangene. Vi skriver en parameterisert test som leverer flere innganger og forventede utgangsverdier.
def 'sample parameterized test'() input2
I kodeeksemplet ovenfor kan du se følgende:
- 'Hvor' -blokk som inneholder dataene som testen skal kjøre.
- “Hvor” blokken er den siste blokken i testen.
- 'Hvor' kombineres med de andre blokkene, dvs. gitt, når og da.
- Datarepresentasjon er et spesielt format kalt datatabeller som vi vil se detaljert på i de kommende delene av denne opplæringen.
- Overskriftsrad med data er egentlig egenskapene / inngangsvariablene som kan brukes direkte i testen. F.eks. Se utsagnet i 'når' -blokken der vi har brukt direkte inngang1 og inngang2 som inngangsparametere uten å definere dem eksplisitt.
Bruke datablader
La oss prøve å forstå datatabellene i detalj nå. Hver linje i datatabellen representerer data for et individuelt scenario (testutførelse).
Etter konvensjon, dvs. inngangsverdier går foran et enkelt rør (‘|’) mens utgangsverdiene er foran med dobbeltrør (‘||’). Dette har ingen logisk betydning, men det er konvensjon og forbedrer lesbarheten. Dermed stemmer begge eksemplene nedenfor.
input1 |input2 |expectedResult 10 |15 |25 -4 |6 |2 input1 |input2 || expectedResult 10 |15 || 25 -4 |6 || 2
Overskriftsraden, som vist ovenfor, har et navn for hver av parametrene som leveres som data for å teste. Det er viktig å merke seg her at disse parameternavnene ikke skal kollidere med noen eksisterende lokale / globale variabler i testen, ellers vil det være kompileringsfeil for å løse variabelnavn.
Et viktig poeng å merke seg når du bruker datatabeller er at det kreves minst to kolonner. Hvis du bare har behov for en kolonne, er en tom kolonne med verdier som understreket karakter en løsning som nedenfor.
input1 ||_ 10 ||_ -4 ||_
Fordelen med dette formatet er enkelhet, lesbarhet og utvidbarhet. Å legge til en ny datainngang er like enkelt som å legge til en ny rad med dataverdier.
Et annet poeng å merke seg her er at datatabeller kan brukes til å inneholde alle typer variabler, klasser, objekter, enums, etc. som gjør det enda kraftigere. Ettersom groovy er et valgfritt språk, hvis en eksplisitt type ikke er spesifisert, innebærer variablene i datatabellen avhengig av hvilken type data som leveres.
La oss se en annen Eksempel ved hjelp av datatabeller med en liste over strenger som inngang og utgang som antall elementer i strengen.
def 'sample parameterized test with list data type'() when: def actualCount = input1.size() then: actualCount == expectedCount where: input1
I eksemplet ovenfor kan du legge merke til at vi har gitt input som en array-liste over strenger og output er på størrelse med denne array-listen. Dermed gir det mye fleksibilitet å ha inngangsdata av forskjellige typer.
Du kan også ganske enkelt nevne alle uttrykk som returnerer data av den respektive inngangstypen og bruker direkte i datatabeller også.
Livssyklusen til 'hvor' -blokken
For tester som inneholder blokkerings- og datasampler i form av datatabeller, representerer hver datarad en utførelse av testmetoden.
For eksempel, hvis det er 5 rader med data og testen inneholder 'gitt' og 'når' blokker, vil testblokkene for slike dataserier bli utført en gang. Så samlet sett vil det være totalt 5 henrettelser av testmetoden.
Tips og triks
La oss se noen tips og triks for parameteriserte tester mens vi arbeider med disse datatabellene.
# 1) Viser resultatene av individuell radutførelse separat. Som vi så i livssyklus-delen, er det en utførelse av testkoden for hver rad med data. For å få disse radene eller resultatene vist separat for hver slik rad kan '@Unroll' -kommentarer brukes til slike tester.
La oss prøve å forstå dette med et eksempel:
Vi bruker samme kalkulatorapplikasjon med 3 sett med inngangsdata som blir levert til metoden som testes.
help desk intervju spørsmål og svar
def 'sample parameterized test'() -20
Uten '@Unroll' -kommentar, la oss se hvordan resultatet ser ut i terminalen (så vel som de html-baserte rapportene). Med denne typen utdata blir det vanskelig å finne ut hvilket sett med input som fikk testen til å mislykkes.
La oss nå se hvordan testutdataene rapporteres separat for hver rad etter å ha lagt til '@Unroll' -kommentar til testmetoden (som har datatabeller som datainngang).
#to) La oss nå forstå hvordan vi kan legge til meningsfull informasjon til disse datadrevne testene (i stedet for noen automatisk tilføyde indekser som på skjermbildet ovenfor).
Vi kan bruke plassholdere for inngangs- og utgangsegenskapene (i henhold til datatabellen), og deretter kan vi se verdiene som er fylt ut i testnavn med data fra datatabeller.
La oss bruke det samme eksemplet og oppdatere testnavnet for å få data fra input og forventet output som nevnt i datatabellene:
@Unroll def 'result of adding #input1 & #input2 should be #expectedResult'() given: def app = new CalculatorApp() when: def resultSum = app.add(input1, input1) then: resultSum == 2 * input1 where: input1
La oss nå se hvordan utgangen ser ut i terminalen og de HTML-baserte rapportene:
Så, som du kan se her, vises nå dataene fra input og output sammen med testnavnene når de blir utført. På denne måten gjør det feilsøking og feilsøking mye lettere, da det tydelig indikerer hvilken inngang som fikk testen til å mislykkes eller oppføre seg feil.
Konklusjon
I denne opplæringen lærte vi om å skrive parametrerte tester med Spock-rammeverket. Vi diskuterte også ulike funksjoner i datatabeller og hvordan de kan brukes.
Ta en titt på den kommende veiledningen vår for å vite hvordan du bruker Mocks and Stubs med Spock !!
PREV Opplæring | NESTE veiledning
Anbefalt lesing
- Skriveenhetstester med Spock Framework
- Spock Intervjuespørsmål med svar (mest populære)
- Spock for integrasjon og funksjonstesting med selen
- Spock Mocking and Stubbing (Eksempler med videoveiledninger)
- Spock Tutorial: Testing With Spock And Groovy
- Datadrevet rammeverk i Selen WebDriver ved hjelp av Apache POI
- Hvordan utføre datadrevet testing ved hjelp av TestComplete Tool
- Hvordan datadrevet testing fungerer (eksempler på QTP og selen)