【问题标题】:How to get unit test results using TFS Rest API?如何使用 TFS Rest API 获取单元测试结果?
【发布时间】:2017-01-15 08:34:13
【问题描述】:

如何使用 Rest API 在 TFS 中检索构建的单元测试结果?

构建定义使用 VNext(Visual Studio 2015 Update 3)。

var vssConnection = new VssConnection(_configurationSpec.TeamProjectCollection, 
    new VssClientCredentials());
_buildClient = vssConnection.GetClient<BuildHttpClient>();

【问题讨论】:

标签: c# rest tfs azure-devops-rest-api


【解决方案1】:

构建的测试结果存储在测试运行中,因此您需要先获取构建的测试运行,然后从测试运行中检索测试结果。以下是代码示例:

class Program
{
    static void Main(string[] args)
    {
        string ur = "https://xxxxxxx/";
        TfsTeamProjectCollection ttpc = new TfsTeamProjectCollection(new Uri(ur));
        //Get build information
        BuildHttpClient bhc = ttpc.GetClient<BuildHttpClient>();
        string projectname = "Project";
        int buildId = 1;
        Build bui = bhc.GetBuildAsync(projectname,buildId).Result;
        //Get test run for the build
        TestManagementHttpClient ithc = ttpc.GetClient<TestManagementHttpClient>();

        Console.WriteLine(bui.BuildNumber);

        QueryModel qm = new QueryModel("Select * From TestRun Where BuildNumber Contains '" + bui.BuildNumber + "'");

        List<TestRun> testruns = ithc.GetTestRunsByQueryAsync(qm,projectname).Result;
        foreach (TestRun testrun in testruns)
        {

            List<TestCaseResult> testresults = ithc.GetTestResultsAsync(projectname, testrun.Id).Result;
            foreach (TestCaseResult tcr in testresults)
                {
                    Console.WriteLine(tcr.TestCase.Name);
                    Console.WriteLine(tcr.Outcome);
                }

            Console.ReadLine();
        }
        Console.ReadLine();
    }
}

【讨论】:

【解决方案2】:

您可以尝试通过在 powershell 脚本中使用此 Rest API 来获取相关步骤的日志。

GET https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/build/builds/391/logs?api-version=2.0

会返回logs1,logs2对应step1,step2。

{
  "count": 4,
  "value": [
    {
      "lineCount": 3,
      "createdOn": "2015-07-16T19:53:19.747Z",
      "lastChangedOn": "2015-07-16T19:53:19.92Z",
      "id": 1,
      "type": "Container",
      "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c/_apis/build/builds/391/logs/1"
    },
    {
      "lineCount": 113,
      "createdOn": "2015-07-16T19:53:29.387Z",
      "lastChangedOn": "2015-07-16T19:53:29.44Z",
      "id": 2,
      "type": "Container",
      "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c/_apis/build/builds/391/logs/2"
    },

例如:

只需要获取第 4 步“Test Assemblies...”的日志

【讨论】:

  • 知道为什么 API 会返回此错误:{"$id":"1","innerException":null,"message":"此 API 仅适用于存储在文件容器中的日志.","typeName":"Microsoft.TeamFoundation.Build.WebApi.InvalidLogLocationException, Microsoft.TeamFoundation.Build2.WebApi, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a","typeKey":"InvalidLogLocationException"," errorCode":0,"eventId":3000}
  • @ShP 这对我来说效果很好,您将收到构建定义中每个构建步骤的日志摘要。如果你想得到每个步骤的详细日志,你需要在/logs之后添加一个/logID,在?api-version=2.0之前。似乎您的问题已在这里解决:stackoverflow.com/questions/45743037/…
  • 有点,我可以获取 zip,但尝试获取 json 响应时仍然出错
【解决方案3】:

如果您尝试从 Azure DevOps 获取构建测试,您可以使用 Microsoft.TeamFoundationServer.Client nuget 包中提供的新方法:

// Get Test Management client
using var testMgmtClient = connection.GetClient<TestManagementHttpClient>();

// Get tests run for a certain build
var tests = testMgmtClient.GetTestRunsAsync(projectName, builds[0].Uri.AbsoluteUri, includeRunDetails: true).Result;

【讨论】:

    猜你喜欢
    • 2015-12-25
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 2014-03-11
    • 2018-10-05
    相关资源
    最近更新 更多