Как получить файл результатов теста trx (сгенерированный из vstest) из TFS Api
Мне нужно запросить и получить файл результатов теста TXX из TFS 2013, чтобы я мог изменить его и использовать для генерации отчетов. Я не смог найти какой-либо метод в 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();
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);
}
}
}
}
Вы можете использовать код ниже, чтобы прочитать файл результатов теста.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);
}
}