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

Workshop ‘Stop de Magie!’ bij Qquest

04/12/2018

In het kader van de 4e techday van Qquest heeft Chris met ondersteuning van HenkJaap een workshop gegeven. Basis was de presentatie en demo ‘No more magic’ van Bas en Chris, welke al een groot succes was op de TestAutomationDay en TestNet. Centraal bij het onderwerp ‘No more Magic’ staat het idee dat er bij […]

Visual Regression Testing – Wat is het en wat heb je eraan?

07/11/2018

Visual Regression Testing, of visuele regressie testen, is een categorie van testen die zich focust op het identificeren van visuele wijzigingen tussen iteraties of versies van een website. Dit kan handmatig door schermen of schermafdrukken te vergelijken, maar het is beter herhaalbaar en sneller te testen door dit automatisch te doen. Het mooiste is om deze testen als een […]

Meer efficiency en flexibiliteit in API’s

04/10/2018

Er wordt steeds meer gebruik gemaakt van GraphQL API. Tijdens mijn laatste opdracht heb ik hier dan ook mee gewerkt.. Graag deel ik mijn ervaringen hierover in een aantal blogs. In deze eerste blog wil ik het graag hebben over de uitdagingen met REST API en hoe GraphQL deze oplost. Maar eerst even een korte […]

Impact tooling op performance: Dynatrace

21/09/2018

In deze blog geef ik kort de resultaten weer van een onderzoekje dat ik bij één van mijn laatste opdrachten heb gedaan naar de impact van het gebruik van de tool Dynatrace op de infrastructuur waar het op draait. Mocht je gebruik maken van tooling als Dynatrace of op een andere manier geïnteresseerd zijn in […]

Tips en tricks voor Protractor

06/09/2018

Vanuit PerformanceArchitecten doen we graag aan kennisdeling. Van tool reviews tot aan complete best practices maar ook van een aantal simpele tips en tricks die je kan gebruiken in je dagelijkse werk. Vandaag in die laatste categorie voor gebruikers van Protractor: (Javascript) timing issues en het managen van de volgorde van uitvoeren van actions. Inleiding […]

PerformanceArchitecten @The Next Web conferentie

04/07/2018

Was het een interessante conferentie? Beslist. Heeft TNW PerformanceArchitecten op nieuwe ideeën gebracht? Zeker. Heb jij TNW gemist, maar wil je je wel in vijf minuten op de hoogte laten brengen? Lees dan snel verder! En mocht je er wel zijn geweest.. We zijn benieuwd naar jouw beeld! Wat is de Next Web? Voor hen […]

De ‘waar begin ik met testautomatisering’ handleiding.

11/04/2018

Wij worden regelmatig gevraagd te helpen bij het opzetten of verbeteren van testautomatisering in een Agile omgeving bij een klant. En hoeveel ervaring je ook hebt, wat je opdracht ook precies inhoudt en in welk team je ook terechtkomt, het is altijd even zoeken waar te beginnen. Onderstaand stappenplan ondersteunt hierbij. PerformanceArchitecten organiseert veel kennissessies. Zo […]

Wat is het Bug Filter?

26/03/2018

Een algemeen gedeelde opvatting over het doel van testen binnen software ontwikkeling is “het tegenhouden van bugs en het afdekken van risico’s”. Over hoe dit vervolgens het best valt te organiseren, bestaan er echter vaak veel meningsverschillen. In deze 2 minute snack sta ik graag even stil bij een inzicht dat verhelderend werkt in deze […]

Testen? Begin bij de basis! | Het belang van unittesten

19/02/2018

Inleiding Mijn vrouw en ik zijn op dit moment bezig met het bouwen van een huis. In dit geval niet als bouwvakker of aannemer, maar dan toch wel als opdrachtgever. Spannend vinden we het zeker, leuk ook. Wat heeft dit te maken met unittesten zou je denken. Nou, het volgende… Het huis wordt namelijk gebouwd […]

De Absolute Beginners Guide voor API Testen met rest-assured.io

16/01/2018

Omdat het moeilijk was om een eenvoudige tutorial te vinden voor rest-assured.io, ben ik na eerst zelf uit te vinden hoe het werkt, maar eens begonnen met een tutorial die de absolute basics uitlegt over rest-assured. In deze post laat ik zien hoe we op een zo eenvoudig mogelijke manier een API test kunnen maken met […]

APACHE MPM (op *nix servers)

07/11/2017

Benieuwd naar de impact van het wijzigen van Apache MPM Prefork naar Worker? Lees dan door! Bij één van onze klanten heb ik dit onderzocht. Omdat dit ook interessant kan zijn voor anderen, deel ik mijn resultaten en ervaringen graag. Het is misschien wat technisch allemaal, maar voor performancetesters, de doelgroep, is het vast goed […]

Performancetesten en CI/CD, gaat dat samen?

13/10/2017

De afgelopen najaarseditie van Testnet stond onder het thema Continuous Everything vooral stil bij CI/CD en natuurlijk testen. Gezien DevOps en CI/CD ook grote invloed hebben op het vakgebied performance (testen), zijn wij blij dat we vanuit PerformanceArchitecten een bijdrage mochten leveren door middel van het delen van onze visie hierop. Onze collega René Meijboom […]