Запишите файл trx в известное место на TFS (сервере CI), используя vstest в качестве средства запуска теста.

Нам нужен способ доступа к файлу trx, сгенерированному средством запуска тестов vstest на сервере CI (TFS 2013), чтобы я мог добавить в него некоторые недостающие элементы перед созданием живой документации (спецификация в стиле примера) с помощью Pickles (инструмент, который читает trx и выведите файл результатов теста html.). Я не могу понять, как это сделать. Я попытался использовать файл .runsettings и изменить определение сборки несколькими способами, но пока безуспешно. При каждой попытке папка результатов теста пуста и в ней нет файла trx. Я могу сделать это на своей локальной машине, как показано ниже.

vstest.console.exe  myTestFile.dll /Settings:Local.RunSettings /InIsolation /TestCaseFilter:"Priority=1" /Logger:trx

Но не удалось понять, как это сделать на сервере CI, поскольку определение сборки позволяет указать только тестовый файл dll, но не указать такие переключатели, как /Logger:trx и т. д. Любой работоспособный подход высоко ценится.


person Rasika    schedule 11.09.2015    source источник
comment
В сообщении ниже есть код для загрузки TRX stackoverflow.com/questions/20356033/   -  person Rasika    schedule 14.09.2015


Ответы (1)


После некоторых исследований я обнаружил, что TFS2013 не записывает его в указанное место, а сохраняет файл TRX в базе данных TFS. Вы можете загрузить его с помощью TFS API. Код ниже возвращает последний файл TRX в виде XDocument. Однако, если вы хотите записать в известное место на сервере CI, используйте приведенный ниже код в строке 78 вместо возврата XDocument.

latestRun.Attachments[0].DownloadToFile("C:\myxml.trx");

Вот мой класс TFS Service Wrapper, который получает последнюю версию TRX из TFS 2013. Наслаждайтесь!

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);
            }
        }

    }
}
person Rasika    schedule 17.09.2015