data driven parameterized testing with spock framework
Ontdek de manieren om datagestuurde of geparametreerde tests te schrijven met het Spock Framework:
In deze Gratis Spock Training Tutorial Series , hebben we er alles over onderzocht Unit testen in Spock en Test armaturen, beweringen en rapportage in onze vorige tutorial.
In deze tutorial zullen we proberen te begrijpen wat geparametriseerde tests zijn en hoe u de ingebouwde functies van Spock kunt gebruiken om datagestuurd testen te bereiken.
Laten we beginnen!!
Bekijk de video-tutorial
Wat je leert:
- Wat zijn parametertests?
- Geparametriseerde tests schrijven met Spock
- Levenscyclus van het 'waar' -blok
- tips & trucs
- Gevolgtrekking
- Aanbevolen literatuur
Wat zijn parametertests?
Voor iedereen die met automatisering / unit tests heeft gewerkt, is datagedreven testen geen nieuwe term.
Geparametriseerde tests zijn niets anders dan alle soorten tests die dezelfde uitvoeringslogica delen en in sommige gevallen alleen verschillen in de invoergegevens en het resultaat.
Voorbeeld: Stel dat u een Rekenmachine-toepassing heeft, om de functionaliteit volledig te testen, wilt u misschien uw tests uitvoeren met een andere invoerset.
Voorbeeld: Negatieve waarden, fractionele getallen, normale gehele getallen, gehele getallen die het max. Toegestane bereik benaderen, enz. Welke invoerwaarden u ook heeft, u wilt dezelfde uitvoeringslogica gebruiken.
Een andere goede reden om geparametriseerde tests te schrijven, is dat het niet alleen een gelukkig pad test, maar ook een foutpad of negatieve scenario's.
Voorbeeld: Stel dat er een applicatie is die teruggeeft of een bepaalde bestandsextensie al dan niet geldig is. Met gegevensgestuurde tests kan de ontwikkelaar snel tests uitvoeren voor ondersteunde bestandsextensies en eventuele foutscenario's of negatieve invoertests.
Nu kunt u traditioneel denken aan het schrijven of kopiëren van de tests voor meerdere invoerwaarden, maar dat is niet de juiste of slimme manier om dit soort testuitvoering te bereiken. Bovendien, naarmate het aantal tests in uw app toeneemt, zullen deze tests moeilijk te onderhouden zijn.
Geparametriseerde tests schrijven met Spock
Het waar: blok
Het where-blok in een Spock-test is het blok dat gegevens bevat voor de geparametreerde test. Het kan optioneel zowel invoer- als verwachte uitvoerwaarden bevatten. Een belangrijk punt om op te merken over dit blok is dat dit het laatste blok in een Spock-test moet zijn.
Dat gezegd hebbende, het kan worden gecombineerd met alle andere blokken zoals gegeven, wanneer en dan, maar zou het laatste blok moeten zijn.
Laten we een voorbeeld bekijken om het beter te begrijpen
We zullen een rekenmachine-applicatie gebruiken die 2 invoerparameters gebruikt en de som van de geleverde invoer retourneert. We zullen een geparametriseerde test schrijven die meerdere inputs en verwachte Output-waarden levert.
In het bovenstaande codevoorbeeld ziet u het volgende:
- 'Waar' -blok dat de gegevens bevat om de test uit te voeren.
- 'Waar' blok is het laatste blok van de test.
- 'Waar' wordt gecombineerd met de andere blokken, d.w.z. gegeven, wanneer en dan.
- Gegevensweergave is een speciale indeling, gegevenstabellen genaamd, die we in de komende secties van deze zelfstudie in detail zullen bekijken.
- De koprij met gegevens zijn in wezen de eigenschappen / invoervariabelen die direct in de test kunnen worden gebruikt. Bijv. Raadpleeg de verklaring in het 'wanneer' -blok waar we deze rechtstreeks hebben gebruikt ingang 1 en ingang 2 als invoerparameters zonder ze expliciet te definiëren.
Datatables gebruiken
Laten we de gegevenstabellen nu in detail proberen te begrijpen. Elke regel van de gegevenstabel vertegenwoordigt gegevens voor een individueel scenario (testuitvoering).
Volgens afspraak, d.w.z. invoerwaarden worden voorafgegaan door een enkele pijp (‘|’), terwijl uitvoerwaarden worden voorafgegaan door een dubbele pijp (‘||’). Dit heeft geen logische betekenis, maar het is een afspraak en het verbetert de leesbaarheid. Dus beide onderstaande voorbeelden zijn waar.
De koptekstrij, zoals hierboven weergegeven, heeft een naam voor elk van de parameters die als testgegevens worden geleverd. Het is belangrijk op te merken dat deze parameternamen niet mogen botsen met bestaande lokale / globale variabelen in de test, anders zullen er compileerfouten om variabelenamen op te lossen.
Een belangrijk punt om op te merken bij het gebruik van gegevenstabellen is dat er minimaal 2 kolommen nodig zijn. Als u slechts één kolom nodig heeft, is een lege kolom met waarden als onderstrepingsteken een tijdelijke oplossing, zoals hieronder.
Het voordeel van dit formaat is eenvoud, leesbaarheid en uitbreidbaarheid. Het toevoegen van een nieuwe gegevensinvoer is net zo eenvoudig als het toevoegen van een nieuwe rij met gegevenswaarden.
Een ander punt om op te merken is dat gegevenstabellen kunnen worden gebruikt om elk type variabelen, klassen, objecten, enums, enz. Te bevatten, wat het nog krachtiger maakt. Aangezien groovy een optioneel getypeerde taal is, impliceren de variabelen in de gegevenstabel, als er geen expliciet type is opgegeven, afhankelijk van het type geleverde gegevens.
Laten we er nog een zien Voorbeeld het gebruik van gegevenstabellen met een lijst met strings als invoer en uitvoer als een telling van elementen in de string.
In het bovenstaande voorbeeld kunt u zien dat we invoer hebben geleverd als een arraylijst met strings en dat de uitvoer de grootte heeft van deze arraylijst. Het geeft dus veel flexibiliteit om verschillende soorten invoergegevens te hebben.
U kunt ook eenvoudig uitdrukkingen vermelden die gegevens van het respectieve invoertype retourneren en ook rechtstreeks in gegevenstabellen gebruiken.
Levenscyclus van het 'waar' -blok
Voor tests die blok- en gegevensmonsters bevatten in de vorm van gegevenstabellen, vertegenwoordigt elke rij gegevens één uitvoering van de testmethode.
Bijvoorbeeld, als er 5 rijen gegevens zijn en de test bevat blokken 'gegeven' en 'wanneer', dan worden voor dergelijke gegevensrij de testblokken één keer uitgevoerd. In totaal zullen er dus in totaal 5 uitvoeringen van de testmethode zijn.
tips & trucs
Laten we eens kijken naar enkele tips en trucs voor tests met parameters tijdens het werken met deze gegevenstabellen.
# 1) De resultaten van de uitvoering van afzonderlijke rijen afzonderlijk weergeven. Zoals we zagen in het levenscyclusgedeelte, is er voor elke rij gegevens één uitvoering van de testcode. Om ervoor te zorgen dat deze rijen of resultaten voor elke rij afzonderlijk worden weergegeven, kan de annotatie '@Unroll' voor dergelijke tests worden gebruikt.
Laten we dit proberen te begrijpen met een voorbeeld:
We zullen dezelfde rekenmachine-applicatie gebruiken met 3 sets invoergegevens die worden geleverd aan de te testen methode.
hashtabel voorbeeld c ++
Laten we, zonder de annotatie '@Unroll', eens kijken hoe het resultaat eruitziet in de terminal (en ook in de op html gebaseerde rapporten). Met dit soort uitvoer wordt het moeilijk om erachter te komen welke set invoer ervoor zorgde dat de test mislukte.
Laten we nu eens kijken hoe de testuitvoer afzonderlijk wordt gerapporteerd voor elke rij nadat de annotatie '@Unroll' is toegevoegd aan de testmethode (die gegevenstabellen als gegevensinvoer heeft).
#twee) Laten we nu eens kijken hoe we zinvolle informatie kunnen toevoegen aan deze gegevensgestuurde tests (in plaats van enkele automatisch toegevoegde indexen zoals in de bovenstaande schermafbeelding).
We kunnen tijdelijke aanduidingen gebruiken voor de invoer- en uitvoereigenschappen (zoals per gegevenstabel) en dan kunnen we de waarden zien die zijn ingevuld in testnamen met gegevens uit gegevenstabellen.
Laten we hetzelfde voorbeeld gebruiken en de testnaam bijwerken om gegevens op te halen uit de invoer en de verwachte uitvoer zoals vermeld in de gegevenstabellen:
Laten we nu eens kijken hoe de uitvoer eruitziet in de terminal en de op HTML gebaseerde rapporten:
Dus, zoals u hier kunt zien, worden de gegevens van invoer en uitvoer nu samen met de testnamen weergegeven wanneer ze worden uitgevoerd. Op deze manier wordt het oplossen van problemen en het debuggen een stuk eenvoudiger omdat het duidelijk aangeeft welke invoer de test heeft laten mislukken of zich misdragen.
Gevolgtrekking
In deze tutorial hebben we geleerd over het schrijven van geparametriseerde tests met het Spock-framework. We hebben ook verschillende kenmerken van gegevenstabellen besproken en hoe ze kunnen worden gebruikt.
Bekijk onze aanstaande tutorial om te weten hoe je Mocks and Stubs met Spock kunt gebruiken !!
PREV-zelfstudie VOLGENDE zelfstudie
Aanbevolen literatuur
- Unit-tests schrijven met Spock Framework
- Spock-interviewvragen met antwoorden (meest populair)
- Spock voor integratie en functioneel testen met selenium
- Spock Mocking and Stubbing (voorbeelden met videotutorials)
- Spock-zelfstudie: testen met Spock en Groovy
- Data Driven Framework in Selenium WebDriver met Apache POI
- Gegevensgestuurde tests uitvoeren met de TestComplete Tool
- Hoe datagestuurd testen werkt (voorbeelden van QTP en selenium)