Public/Get-CloudLoadTestRunSummary.ps1

Function Get-CloudLoadTestRunSummary{
[cmdletbinding()]
Param(

    [Parameter(Mandatory=$True)]
    [hashtable]
    $Headers,

    [Parameter(Mandatory=$True)]
    [ValidateScript({
      # Check if valid Uri
        $IsValidUri = [system.uri]::IsWellFormedUriString($_,[System.UriKind]::Absolute)
        if ($IsVAlidUri -eq $True){
            return $True
        }
        else{
            throw "Parameter value is not valid '$_'"
        }
    })] 
    [string]
    $BaseUri,

    [Parameter(Mandatory=$True)]
    [guid]
    $TestRunId,

    [Parameter(Mandatory=$False)]
    [bool]
    $OutputTeamCityServiceMessages = $False

)

    try{
        $Uri = "$BaseUri/{0}/{1}/ResultSummary" -f "_apis/clt/testruns", $TestRunId
        $Response = Invoke-RestMethod -Uri $Uri -Method Get -Headers $Headers


        Write-Verbose ("Overall Scenario Summary: minUserLoad = {0}, maxUserLoad = {1}" -f $Response.overallScenarioSummary.minUserLoad, $Response.overallScenarioSummary.maxUserLoad)

        Write-Verbose ("Overall Test Summary: totalTests = {0}, passedTests = {1}, failedTests = {2}, averageTestTime = {3}" -f $Response.overallTestSummary.totalTests, $Response.overallTestSummary.passedTests, $Response.overallTestSummary.failedTests, $Response.overallTestSummary.averageTestTime )

        Write-Verbose ("Overall Page Summary: totalPages = {0}, percentagePagesMeetingGoal = {1}, averagePageTime = {2}, averageTestTime = {3}" -f $Response.overallPageSummary.totalPages, $Response.overallPageSummary.percentagePagesMeetingGoal, $Response.overallPageSummary.failedTests, $Response.overallPageSummary.averagePageTime )

        Write-Verbose ("Overall Request Summary: totalRequests = {0}, passedRequests = {1}, failedRequests = {2}, averageResponseTime = {3}, requestsPerSec = {4}" -f $Response.overallRequestSummary.totalRequests, $Response.overallRequestSummary.passedRequests, $Response.overallRequestSummary.failedRequests, $Response.overallRequestSummary.averageResponseTime, $Response.overallRequestSummary.requestsPerSec )


        if ($OutputTeamCityServiceMessages -eq $True){

            # Output OverallRequestSummary
            Write-Host ("##teamcity[buildStatisticValue key='OverallRequestSummary-TotalRequests' value='{0}']" -f $Response.overallRequestSummary.totalRequests )
            Write-Host ("##teamcity[buildStatisticValue key='OverallRequestSummary-PassedRequests' value='{0}']" -f $Response.overallRequestSummary.passedRequests )
            Write-Host ("##teamcity[buildStatisticValue key='OverallRequestSummary-FailedRequests' value='{0}']" -f $Response.overallRequestSummary.failedRequests )
            Write-Host ("##teamcity[buildStatisticValue key='OverallRequestSummary-AverageResponseTime' value='{0}']" -f ($Response.overallRequestSummary.averageResponseTime * 1000) )
            Write-Host ("##teamcity[buildStatisticValue key='OverallRequestSummary-RequestsPerSec' value='{0}']" -f [math]::Round($Response.overallRequestSummary.requestsPerSec,1) )

            # Output overallTestSummary
            Write-Host ("##teamcity[buildStatisticValue key='OverallTestSummary-TotalTests' value='{0}']" -f $Response.overallTestSummary.totalTests )
            Write-Host ("##teamcity[buildStatisticValue key='OverallTestSummary-PassedTests' value='{0}']" -f $Response.overallTestSummary.passedTests )
            Write-Host ("##teamcity[buildStatisticValue key='OverallTestSummary-FailedTests' value='{0}']" -f $Response.overallTestSummary.failedTests )
            Write-Host ("##teamcity[buildStatisticValue key='OverallTestSummary-AverageTestTime' value='{0}']" -f ($Response.overallTestSummary.averageTestTime * 1000) )

            # Output overallPageSummary
            Write-Host ("##teamcity[buildStatisticValue key='OverallPageSummary-TotalPages' value='{0}']" -f $Response.overallPageSummary.totalPages )
            Write-Host ("##teamcity[buildStatisticValue key='OverallPageSummary-PercentagePagesMeetingGoal' value='{0}']" -f $Response.overallPageSummary.percentagePagesMeetingGoal )
            Write-Host ("##teamcity[buildStatisticValue key='OverallPageSummary-AveragePageTime' value='{0}']" -f ($Response.overallPageSummary.averagePageTime * 1000) )

        }

        # Output top slow pages
        foreach ($SlowPage in $Response.topSlowPages){
            Write-Verbose ("Top Slow Pages: testName = {0}, pageUrl = '{1}', totalPages = {2}, percentagePagesMeetingGoal = {3}, averagePageTime = {4}" -f $SlowPage.testName, $SlowPage.pageUrl, $SlowPage.totalPages, $SlowPage.percentagePagesMeetingGoal, $SlowPage.averagePageTime)
            foreach ($PercentileData in $SlowPage.percentileData){
                Write-Verbose ("Top Slow Pages Percentile Data: testName = {0}, percentile = {1}, percentileValue = {2}" -f $SlowPage.testName, $PercentileData.percentile, $PercentileData.percentileValue)
                if ($OutputTeamCityServiceMessages -eq $True){
                    Write-Host ("##teamcity[buildStatisticValue key='TopSlowPages-{0}-{1}-percentile' value='{2}']" -f $SlowPage.testName, $PercentileData.percentile, $PercentileData.percentileValue)
                }
            }
        } 

        # Output top slow tests
        foreach ($SlowTest in $Response.topSlowTests){
            Write-Verbose ("Top Slow Tests: testName = {0}, totalTests = '{1}', passedTests = {2}, failedTests = {3}, averageTestTime = {4}" -f $SlowTest.testName, $SlowTest.totalTests, $SlowTest.passedTests, $SlowTest.failedTests, $SlowTest.averageTestTime)            
            foreach ($PercentileData in $SlowTest.percentileData){
                Write-Verbose ("Top Slow Tests Percentile Data: testName = {0}, percentile = {1}, percentileValue = {2}" -f $SlowTest.testName, $PercentileData.percentile, $PercentileData.percentileValue)
                if ($OutputTeamCityServiceMessages -eq $True){
                    Write-Host ("##teamcity[buildStatisticValue key='TopSlowTests-{0}-{1}-percentile' value='{2}']" -f $SlowTest.testName, $PercentileData.percentile, $PercentileData.percentileValue)
                }
            }
        }

        Return $Response

    }
    catch{
        throw $_
    }

}