Executing specific Scenarios in your Build pipeline¶
SpecFlow converts the tags in your feature files to test case categories:
SpecFlow+ Runner: TestCategory
NUnit: Category or TestCategory
MSTest: TestCategory
xUnit: Trait (similar functionality, SpecFlow will insert a Trait attribute with
Category
name)
This category can be used to filter the test execution in your build pipeline. Note that the incorrect filter can lead to no test getting executed.
You don’t have to include the @
prefix in the filter expression.
Learn more about the filters in Microsoft’s official documentation.
Examples¶
All the examples here are using Category
, but if you are using MsTest
or SpecFlow+ Runner
then you should use TestCategory
instead.
How to use the filters¶
Below are 2 scenarios where one of them has a tag: @done
, and the other one does not have a tag.
Feature: Breakfast
@done
Scenario: Eating cucumbers
Given there are 12 cucumbers
When I eat 5 cucumbers
Then I should have 7 cucumbers
Scenario: Use all the sugar
Given there is some sugar in the cup
When I put all the sugar to my coffee
Then the cup is empty
If we would like to run only the scenario with @done
tag, then the filter should look like:
Category=done
Below are 2 scenarios where one of them has a tag: @done
, and the other one has @automated
.
Feature: Breakfast
@done
Scenario: Eating cucumbers
Given there are 12 cucumbers
When I eat 5 cucumbers
Then I should have 7 cucumbers
@automated
Scenario: Use all the sugar
Given there is some sugar in the cup
When I put all the sugar to my coffee
Then the cup is empty
If we would like to run scenarios which have either @done
or @automated
:
Category=done | Category=automated
Below are 2 scenarios where one of them has a tag: @done
, and the other one has @automated
. There is also a @US123
tag at Feature level.
@US123
Feature: Breakfast
@done
Scenario: Eating cucumbers
Given there are 12 cucumbers
When I eat 5 cucumbers
Then I should have 7 cucumbers
@automated
Scenario: Use all the sugar
Given there is some sugar in the cup
When I put all the sugar to my coffee
Then the cup is empty
If we would like to run only those scenarios, which have both @US123
and @done
:
Category=US123 & Category=done
Below are 2 scenarios where one of them has two tags: @done
and @important
. There is another scenario, which has the @automated
tag, and there is a @us123
tag at Feature level.
@US123
Feature: Breakfast
@done @important
Scenario: Eating cucumbers
Given there are 12 cucumbers
When I eat 5 cucumbers
Then I should have 7 cucumbers
@automated
Scenario: Use all the sugar
Given there is some sugar in the cup
When I put all the sugar to my coffee
Then the cup is empty
If we would like to run only those scenarios, which have both @done
and @important
:
Category=done & Category=important
dotnet test¶
Use the --filter
command-line option:
dotnet test --filter Category=done
dotnet test --filter "Category=us123 & Category=done"
dotnet test --filter "Category=done | Category=automated"
vstest.console.exe¶
Use the /TestCaseFilter
command-line option:
vstest.console.exe "C:\Temp\BookShop.AcceptanceTests.dll" /TestCaseFilter:"Category=done"
vstest.console.exe "C:\Temp\BookShop.AcceptanceTests.dll" /TestCaseFilter:"Category=us123 & Category=done"
vstest.console.exe "C:\Temp\BookShop.AcceptanceTests.dll" /TestCaseFilter:"Category=done | Category=automated"
Azure DevOps - Visual Studio Test task¶
>Note: This task is supported only on Windows agents and cannot be used on other platforms.
The filter expression should be provided in the “Test filter criteria” setting in the Visual Studio Test
task:
Azure DevOps - .NET Core task¶
Alternatively you could use the dotnet task (DotNetCoreCLI) to run your tests. This works on all kinds of build agents:
- task: DotNetCoreCLI@2
displayName: 'dotnet test'
inputs:
command: test
projects: 'BookShop.AcceptanceTests'
arguments: '--filter "Category=done"'
- task: DotNetCoreCLI@2
displayName: 'dotnet test'
inputs:
command: test
projects: 'BookShop.AcceptanceTests'
arguments: '--filter "Category=us123 & Category=done"'