2015-09-11 2 views
0

Мне нужно запросить и получить файл результатов теста trx с TFS 2013, чтобы я мог его модифицировать и использовать для генерации отчетов. Я не смог найти какой-либо метод в IBuildServer, который позволяет мне запрашивать trx-файл. Возможно ли прочитать файл с помощью BuildDetail.DropLocation, где у меня есть строка, которая сообщает мне местоположение файла trx. Я написал несколько строк, как показано нижеКак получить результат теста trx (сгенерированный из vstest) из TFS Api

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

ответ

1

Понял, что нет. Я добавил обертку службы 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); 
      } 
     } 

    } 
} 
2

Вы можете использовать код ниже, чтобы прочитать .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/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); 
       } 
      } 
+0

Tx mate, я написал TFS Service Wrapper, как показано ниже. – Rasika