@@ -2,22 +2,55 @@ parameters:
22 testAssembly : # NUnit test assembly to run
33 testFilter : # Filter used to select tests (NUnit test selection language, not dotnet test filter language)
44 testRunTitle : # Title of the test run
5- testResultsTitle : # Title used to construct test results file name
5+ retryFailedTests : true # Retry failed tests once
66
77steps :
88- pwsh : |
99 dotnet-test-slicer `
10+ slice `
1011 --test-assembly="${{ parameters.testAssembly }}" `
1112 --test-filter="${{ parameters.testFilter }}" `
1213 --slice-number=$(System.JobPositionInPhase) `
1314 --total-slices=$(System.TotalJobsInPhase) `
1415 --outfile="${{ parameters.testAssembly }}.runsettings"
1516 displayName : Slice unit tests
1617
17- - template : run-nunit-tests.yaml
18- parameters :
19- useDotNet : true
20- testRunTitle : ${{ parameters.testRunTitle }}-$(System.JobPositionInPhase)
21- testAssembly : ${{ parameters.testAssembly }}
22- dotNetTestExtraArgs : --settings "${{ parameters.testAssembly }}.runsettings"
23- testResultsFile : ${{ parameters.testResultsTitle }}-$(System.JobPositionInPhase)-$(XA.Build.Configuration).xml
18+ - ${{ if eq(parameters.retryFailedTests, 'false') }} :
19+ # If we aren't using auto-retry logic, then this is just a simple template call
20+ - template : run-nunit-tests.yaml
21+ parameters :
22+ testRunTitle : ${{ parameters.testRunTitle }}-$(System.JobPositionInPhase)
23+ testAssembly : ${{ parameters.testAssembly }}
24+ dotNetTestExtraArgs : --settings "${{ parameters.testAssembly }}.runsettings"
25+
26+ - ${{ if eq(parameters.retryFailedTests, 'true') }} :
27+ # We need a custom dotnet test invocation here that does not trigger a task failure on failed tests
28+ - pwsh : |
29+ dotnet `
30+ test `
31+ ${{ parameters.testAssembly }} `
32+ --settings "${{ parameters.testAssembly }}.runsettings" `
33+ --logger trx --results-directory $(Agent.TempDirectory) `
34+ -- NUnit.NumberOfTestWorkers=$(NUnit.NumberOfTestWorkers)
35+ displayName: Run tests
36+ ignoreLASTEXITCODE: true
37+
38+ - pwsh : |
39+ dotnet-test-slicer `
40+ retry `
41+ --trx="$(Agent.TempDirectory)" `
42+ --outfile="${{ parameters.testAssembly }}.runsettings"
43+ displayName: Look for failed tests
44+
45+ # dotnet-test-slicer removed the failed tests from our results file, so it's safe to publish it now
46+ - task : PublishTestResults@2
47+ inputs :
48+ testResultsFormat : VSTest
49+ testResultsFiles : $(Agent.TempDirectory)/*.trx
50+ testRunTitle : ${{ parameters.testRunTitle }}-$(System.JobPositionInPhase)
51+
52+ - template : run-nunit-tests.yaml
53+ parameters :
54+ testRunTitle : ${{ parameters.testRunTitle }}-$(System.JobPositionInPhase) (Auto-Retry)
55+ testAssembly : ${{ parameters.testAssembly }}
56+ dotNetTestExtraArgs : --settings "${{ parameters.testAssembly }}.runsettings"
0 commit comments