#c# #mstest
#c# #mstest
Вопрос:
У нас есть куча тестов на моей работе, которые иногда терпят неудачу, если нагрузка на наш сервер CI становится слишком высокой или время ожидания вызова API внешней службы (GoogleDocs и т. Д.) истекает. Есть ли способ, которым я мог бы настроить код TestCleanup, чтобы тесты можно было запускать повторно, и если они проходят, они не отображаются как сбои в файлах .trx?
Мы используем VS2013 / .Net 4.5 MSTest, и результаты в конечном итоге поступают в Jenkins. Что я хотел бы иметь возможность сделать, так это обнаружить, что что-то не удается из-за регулирования или загрузки, добавить код задержки и повторить попытку снова. Возможно ли это?
Ответ №1:
Я столкнулся с аналогичной проблемой. Иногда тест завершается неудачно из-за внешнего ресурса, завершая весь прогон. Я пытался найти простое решение вашей проблемы, но после долгих исследований я этого не сделал — после того, как тест провалился, вы не можете изменить его результат в том же прогоне.
Моим окончательным решением было написать внешний скрипт (даже не обязательно на C #), который запускает тесты с использованием VSTest.console.exe или MSTest.exe , анализирует полученный trx, а затем решает, какие тесты следует выполнить повторно. Это не очень сложная задача, поскольку извлечь имена и ошибки неудачных тестов из trx легко с помощью любой приличной xml-библиотеки.
Ответ №2:
Так вы можете извлечь имена неудачных случаев.
System.Xml.Linq.XDocument xDoc = XDocument.Load("full/path/to/trx");
System.Xml.Linq.XNamespace defaultNs = "http://microsoft.com/schemas/VisualStudio/TeamTest/2010";
List<System.Xml.Linq.XElement> UnitTestResultNode = (from data in xDoc.Descendants(defaultNs "Results")
select data).Descendants(defaultNs "UnitTestResult").ToList();
var failedset = (from src in UnitTestResultNode
where src.Attribute("outcome").Value == "Failed"
select new { src.Attribute("testName").Value }).ToList();
после того, как вы получите неудачные случаи, вы можете перейти к агенту тестирования VSTest.