如何从MVC应用程序中获取TFS服务器构建的selenium测试结果

时间:2018-01-25 09:43:09

标签: c# asp.net-mvc selenium tfs tfsbuild

我正在使用TFS 2015来构建,部署和运行我的selenium UI测试。 它对我来说很好。我对不同的客户也有不同的构建定义(这里运行的测试是相同的,但它们针对不同的dbs运行)。

我的测试每晚和早上运行我必须单独去每个构建定义以查看结果(我收到一封邮件,其中包含测试失败和通过的数量)。 但要查看哪个测试失败以及其他详细信息,例如失败的原因,我每次都需要在服务器上进行TFS构建def。

我打算制作一个简单的应用程序,它会将我的数据显示在一个地方,就像一个简单的MVC网络应用程序(内部用途)。到目前为止,我只能通过使用

来获取构建的简单数据,如名称和结果
cn=users,dc=domname,dc=com

但是我无法获得测试运行的详细信息和事件,任何人都可以建议我使用哪个API来实现这一点并以更简单的形式显示数据。

我得到了这个链接,但我不确定如何在我的应用程序中使用它。 https://www.visualstudio.com/en-us/docs/integrate/api/test/results

谢谢,

Amey

2 个答案:

答案 0 :(得分:1)

您可以使用REST API(上面提到的链接)获取特定项目的测试结果

例如,在PowerShell脚本示例下面可以获取特定项目的所有失败测试结果,也可以导出到 .csv 文件,然后在Excel中打开它以过滤后:

Param(
   [string]$collectionurl = "http://server:8080/tfs/Collection", 
   [string]$project = "ProjectName",
   [string]$user = "username",
   [string]$token = "password"
) 

# Base64-encodes the Personal Access Token (PAT) appropriately
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))

#Get test runs
$testrunsUrl = "$collectionurl/$project/_apis/test/runs?api-version=1.0"
$testruns = (Invoke-RestMethod -Uri $testrunsUrl -Method Get -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}).value

#Get unit tests from each test run
$UnitTestResults = @()

foreach ($testrun in $testruns)
{
$testrunID = $testrun.id

#Get test results for specific test run
$baseUrl = "$collectionurl/$project/_apis/test/runs/$testrunID/results?api-version=3.0-preview"
$response = Invoke-RestMethod -Uri $baseUrl -Method Get -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
$unittests = $response.value | where({$_.outcome -eq 'Failed'})

$customObject = new-object PSObject -property @{
          "ComputerName" = @($unittests.computerName -join ',')|Select-Object
          "BuildId" = @($unittests.build.id -join ',')|Select-Object
          "BuildName" = @($unittests.build.name -join ',')|Select-Object
          "BuildUrl" = @($unittests.build.url -join ',')|Select-Object
          "TestRunID" = $testrunID
          "ProjectName" = @($unittests.project.name -join ',')|Select-Object
          "TestRunName" = @($unittests.testRun.name -join ',')|Select-Object
          "TestRunURL" = @($unittests.testRun.url -join ',')|Select-Object
          "UnitTestname" = @($unittests.automatedTestName -join ',')|Select-Object
          "outcome" = @($unittests.outcome -join ',')|Select-Object
          "errorMessage" = @($unittests.errorMessage -join ',')|Select-Object
          "TestResultsUrl" = @($unittests.url -join ',')|Select-Object
          "completedDate" = @($unittests.completedDate -join ',')|Select-Object 
        } 

    $UnitTestResults += $customObject
}

$UnitTestResults | Select `
                ProjectName,
                ComputerName,
                BuildId,
                BuildName,
                BuildUrl,
                TestRunID,
                TestRunName,
                TestRunURL, 
                UnitTestname,
                outcome,
                errorMessage,
                TestResultsUrl,
                completedDate | where({$_.outcome -like '*Failed*'}) #|export-csv -Path C:\LC\UnitTest.csv -NoTypeInformation

您也可以使用TFS API来实现这一目标。 构建的测试结果存储在测试运行中,因此您需要首先获取构建的测试运行,然后从测试运行中检索测试结果。

您可以参考以下主题:

enter image description here

答案 1 :(得分:0)

这是一个PowerShell脚本,用于从TFS 2018 rest API获取结果,该API运行多个selenium测试,作为使用TFS Release Management的UI测试运行。您可以更改API版本号以支持TFS 2015并简化以下脚本以访问和通过电子邮件发送测试结果。在脚本中,我考虑了多个发布环境,因为我在TFS版本管理中使用它。该脚本具有任务ID 7的硬编码访问权限,以查找发布环境的状态。删除此示例中的这些步骤并简化它以与构建一起使用。 您可以在PowerShell构建任务中将PowerShell作为内联脚本执行。

window.onbeforeunload = function () {
   return "Hi";
 };

enter image description here

相关问题