KEMBAR78
Automated testing with SpecFlow | PPTX
Automatisch Testen met
SpecFlow
Martijn Vermaat
Hoeveel van jullie hebben
automatische tests ingericht op jullie
project?
SpecFlow is een framework om
leesbare tests te schrijven
‘SpecFlow’ test
1. Setup
2. Execution
3. Assertion
Een test heeft 3 stappen
1. Given a situation
2. When an action is performed
3. Then something happened
In SpecFlow werkt dat zo:
SpecFlow scenario’s kunnen
handig per feature worden
ingedeeld
Feature
Scenario A
Scenario B
Scenario C
Opportunity Management
Salesperson can create
a quote for proposal
Salesperson creates an
order after a quote has
been accepted
Sales manager can
view opportunity
pipeline of his
department
Achter de SpecFlow scenario’s zit
c# code
• Zet een BindingAttribute boven je class
• Zet 1 of meerdere attributes boven je method
• GivenAttribute, WhenAttribute, ThenAttribute
• De tekst in de attribute wordt gematched met de tekst in het scenario.
• Je kan parameters opgeven door RegEx expressies in je attributes
• De parameters voor je method zijn in volgorde op basis van de attribute
tekst. Waarbij de table altijd achteraan komt
Hoe werkt de koppeling tussen scenario’s en code?
Je kan op allerlei manieren
inhaken op SpecFlow
• Zet een Before/After xxxxx attribute boven je method
• Test Run, Feature, Scenario, Block, Step
• Mogelijkheid tot filteren met tags
Hooks
• Voeg een parameter toe aan je constructor
• Object wordt door SpecFlow geïnstantieerd
• De scope van het object is een scenario
Dependency Injection
• Op basis van Tags een transformatie uitvoeren op je
app.config
• Bijvoorbeeld de browser laten wisselen op basis van tags
App.config transformaties
Er zijn libraries beschikbaar
• SpecFlow helper library
• SpecFlow library voor CRM
• Nuget: ‘Vermaat.Crm.Specflow’
• https://github.com/mVermaat/Crm.Specflow
• EasyRepro
• UI Testing library voor CRM (vanaf 8.1)
• Nuget: ‘Dynamics365.UIAutomation.Api’
• https://github.com/Microsoft/EasyRepro
Met een paar simpele stappen
kan je de meeste scenario’s al
afdekken
Given a {entityname} named {alias} with the following
values
• EntityName bepaald het type records
• Alias wordt gebruikt om naar dit record te
refereren in volgende stappen
• De table bevat een lijst met de attributen van het
record.
• De CRM metadata API wordt gebruikt om display
names om te zetten naar technische namen
Given
Met een paar simpele stappen
kan je de meeste scenario’s al
afdekken
When {alias} is updated with the following values
• Meestal moet je een record updaten dat je in je
setup gemaakt hebt. Je kan simpel via het alias
refereren naar welk record je wilt updaten
• De tabel bepaald welke velden worden aangepast
• De CRM metadata API wordt gebruikt om display
names om te zetten naar technische namen
When
Met een paar simpele stappen
kan je de meeste scenario’s al
afdekken
Then an {entityname} exists with the following values
• Controleren of er een bepaald record besaat in
CRM
Then
Then {alias} has the following values
• Controleren of een record dat eerder in de tests
gebruikt is nu een aantal specifieke waardes heeft
Then
Soms moet/wil je specifieke
stappen schrijven
• Voor speciale acties in CRM zoals het kwalificeren
van leads of het sluiten van opportunities
• Wanneer je een set van stappen heel vaak
herhaalt in verschillende tests
• Bijvoorbeeld het opzetten van een account
met een set van opportunities, quotes en
orders
• Te veel stappen zorgt voor onderhoudsproblemen
en het maakt het lastig om de goede stap te
bepalen bij het schrijven van tests.
Wanneer schrijf ik specifieke stappen?
SpecFlow heeft mooie
rapportages over de uitvoer van
de tests
Een CDD Review process in
CRM

Automated testing with SpecFlow

  • 1.
  • 2.
    Hoeveel van julliehebben automatische tests ingericht op jullie project?
  • 3.
    SpecFlow is eenframework om leesbare tests te schrijven ‘SpecFlow’ test 1. Setup 2. Execution 3. Assertion Een test heeft 3 stappen 1. Given a situation 2. When an action is performed 3. Then something happened In SpecFlow werkt dat zo:
  • 4.
    SpecFlow scenario’s kunnen handigper feature worden ingedeeld Feature Scenario A Scenario B Scenario C Opportunity Management Salesperson can create a quote for proposal Salesperson creates an order after a quote has been accepted Sales manager can view opportunity pipeline of his department
  • 5.
    Achter de SpecFlowscenario’s zit c# code • Zet een BindingAttribute boven je class • Zet 1 of meerdere attributes boven je method • GivenAttribute, WhenAttribute, ThenAttribute • De tekst in de attribute wordt gematched met de tekst in het scenario. • Je kan parameters opgeven door RegEx expressies in je attributes • De parameters voor je method zijn in volgorde op basis van de attribute tekst. Waarbij de table altijd achteraan komt Hoe werkt de koppeling tussen scenario’s en code?
  • 6.
    Je kan opallerlei manieren inhaken op SpecFlow • Zet een Before/After xxxxx attribute boven je method • Test Run, Feature, Scenario, Block, Step • Mogelijkheid tot filteren met tags Hooks • Voeg een parameter toe aan je constructor • Object wordt door SpecFlow geïnstantieerd • De scope van het object is een scenario Dependency Injection • Op basis van Tags een transformatie uitvoeren op je app.config • Bijvoorbeeld de browser laten wisselen op basis van tags App.config transformaties
  • 7.
    Er zijn librariesbeschikbaar • SpecFlow helper library • SpecFlow library voor CRM • Nuget: ‘Vermaat.Crm.Specflow’ • https://github.com/mVermaat/Crm.Specflow • EasyRepro • UI Testing library voor CRM (vanaf 8.1) • Nuget: ‘Dynamics365.UIAutomation.Api’ • https://github.com/Microsoft/EasyRepro
  • 8.
    Met een paarsimpele stappen kan je de meeste scenario’s al afdekken Given a {entityname} named {alias} with the following values • EntityName bepaald het type records • Alias wordt gebruikt om naar dit record te refereren in volgende stappen • De table bevat een lijst met de attributen van het record. • De CRM metadata API wordt gebruikt om display names om te zetten naar technische namen Given
  • 9.
    Met een paarsimpele stappen kan je de meeste scenario’s al afdekken When {alias} is updated with the following values • Meestal moet je een record updaten dat je in je setup gemaakt hebt. Je kan simpel via het alias refereren naar welk record je wilt updaten • De tabel bepaald welke velden worden aangepast • De CRM metadata API wordt gebruikt om display names om te zetten naar technische namen When
  • 10.
    Met een paarsimpele stappen kan je de meeste scenario’s al afdekken Then an {entityname} exists with the following values • Controleren of er een bepaald record besaat in CRM Then Then {alias} has the following values • Controleren of een record dat eerder in de tests gebruikt is nu een aantal specifieke waardes heeft Then
  • 11.
    Soms moet/wil jespecifieke stappen schrijven • Voor speciale acties in CRM zoals het kwalificeren van leads of het sluiten van opportunities • Wanneer je een set van stappen heel vaak herhaalt in verschillende tests • Bijvoorbeeld het opzetten van een account met een set van opportunities, quotes en orders • Te veel stappen zorgt voor onderhoudsproblemen en het maakt het lastig om de goede stap te bepalen bij het schrijven van tests. Wanneer schrijf ik specifieke stappen?
  • 12.
    SpecFlow heeft mooie rapportagesover de uitvoer van de tests
  • 14.
    Een CDD Reviewprocess in CRM

Editor's Notes

  • #3 Waarom? <Hier praten met iedereen over de opstakels>
  • #6 Screenshot met meerdere velden
  • #7 Screenshot met meerdere velden