Support for PowerShell Script : Re-run only the failed test cases during the TFS build process-CI:CD

%3CLINGO-SUB%20id%3D%22lingo-sub-970329%22%20slang%3D%22en-US%22%3ESupport%20for%20PowerShell%20Script%20%3A%20Re-run%20only%20the%20failed%20test%20cases%20during%20the%20TFS%20build%20process-CI%3ACD%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-970329%22%20slang%3D%22en-US%22%3E%3CP%3EHi%20Team%2C%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EWe%20developed%20a%20test%20automation%20micro%20service%20in%20our%20project.%20Currently%2C%20we%20are%20running%20test%20cases%20by%20calling%20the%20micro%20service%20%3A%20using%20PowerShell%20script%20during%20the%20TFS%20build%20process.%3C%2FP%3E%3CP%3EHere%2C%20I%20require%20small%20help%20to%20re-run%20only%20the%20failed%20test%20cases%20with%20the%20below%20PowerShell%20script.%20Please%20suggest%20and%20support%20us.%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3Eour%20sample%20code%3A%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%3E%5BNet.ServicePointManager%5D%3A%3ASecurityProtocol%20%3D%20%5BNet.SecurityProtocolType%5D%3A%3ATls12%20%0A%0A%24runURL%20%3D%20APIURL%20%2B%20'run%2F'%20%2B%20Project%0A%0AWrite-Host%20%22startings%20tests%20for%20%5B%22api%22%5D%20using%20url%20%5B%24runURL%5D%22%0A%0Atry%20%7B%0A%20%20%20%20Write-Host%20%22Invoke-WebRequest%20-%20%5B%24runURL%5D%22%0A%20%20%20%20%24response%20%3D%20Invoke-WebRequest%20-UseBasicParsing%20-Uri%20%24runURL%0A%20%20%20%20Write-Host%20%22Invoke-WebRequest%20-%20%5B%24runURL%5D%22%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%24sessionID%20%3D%20%24response.Content%0A%20%20%20%20Write-Host%20%22sessionID%20-%20%5B%24sessionID.Content%5D%22%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%24resultURL%20%3D%20APIURL%20%2B%20'files%2Fsession%2F'%20%2B%20%24sessionID.Replace(%22%60%22%22%2C%20%22%22)%0A%20%20%20%20Write-Host%20%22resultURL%20%5B%24resultURL%5D%20%22%0A%20%20%20%20%24statusUrl%20%3D%20%24response.Headers%5B%22Location%22%5D%0A%20%20%20%20Write-Host%20%22statusUrl-%20%5B%24statusUrl%5D%22%0A%7D%0Acatch%20%7B%0A%20%20%20%20Write-host%20%22failed%20to%20start%20test%22%20-foregroundcolor%20Red%0A%20%20%20%20exit%201%3B%0A%7D%0A%0A%24testResults%20%3D%20%22%24(System.DefaultWorkingDirectory)%5CTestResult-api.trx%22%0A%0A%24i%20%3D%200%20%26gt%3B%24null%202%26gt%3B%26amp%3B1%0A%0Awhile%20(%24true)%20%7B%0A%20%20%20%20%24i%2B%2B%20%26gt%3B%24null%202%26gt%3B%26amp%3B1%0A%0A%20%20%20%20%24statusCode%20%3D%200%0A%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%24statusCode%20%3D%20(Invoke-WebRequest%20-UseBasicParsing%20-Uri%20%24statusUrl%20-ErrorAction%20Continue).statuscode%0A%20%20%20%20%7D%0A%20%20%20%20catch%20%7B%0A%20%20%20%20%20%20%20%20%24statusCode%20%3D%20%24_.Exception.Response.StatusCode.Value__%0A%20%20%20%20%7D%0A%0A%20%20%20%20if%20(%24statusCode%20-eq%20%22204%22)%20%7B%0A%20%20%20%20%20%20%20%20Write-host%20%22tests%20completed%20in%20about%22%20(%24i%20*%205)%20%22seconds%22%20-foregroundcolor%20Blue%0A%20%20%20%20%20%20%20%20Write-host%20%22follow%20%5B%24resultURL%5D%20to%20download%20test%20results%22%20-foregroundcolor%20Gray%0A%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Invoke-WebRequest%20-Uri%20%24resultURL%20-OutFile%20%24testResults%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(!%24testResults)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Write-Host%20%22unable%20to%20read%20results%22%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20exit%201%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20catch%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Write-Host%20%22failed%20to%20download%20test%20results%22%20%0A%20%20%20%20%20%20%20%20%20%20%20%20exit%201%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%24regex%20%3D%20'outcome%3D%22%5Ba-z%5D%7B0%2C10%7D%22%20'%0A%20%20%20%20%20%20%20%20%24failed%20%3D%20select-string%20-Path%20%24testResults%20-Pattern%20%24regex%20-AllMatches%20%7C%20%25%20%7B%20%24_.Matches%20%7D%20%7C%20%25%20%7B%20%24_.Value%20%7D%20%7C%20Where-Object%20%7B%20%24_%20-notmatch%20'Passed'%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20(%24failed%20-and%20%24failed.Trim().length%20-ge%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Write-Error%20%22tests%20failed%22%20%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Write-Host%20%22tests%20passed%22%20-foregroundcolor%20Green%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20elseif%20(%24statusCode%20-eq%20%22417%22)%20%7B%0A%20%20%20%20%20%20%20%20Write-host%20%22tests%20in%20progress%22%20-foregroundcolor%20Blue%0A%0A%20%20%20%20%7D%0A%20%20%20%20elseif%20(%24statusCode%20-eq%20%22404%22)%20%7B%0A%20%20%20%20%20%20%20%20Write-Error%20%22failed%20to%20find%20test%20result%22%20%0A%20%20%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%7D%0A%20%20%20%20elseif%20(%24statusCode%20-eq%20%22503%22)%20%7B%0A%20%20%20%20%20%20%20%20Write-Error%20%22test%20service%20error%22%20%0A%20%20%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%7D%0A%20%20%20%20else%20%7B%0A%20%20%20%20%20%20%20%20Write-Error%20%22unknown%20test%20error%3A%20%24statusCode%22%20%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20start-sleep%20-s%205%3B%0A%0A%20%20%20%20if%20(%24i%20-eq%20240)%20%7B%0A%20%20%20%20%20%20%20%20Write-Error%20%22tests%20timed%20out%22%20%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%7D%0A%7D%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-970329%22%20slang%3D%22en-US%22%3E%3CLINGO-LABEL%3EPowerShell%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3Etest%20cases%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E
Highlighted
Occasional Visitor

Hi Team,

 

We developed a test automation micro service in our project. Currently, we are running test cases by calling the micro service : using PowerShell script during the TFS build process.

Here, I require small help to re-run only the failed test cases with the below PowerShell script. Please suggest and support us.

 

our sample code:

 

 

 

 

 

[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;
    }
}

 

 

 

 

 

0 Replies