TestAutomatisering & PerformanceTesten

SpecFlow Extensies voor Dummies

TechTalk heeft voor SpecFlow natuurlijk al een handige set aan extensies uitgebracht die vooral het gebruik van eigen datatypes in combinatie met SpecFlow steps mogelijk maken. Dit is slimme, maar vrij geavanceerde set waarbij je best wel wat ervaring moet hebben met zowel het gebruik van SpecFlow als C#. De beginnende gebruiker zal eerder behoefte hebben om SpecFlow tables in meer simpele maar generieke types om te zetten als collecties. Die methoden worden niet standaard geleverd in de SpecFlow library, waarschijnlijk omdat ze als triviaal gezien worden door het ontwikkel team.

De .ToDictionary Extensie

Een van de fijnste data collections in C# is natuurlijk de Dictionary. Een key/value collectie waarbij de key uniek is. Daarom is het fijn om een verticale SpecFlow.Table om te kunnen zetten in een Dictionary. Hiervoor gebruiken we een extension method. Hiervoor maken we eerst een extension class:

Nu kunnen we onze eerste extension method aanmaken; een ToDictionary extension dat een SpecFlow Table omzet naar een dictionary:

Deze methode neemt van iedere rij uit een verticale SpecFlow tabel de eerste twee kolommen. De eerste kolom worden de key, de tweede kolom de value van de dictionary.   We hadden dit natuurlijk ook in een one-line Linq expressie kunnen doen, maar dat gaat het doel van simpel en begrijpelijk voorbij.

Houdt er rekening mee dat als er foute waarden meegegeven worden, zoals een niet unieke key, de methode een standaard “An element with the same key already exists in the Dictionary<string, string>.” exceptie gooit.

Laten we hier een test voor schrijven om te controleren of het werkt:

En we maken de drie steps aan die erbij horen. In deze steps gebruiken we de extensie  Table.ToDictionary() methode, de extensie die we net hebben aangemaakt. Mocht dit in eerste instantie niet werken: vergeet niet de library met de extensies te importeren.

Verder gebruiken we in deze drie steps het ScenarioContext.Current object om de Table en uiteindelijk de Dictionary door te geven tussen de steps. Het ScenarioContext.Current object is zelf ook een dictionary van het type <string, object>, je kan er dus elke type object ingooien wat je maar wilt. Als je een object terug wilt halen moet je wel aangeven wat voor type het is, “casten”, om alle methodes en properties van dit object weer te gebruiken. Dit zie je hieronder gebeuren met behulp van het type tussen haakjes:
var table = (Table)ScenarioContext.Current["table"]

En natuurlijk de proef op de som, het runnen van de test:

 

De .ToDataTable Extensie

Een ander prettig datatype voor als je meer data hebt, is de DataTable. Vergelijkbaar met de Dictionary, maar dan twee dimensionaal in plaats van een dimensionaal.

Hiervoor maken we een ToDataTable extensie op een vergelijkbare manier als we de ToDictionary extensie hebben gemaakt:

Deze methode verblijft in de TableExtension class, want het is een extensie op het SpecFlow.Table object.

Laten we er een test voor schrijven:

We recyclen de Given step, maar voor de When en Then steps moeten we twee steps aanmaken:

In deze steps gebruiken we zowel de Table.ToDictionary extensie als de nieuwe Table.ToDataTable extensie. In de Then step vergelijken we een Dictionary op overeenkomst met een DataTable.Row. Deze step gaat er wel vanuit dat de data welgevormd is. Als bijvoorbeeld een key uit de dictionary niet bestaat als column in de datatable krijg je een standaard exceptie toegeworpen.

Laten we de test uitvoeren:

Conclusie

Soms is het handig als je een SpecFlow.Table object kan omzetten naar een meer C# eigen object. Twee voor de hand liggende object typen zijn de Dictionary en de DataTable. Met behulp van extensions kan je makkelijk het Table object uitbreiden om te converteren naar een object naar keuze.

De code behorend bij deze exercitie vind je in SpecFlow Extensies voor Dummies, de code.

Dit bericht is geplaatst in Testautomatisering en getagd in SpecFlow Test Automation Testautomatisering

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Nieuws

Blijf op de hoogte

TNW 2023

26/06/2023

Het Next Web (TNW) Conference is een jaarlijks evenement dat professionals uit de wereld van technologie, innovatie en ondernemerschap samenbrengt. Dit jaar vond TNW 2023 plaats in Amsterdam (eigenlijk Zaandam). Ik kreeg de kans om aanwezig te zijn en wil graag mijn ervaringen delen in deze blogpost. Het centrale thema van dit tweedaagse evenement was […]

06/06/2023

Work hard, play hard! Dat laatste hebben we vrijdag 2 juni letterlijk genomen. We zijn naar een museum geweest, het Nationaal Videogame Museum in het stadshart van Zoetermeer. Voor gamefanaten is dit echt een feestje. We kregen een interessante rondleiding waarbij we van alles te weten kwamen over de ontwikkeling van videogames, vanaf de vroege […]

testRigor

17/05/2023

Zijn we klaar voor AI-gestuurde testautomatiseringstools? Een blik op testRigor. Bij PerformanceArchitecten vinden we het belangrijk om continu onze kennis te ontwikkelen en bij te houden. Daarom organiseren we elke maand een kennismiddag waarbij we ons verdiepen in verschillende onderwerpen die relevant zijn voor ons werk. Onze laatste kennismiddag stond in het teken van testRigor. […]

SRE – Site Reliability Engineering

19/04/2023

Tijdens de laatste maandelijkse kennismiddag van PerformanceArchitecten hebben we ons verdiept in het onderwerp SRE (Site Reliability Engineering). SRE combineert software engineering en operationele principes om grootschalige en complexe systemen te bouwen en beheren.   Ter introductie hebben we verschillende video’s bekeken waarin de definitie van SRE werd gegeven en het verschil tussen SRE en […]

NeoLoad RealBrowser

02/04/2023

Bij PerformanceArchitecten vinden we het belangrijk om continu onze kennis te ontwikkelen en bij te houden. Daarom organiseren we elke maand een kennismiddag, waarbij we ons verdiepen in verschillende onderwerpen die relevant zijn voor ons werk. Onze laatste kennismiddag stond in het teken van het RealBrowser “protocol” binnen het performancetesttool NeoLoad van Tricentis. Voor degenen […]

JMeter en Groovy

06/03/2023

Als je binnen JMeter iets wilt doen wat niet standaard in de tool zit, gebruik je plugins of ga je zelf code schrijven. In het geval dat je zelf code gaat schrijven, wordt aangeraden de groovy functie en JSR223 sampler te gebruiken. Ik wil hieronder graag bespreken welke mogelijkheden deze 2 opties je bieden, maar […]

Kennismiddag: ChatGPT

19/02/2023

Tijdens de maandelijkse kennismiddag op 14 februari bespraken collega’s de ontwikkelingen rondom ChatGPT, een tool die AI gegenereerde resultaten kan opleveren. Het werd onderzocht of ChatGPT ondersteuning kon bieden bij SEO en scripting. Hoewel de tool potentieel heeft, is verdere input en domeinkennis nog steeds nodig. ChatGPT is geen perfecte oplossing, maar kan wel handig zijn bij de uitvoering van werk. Het was een geslaagde middag en er wordt uitgekeken naar nieuwe onderwerpen voor de volgende kennismiddag.

16/09/2022

Performancetesten overdragen naar teams We zien bij onze klanten een duidelijke verschuiving van verantwoordelijkheden van centrale teams naar DevOps teams. “You build it, you run it” zorgt ervoor dat teams niet alleen zelf software moeten bouwen, testen en in productie brengen, maar ook verantwoordelijk zijn voor hoe de applicatie in productie draait. Eén van de […]

Azure Bicep

09/12/2021

Introductie Binnen de Azure omgeving is er veel mogelijk zoals bijvoorbeeld het runnen van pipelines en het creëren van infrastructuur. Maar om van deze mogelijkheden gebruik te kunnen maken zijn er uiteraard resources nodig. Deze resources zijn manueel via de portal aan te maken, maar ook door gebruik te maken van ARM (Azure Resource Manager) […]

Azure DevOps pipeline performance quality gate

31/10/2021

In mijn vorige blogs heb ik geschreven over Gatling simulaties in een executable jar en Azure DevOps pipeline met gatling. In het laatste blog had ik al aangegeven dat ik de performancetest onderdeel wilde laten zijn van de CD pipeline door het toevoegen van quality gates. Oftewel, ik wil dat de resultaten van de performance […]

Introductie in Pytest

07/04/2021

Inleiding Voor mijn huidige project ben ik bezig met het aspect kwaliteit in combinatie met Big Data. In zo’n modern project wordt hierbij ook AI gebruikt. Het inrichten van AI wordt vaak niet gedaan door ontwikkelaars, maar door data scientists die een omgeving nodig hebben wat het AI werk kan doen. De programmeertaal Python is […]

Website performance, belangrijker dan je denkt

27/11/2020

Inleiding We kennen het allemaal: je bent aan het surfen om iets te kopen. Duurt het langer dan 1 à 2 seconden dan haak je al snel af. Desondanks is performance is vaak onderbelicht in web-ontwikkeling. De nadruk ligt vaak op functionaliteit en minder op performance. Dat terwijl een slechte performance behoorlijke impact heeft op […]