Мы разработали микросервис для автоматизации тестирования в нашем проекте. В настоящее время мы выполняем тестовые случаи, вызывая микро-сервис: используя сценарий Powershell во время процесса сборки TFS.
Здесь мне требуется небольшая помощь для повторного запуска только неудачных тестовых случаев с приведенным ниже сценарием Powershell. Пожалуйста, предложите и поддержите нас.
наш образец кода:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$runURL = APIURL + 'run/' + Project
Write-Host "startings tests for ["api"] using url [$runURL]"
try {
Write-Host "Invoke-WebRequest - [$runURL]"
$response = Invoke-WebRequest -UseBasicParsing -Uri $runURL
Write-Host "Invoke-WebRequest - [$runURL]"
$sessionID = $response.Content
Write-Host "sessionID - [$sessionID.Content]"
$resultURL = APIURL + 'files/session/' + $sessionID.Replace("`"", "")
Write-Host "resultURL [$resultURL] "
$statusUrl = $response.Headers["Location"]
Write-Host "statusUrl- [$statusUrl]"
}
catch {
Write-host "failed to start test" -foregroundcolor Red
exit 1;
}
$testResults = "$(System.DefaultWorkingDirectory)\TestResult-api.trx"
$i = 0 >$null 2>&1
while ($true) {
$i++ >$null 2>&1
$statusCode = 0
try {
$statusCode = (Invoke-WebRequest -UseBasicParsing -Uri $statusUrl -ErrorAction Continue).statuscode
}
catch {
$statusCode = $_.Exception.Response.StatusCode.Value__
}
if ($statusCode -eq "204") {
Write-host "tests completed in about" ($i * 5) "seconds" -foregroundcolor Blue
Write-host "follow [$resultURL] to download test results" -foregroundcolor Gray
try {
Invoke-WebRequest -Uri $resultURL -OutFile $testResults
if (!$testResults) {
Write-Host "unable to read results"
exit 1
break;
}
}
catch {
Write-Host "failed to download test results"
exit 1
break;
}
$regex = 'outcome="[a-z]{0,10}" '
$failed = select-string -Path $testResults -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Value } | Where-Object { $_ -notmatch 'Passed' }
if ($failed -and $failed.Trim().length -ge 0) {
Write-Error "tests failed"
break;
}
else {
Write-Host "tests passed" -foregroundcolor Green
break;
}
}
elseif ($statusCode -eq "417") {
Write-host "tests in progress" -foregroundcolor Blue
}
elseif ($statusCode -eq "404") {
Write-Error "failed to find test result"
break;
}
elseif ($statusCode -eq "503") {
Write-Error "test service error"
break;
}
else {
Write-Error "unknown test error: $statusCode"
break;
}
start-sleep -s 5;
if ($i -eq 240) {
Write-Error "tests timed out"
break;
}
}