【问题标题】:How to get the test results trx file(generated from vstest) from TFS Api如何从 TFS Api 获取测试结果 trx 文件(从 vstest 生成)
【发布时间】:2023-03-03 21:52:01
【问题描述】:

我需要从 TFS 2013 查询并获取测试结果 trx 文件,以便我可以修改该文件并将其用于生成报告。我在 IBuildServer 中找不到任何允许我查询 trx 文件的方法。是否可以使用BuildDetail.DropLocation 读取文件,其中我有告诉我 trx 文件位置的字符串。我写了几行如下

TfsSerice = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(tfsUri));
TfsSerice.EnsureAuthenticated();
var buildServer = (IBuildServer)TfsSerice.GetService(typeof(IBuildServer));
BuildDetail = buildServer.QueryBuilds("MyUserLibrary").FirstOrDefault();

【问题讨论】:

    标签: c# msbuild vstest


    【解决方案1】:

    您可以使用下面的代码来读取.trx测试结果文件:

    TfsTeamProjectCollection tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://tfsservername:8080/tfs/DefaultCollection"));
            ITestManagementTeamProject project = tfs.GetService<ITestManagementService>().GetTeamProject("teamprojectname");
    
            foreach (ITestRun tRun in project.TestRuns.ByBuild(new Uri(("vstfs:///Build/Build/531"))))
            {
                foreach (ITestCaseResult tr in tRun.QueryResults())
                {
                    Console.WriteLine(tr.TestCaseTitle.ToString() + ":" + tr.Outcome.ToString());
                }
            }
    

    请注意,您需要选择将 vstfs:///Build/Build/531 替换为您自己的 buildUri。要获取它,请使用以下代码:

    IBuildServer buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer));
            var buildDefinitions = buildServer.QueryBuildDefinitions("TeamProject");
    
    
            foreach (var buildDefinition in buildDefinitions)
            {
                if (buildDefinition.Name == "BuildDefinitionName")
                {
                    var builds = buildDefinition.QueryBuilds();
                    foreach (var build in builds)
                    {
                        Console.WriteLine(build.Uri);
                    }
                }
    

    【讨论】:

    • Tx 伙计,我写了一个 TFS Service Wrapper,如下所示。
    【解决方案2】:

    想通了。我添加了一个 TFS 服务包装器,如下所示,它获取最新版本的 TRX 文件。下面是代码,享受!!!!

    using System.Linq;
    using System.Net;
    using System.Xml;
    using System.Xml.Linq;
    using Microsoft.TeamFoundation.Build.Client;
    using Microsoft.TeamFoundation.Client;
    using Microsoft.TeamFoundation.TestManagement.Client;
    using System.Configuration;
    using System;
    
    
    namespace TfsService
    {
        public class TfsServiceWrapper
        {
            public TfsTeamProjectCollection TeamProjectCollection { get; private set; }
            public string TeamProject { get; private set; }
            public string BuildName { get; private set; }
            public Uri TfsUri { get; private set; }
    
            public TfsServiceWrapper()
            {
                TfsUri = new Uri(ConfigurationManager.AppSettings["tfsUri"]);
                TeamProject = ConfigurationManager.AppSettings["teamProject"];
                BuildName = ConfigurationManager.AppSettings["buildName"];
                ConnectToTeamProjectCollection();
            }
    
            public TfsServiceWrapper(Uri tfsUri, string teamProject, string buildName)
            {
                TfsUri = tfsUri;
                TeamProject = teamProject;
                BuildName = buildName;
                ConnectToTeamProjectCollection();
            }
    
            private void ConnectToTeamProjectCollection()
            {
                TeamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(TfsUri);
                TeamProjectCollection.EnsureAuthenticated();
            }
    
            public IBuildDetail LatestBuildDetail
            {
                get
                {
                    var spec = BuildServer.CreateBuildDetailSpec(TeamProject, BuildName);
                    spec.MaxBuildsPerDefinition = 1;
                    spec.QueryOrder = BuildQueryOrder.FinishTimeDescending;
                    return BuildServer.QueryBuilds(spec).Builds.FirstOrDefault();
                }
            }
    
            public IBuildServer BuildServer
            {
                get
                {
                    return (IBuildServer)TeamProjectCollection.GetService(typeof(IBuildServer));
                }
            }
    
    
            public ITestManagementService TestManagementService
            {
                get
                {
                    return (ITestManagementService)TeamProjectCollection.GetService(typeof(ITestManagementService));
                }
            }
    
            public XDocument LatestTestResultFile
            {
                get
                {
                    var latestRun = TestManagementService.GetTeamProject(TeamProject).TestRuns.ByBuild(LatestBuildDetail.Uri).First(run => run.QueryResults().Any());
                    var resolver = new XmlUrlResolver {Credentials = CredentialCache.DefaultCredentials};
                    var settings = new XmlReaderSettings {XmlResolver = resolver};
                    var reader = XmlReader.Create(latestRun.Attachments[0].Uri.ToString(), settings);
                    return XDocument.Load(reader);
                }
            }
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-05-04
      • 2017-09-21
      • 1970-01-01
      • 1970-01-01
      • 2021-02-10
      • 1970-01-01
      • 2018-12-10
      • 2017-11-21
      • 2017-01-15
      相关资源
      最近更新 更多