step argument transformations specflow tables
Stapargumenttransformaties & Specflow-tabellen zelfstudie:
Onze vorige Specflow-tutorial heeft ons er alles over geïnformeerd Gedeelde en scoped-bindingen, haken en hergebruik van stappen in detail. Hier in deze tutorial zullen we meer onderzoeken over Step Argument Transformations in Specflow.
Lees gerust onze Volledige Specflow-trainingsgids voor beginners voor een duidelijk begrip van het concept. Step Argument Transformation-functie van Specflow, stelt een gebruiker in staat om aangepaste transformatie te bieden voor de parameters die in de Steps worden geleverd.
Hiermee kan aangepaste logica worden toegevoegd om invoerparameters om te zetten in een specifieke parameter. Bijvoorbeeld, u kunt rechtstreeks een klasseobject maken op basis van de parameters en het geconstrueerde object retourneren vanuit de transformatiefunctie.
Een ander kenmerk van Specflow dat we het zullen bekijken, zijn Specflow-tabellen waarmee invoergegevens in tabelvorm met een enkele stap kunnen worden doorgegeven en tabelhelpers kunnen het naar wens rechtstreeks aan een objectinstantie toewijzen.
Bekijk de video:
Hier is een videozelfstudie over Step Argument Transformations & Specflow-tabellen:
Wat je leert:
Stap-argumenttransformaties
Laten we, om argumenttransformaties op een betere manier te begrijpen, eerst proberen uit te zoeken hoe Specflow precies overeenkomt met de parameters. Zoals we in onze vorige artikelen hebben gezien, gaven we voor het YouTube-zoekvoorbeeld de zoekterm door als een parameter voor het scenario dat moest worden uitgevoerd.
De parameterafstemming gebeurt meestal via een reguliere expressie en de overeenkomende regex resulteert in het instellen van de method-parameter op de opgegeven zoekterm in de stap.
Laten we eerst proberen te begrijpen wat de standaard ondersteunde conversies zijn in Specflow en wanneer argumenttransformaties nuttig kunnen zijn.
Ondersteunde conversies
Specflow ondersteunt veel conversies uit de doos, door naar het gegevenstype zelf te kijken na de reguliere expressie. Het kan automatisch zorgen voor conversies zoals: String, integer, GUID, Enums, etc.
Laten we hieronder een voorbeeld voor een aantal van deze bekijken:
In het bovenstaande codevoorbeeld hebben we verschillende invoertypen gemarkeerd die we doorgeven in de stappen, en in de stapimplementaties worden deze geconverteerd naar de respectieve gegevenstypen.
Laten we de stapimplementaties voor deze hieronder bekijken (voor de eenvoud hebben we zojuist een console gemaakt voor elk van de stappen om te illustreren dat het opgegeven argument automatisch wordt geconverteerd naar het verwachte type):
Bij het uitvoeren van het bovenstaande scenario, drukt de uitvoer alle waarden met succes af door aan te geven dat de automatische conversie van argumenten naar de verwachte gegevenstypen succesvol was.
Dit is hoe de output eruit ziet:
Argumenttransformaties
Laten we een voorbeeld in actie bekijken om dit te begrijpen. Support, je hebt een applicatie die de opgegeven tijd omzet in minuten. Voorbeeld: Als de gebruikersinvoer 1 dag is - de uitvoer is - 1440, als de gebruikersinvoer 1 dag 2 uur 2 minuten is, dan moet de uitvoer 1562 zijn.
Nu kan worden gezien dat om verschillende soorten invoer te ondersteunen, men verschillende bindende implementaties moet schrijven, afhankelijk van het type invoer. Bijvoorbeeld: Voor inputs die slechts een dagdeel hebben, zal er een afzonderlijke stapimplementatie zijn, voor inputs die een dag-, maanddeel hebben - zal er een afzonderlijke stapimplementatie zijn, enz.
Laten we eens kijken hoe dit kan worden geïmplementeerd door middel van een implementatie in één stap via Step Argument-transformatie en de geleverde invoer wordt eenvoudig omgezet in een tijdstempelobject en teruggebracht naar de oorspronkelijke stap die de stap-transformatie wordt genoemd.
Beschouw het als een regex-scan van het eerste niveau naar uw invoer die de gedeeltelijk getransformeerde waarde retourneert naar de aanroepende stap.
Kijk naar het feature-bestand met 3 verschillende invoervarianten, met een enkele transformatie door het om te zetten in een volledig tijdspanne-object en terug te keren.
Bekijk de gemarkeerde waarden in het bovenstaande codevoorbeeld. Al deze zullen voor exact dezelfde transformatie zorgen en het eindresultaat is een getransformeerde TimeSpan-invoerwaarde die wordt teruggestuurd naar de aanroepende Specflow-stap.
Laten we eens kijken naar de implementatie van de transformatie hieronder:
Om het framework te laten weten dat het een transformatiebinding is, moet StepArgumentTransformation Attribute worden toegevoegd aan de methode die de Argumentconversie implementeert.
De andere belangrijke punten die moeten worden opgemerkt met betrekking tot argumentconversies zijn:
# 1) Stap Argumenttransformaties worden uitgevoerd voor elke matching-stap, d.w.z. ongeacht het type stap, d.w.z. of het gegeven, wanneer of dan is, transformatie zal plaatsvinden voor elke overeenkomende regex.
#twee) Afhankelijk van het retourtype van de getransformeerde uitvoer, zal de transformatie niet plaatsvinden als de daadwerkelijke aanroepstap niet het overeenkomende retourtype heeft voor de invoerparameter.
Wat dit betekent is, stel dat de aanroepende stap een getransformeerde invoer vereist, maar het heeft de genoemde tijdstempel van invoer als iets dat niet overeenkomt met het retourtype van de getransformeerde methode, dan zal de regex-overeenkomst worden overschreven en zal de conversie niet plaatsvinden.
Laten we eens kijken naar de implementatie van het aanroepen van de stap 'Gegeven':
Kijk hier naar het type invoerparameter, d.w.z. de TimeSpan, die overeenkomt met het type dat wordt geretourneerd door de transformatiestap als dit wordt gewijzigd in een ander type. Bijvoorbeeld String, dan zal de argumentconversie niet plaatsvinden en wordt de regex-overeenkomst overschreven door de oorspronkelijke Step-implementatie.
Pro-tip: Een belangrijk punt om op te merken is dat de volledige tekst die moet worden getransformeerd, moet worden ingevoerd / gematcht door stapsgewijze argumenttransformatie. Daarom zal de gegeven stap nu alle mogelijke invoerformaten in een enkele string verpakken en transformatie regex zal deze omzetten in een TimeSpan-object en terugkeren.Specflow-tabellen
Specflow-tabellen zijn een manier om een lijst met waarden door te geven aan de stapimplementatiefunctie. In onze vorige artikelen hebben we gekeken naar de manier om datagestuurde tests te implementeren met behulp van scenario-overzicht en voorbeelden. Maar dat was om het scenario primair met verschillende inputs uit te voeren.
Hier, in tabellen, gaat het erom dat alle gegevens in één keer in tabelvorm worden doorgegeven aan de stapimplementatie die gegevens levert.
Beschouw bijvoorbeeld een voorbeeld waarin u een studentenbeheersysteem test en om een nieuw studentobject te maken, wordt u gevraagd veel gegevens in te vullen, zoals voornaam, achternaam, leeftijd, geboortejaar, enz.
Eén manier is om elk van deze informatie als een afzonderlijke stap door te geven, die in wezen veel standaardcode zal zijn en in elke stap zult u uiteindelijk hetzelfde object bijwerken dat moet worden getest. Een andere manier is het bouwen van een complexe regex en proberen alle gegevens in dezelfde stap door te geven, maar het is nogal foutgevoelig en slecht.
Hier komen tafels ons te hulp. Alle studentgerelateerde invoergegevens kunnen in dezelfde stapimplementatie op een mooie tabelvorm worden verzonden via de tabelfunctie van specflow.
Laten we hieronder een codevoorbeeld bekijken voor de implementatie van functies en stappen:
Tabelgegevens worden gemarkeerd in de bovenstaande scenariostap.
websites om youtube-video's naar mp3 te downloaden
Specflow biedt veel TableHelpers, die direct bruikbare functies mogelijk maken, zoals het maken van een objectinstantie van de door de gebruiker aangeleverde invoergegevens in plaats van elk veld zelf te parseren.
Laten we de implementatie stap hieronder bekijken:
Kijk naar het gemarkeerde gedeelte hierboven. Hier is slechts een kleine regel code, het volledige StudentInfo-object (dit is een POCO met de studentgegevensvelden, d.w.z. voornaam, achternaam, leeftijd, geboortejaar, enz.)
Enkele andere functies / concepten met betrekking tot Specflow-tabellen worden hieronder weergegeven:
# 1) Tabellen kunnen horizontaal of verticaal zijn. Verticale tabellen lijken meer op sleutel-waardeparen en in het bovenstaande scenario meer op naam-waarde-toewijzingen, terwijl horizontale tabellen alle gegevens voor een object in een enkele rij bevatten (net zoals we in ons voorbeeld hebben gezien).
#twee) Verticale tabellen kunnen worden toegewezen aan slechts één .NET-object, terwijl horizontale tabellen ook kunnen worden toegewezen aan een set of verzameling objecten.
# 3) Elke veldwaarde in de tabel moet atomair zijn, aangezien deze wordt toegewezen aan een enkel overeenkomstig veld in het geparseerde object.
Een belangrijk punt om op te merken is dat zelfs als u automatisch genereren step-bindingen met de tabelgegevens, zal de Specflow-bindingsgenerator automatisch rekening houden met dergelijke invoertypen en deze herkennen als geldige tabelgegevens.
Gevolgtrekking
In dit artikel hebben we geprobeerd om 2 belangrijke en handige concepten in Specflow uit te leggen.
De eerste stap is de Stap Argumenttransformaties die aangepaste typeconversies voor Specflow-argumenten mogelijk maken om standaardcode te vermijden (en waardoor het testscript er meer modulair en logischer uitziet) en de tweede functie die we hebben bekeken, is Specflow-tabellen wat handig is wanneer u veel velden / gegevens in één stap moet doorgeven in een gebruiksvriendelijk tabelformaat.
In onze aanstaande tutorial zullen we meer leren over hoe je automatisch prachtige documentatie kunt genereren met Specflow in verschillende formaten met behulp van open source tools zoals Pickles, die een gemakkelijke referentie kunnen zijn voor alle belanghebbenden van het project.
PREV-zelfstudie VOLGENDE zelfstudie
Aanbevolen literatuur
- Implementatie in MongoDB: stapsgewijze zelfstudie
- Stap-voor-stap installatie en configuratie van Appium Studio
- Specflow en Selenium Webdriver End to End-voorbeeld
- Een stapsgewijze handleiding om QTP te integreren met ALM / QC
- Top 15 populaire interviewvragen over Specflow
- Geavanceerde Specflow Shared & Scoped Bindingen, Hooks en Step Hergebruik
- Installeer MongoDB op Windows: een stapsgewijze handleiding
- Hoe JIRA te integreren met qTest: een stapsgewijze handleiding