diff --git a/.vsts-ci/windows.yml b/.vsts-ci/windows.yml index dab9f6b295f..d2d94b98234 100644 --- a/.vsts-ci/windows.yml +++ b/.vsts-ci/windows.yml @@ -90,8 +90,8 @@ jobs: - powershell: | Import-Module .\tools\ci.psm1 - $ParallelXUnitTestResultsFile = "$(System.ArtifactsDirectory)\xunit\ParallelXUnitTestResults.xml" + $xUnitTestResultsFile = "$(System.ArtifactsDirectory)\xunit\xUnitTestResults.xml" - Test-XUnitTestResults -TestResultsFile $ParallelXUnitTestResultsFile + Test-XUnitTestResults -TestResultsFile $xUnitTestResultsFile displayName: Test condition: succeeded() diff --git a/build.psm1 b/build.psm1 index 1d0122bd225..5a8d81780c5 100644 --- a/build.psm1 +++ b/build.psm1 @@ -1374,7 +1374,7 @@ function Test-PSPesterResults function Start-PSxUnit { [CmdletBinding()]param( - [string] $ParallelTestResultsFile = "ParallelXUnitResults.xml" + [string] $xUnitTestResultsFile = "xUnitResults.xml" ) # Add .NET CLI tools to PATH @@ -1420,23 +1420,15 @@ function Start-PSxUnit { } } - dotnet build --configuration $Options.configuration - - if (Test-Path $ParallelTestResultsFile) { - Remove-Item $ParallelTestResultsFile -Force -ErrorAction SilentlyContinue + if (Test-Path $xUnitTestResultsFile) { + Remove-Item $xUnitTestResultsFile -Force -ErrorAction SilentlyContinue } - # we are having intermittent issues on macOS with these tests failing. - # VSTS has suggested forcing them to be sequential - if($env:TF_BUILD -and $IsMacOS) - { - Write-Log 'Forcing parallel xunit tests to run sequentially.' - dotnet test -p:ParallelizeTestCollections=false --configuration $Options.configuration --no-restore --no-build --test-adapter-path:. "--logger:xunit;LogFilePath=$ParallelTestResultsFile" - } else { - dotnet test --configuration $Options.configuration --no-restore --no-build --test-adapter-path:. "--logger:xunit;LogFilePath=$ParallelTestResultsFile" - } + # We run the xUnit tests sequentially to avoid race conditions caused by manipulating the config.json file. + # xUnit tests run in parallel by default. To make them run sequentially, we need to define the 'xunit.runner.json' file. + dotnet test --configuration $Options.configuration --test-adapter-path:. "--logger:xunit;LogFilePath=$xUnitTestResultsFile" - Publish-TestResults -Path $ParallelTestResultsFile -Type 'XUnit' -Title 'Xunit Parallel' + Publish-TestResults -Path $xUnitTestResultsFile -Type 'XUnit' -Title 'Xunit Sequential' } finally { Pop-Location diff --git a/test/xUnit/xUnit.tests.csproj b/test/xUnit/xUnit.tests.csproj index 11704265ae9..227405930ea 100644 --- a/test/xUnit/xUnit.tests.csproj +++ b/test/xUnit/xUnit.tests.csproj @@ -27,4 +27,12 @@ + + + + xunit.runner.json + PreserveNewest + PreserveNewest + + diff --git a/test/xUnit/xunit.runner.json b/test/xUnit/xunit.runner.json new file mode 100644 index 00000000000..f5cdb055132 --- /dev/null +++ b/test/xUnit/xunit.runner.json @@ -0,0 +1,3 @@ +{ + "parallelizeTestCollections": false +} diff --git a/tools/ci.psm1 b/tools/ci.psm1 index 26c0718730a..1034124b954 100644 --- a/tools/ci.psm1 +++ b/tools/ci.psm1 @@ -288,17 +288,17 @@ function Invoke-CIxUnit throw "CoreCLR pwsh.exe was not built" } - $ParallelXUnitTestResultsFile = "$pwd\ParallelXUnitTestResults.xml" + $xUnitTestResultsFile = "$pwd\xUnitTestResults.xml" - Start-PSxUnit -ParallelTestResultsFile $ParallelXUnitTestResultsFile + Start-PSxUnit -xUnitTestResultsFile $xUnitTestResultsFile Write-Host -ForegroundColor Green 'Uploading PSxUnit test results' - Update-TestResults -resultsFile $ParallelXUnitTestResultsFile - Push-Artifact -Path $ParallelXUnitTestResultsFile -name xunit + Update-TestResults -resultsFile $xUnitTestResultsFile + Push-Artifact -Path $xUnitTestResultsFile -name xunit if(!$SkipFailing.IsPresent) { # Fail the build, if tests failed - Test-XUnitTestResults -TestResultsFile $ParallelXUnitTestResultsFile + Test-XUnitTestResults -TestResultsFile $xUnitTestResultsFile } } @@ -768,10 +768,10 @@ function Invoke-LinuxTests } try { - $ParallelXUnitTestResultsFile = "$pwd/ParallelXUnitTestResults.xml" - Start-PSxUnit -ParallelTestResultsFile $ParallelXUnitTestResultsFile + $xUnitTestResultsFile = "$pwd/xUnitTestResults.xml" + Start-PSxUnit -xUnitTestResultsFile $xUnitTestResultsFile # If there are failures, Test-XUnitTestResults throws - Test-XUnitTestResults -TestResultsFile $ParallelXUnitTestResultsFile + Test-XUnitTestResults -TestResultsFile $xUnitTestResultsFile } catch { $result = "FAIL" if (!$resultError)