TestAutomatisering & PerformanceTesten

SpecFlow Extensies voor Dummies, de code

Hieronder vind je de code die behoort bij het artikel SpecFlow Extensies voor Dummies

 Feature File:

Feature: Table Transformations
  In order to have convenient datatypes
  As a SpecFlow user
  I want to transform tables into dictionaries or datatables

Scenario: Transform a vertical table into a dictionary
  Given I have the following table:
    | Movie      | Rating |
    | The Matrix | 8.5    |
    | It         | 8.1    | 
  When I transform this table into a dictionary
  Then the dictionary should have a key "The Matrix" with a value "8.5"
  And the dictionary should have a key "It" with a value "8.1"

Scenario: Transform a table into a datatable
  Given I have the following table:
    | Movie      | Rating | Director          |
    | The Matrix | 8.5    | The Wachowskis    |
    | It         | 8.1    | Tommy Lee Wallace |
  When I transform this table into a datatable
  Then the datatable should have the following record:
    | Column   | Value          |
    | Movie    | The Matrix     |
    | Rating   | 8.5            |
    | Director | The Wachowskis |
  And the datatable should have the following record:
    | Column   | Value             |
    | Movie    | It                |
    | Rating   | 8.1               |
    | Director | Tommy Lee Wallace | 

Steps Definition:

using System.Collections.Generic;
using System.Linq;
using TechTalk.SpecFlow;
using SpecFlowExamples.Extensions;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Data;

namespace SpecFlowExamples.Steps
{
    [Binding]
    public class TableSteps
    {
        [Given(@"I have the following table:")]
        public void GivenIHaveTheFollowingTable(Table table)
        {
            ScenarioContext.Current.Add("table", table);
        }

        [When(@"I transform this table into a dictionary")]
        public void WhenITransformThisTableIntoADictionary()
        {
            var table = (Table)ScenarioContext.Current["table"];
            var dictionary = table.ToDictionary();
            ScenarioContext.Current.Add("dictionary", dictionary);
        }

        [Then(@"the dictionary should have a key ""(.*)"" with a value ""(.*)""")]
        public void ThenTheDictionaryShouldHaveAKeyWithAValue(string key, string value)
        {
            var dictionary = (Dictionary<string, string>)ScenarioContext.Current["dictionary"];
            Assert.IsTrue(dictionary.ContainsKey(key), "The dictionary contains key " + key);
            Assert.AreEqual(value, dictionary[key]);
        }
 
        [When(@"I transform this table into a datatable")]
        public void WhenITransformThisTableIntoADatatable()
        {
            var table = (Table)ScenarioContext.Current["table"];
            var dataTable = table.ToDataTable();
            ScenarioContext.Current.Add("datatable", dataTable);
        }

        [Then(@"the datatable should have the following record:")]
        public void ThenTheDatatableShouldHaveTheFollowingRecord(Table table)
        {
            var dataTable = (DataTable)ScenarioContext.Current["datatable"];
            var expectedRecord = table.ToDictionary();
            foreach (DataRow row in dataTable.Rows)
            {
                var matchingRowFound = true;
                foreach (var keyValuePair in expectedRecord)
                {
                    var column = keyValuePair.Key;
                    var value = keyValuePair.Value;
                    if (!value.Equals(row[column]))
                    {
                        matchingRowFound = false;
                        break;
                    }
                }
                if (matchingRowFound)
                    return;
            }
            Assert.Fail("The table does not contain the record.");
        }
    }
}

SpecFlow.Table Extension:

using System.Collections.Generic;
using System.Data;
using TechTalk.SpecFlow;

namespace SpecFlowExamples.Extensions
{
    static class TableExtensions
    {
        // Hier komen alle table extension methods

        public static Dictionary<string, string> ToDictionary(this Table table)
        {
            var dictionary = new Dictionary<string, string>();
            foreach (var row in table.Rows)
            {
                dictionary.Add(row[0], row[1]);
            }
            return dictionary;
        }

        public static DataTable ToDataTable(this Table table)
        {
            var dataTable = new DataTable();
            foreach (var header in table.Header)
            {
                dataTable.Columns.Add(header, typeof(string));
            }
            foreach (var row in table.Rows)
            {
                var newRow = dataTable.NewRow();
                foreach (var header in table.Header) {
                    newRow.SetField(header, row[header]);
                }
                dataTable.Rows.Add(newRow);
            }
            return dataTable;
        }
    }
}

 

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

Geef een reactie

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

Nieuws

Blijf op de hoogte

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 […]

Een eerste indruk van Gauge

08/09/2017

Tijdens één van onze kennismiddagen hebben we gekeken naar het testtool Gauge. Doel van de sessie was om een beeld te krijgen wat de toegevoegde waarde van Gauge is voor een tester. Benieuwd naar onze ervaringen? Lees dan snel verder! Gauge is een open source project, gesponsord door ThoughtWorks en belooft in het kort het […]

Test Automation Framework BDD

16/06/2017

De afgelopen tijd heb ik in een opdracht collega’s mogen adviseren over de positieve impact van het Test Automation Framework BDD rondom het thema Agile. In een vorige blog ‘Transformation’ is te lezen wat BDD voor mij betekent en hoe BDD voor synergie zorgt tussen verschillende disciplines binnen Agile-teams met als doel het leveren van kwalitatief hoogwaardig […]