Как включить вывод теста NUnit при публикации результатов теста в DevOps Azure? - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть сборка vNext, которая запускает несколько тестов NUnit и публикует результаты.Однако выходные данные, полученные в результате испытаний, не публикуются, даже если они находятся в соответствующем файле XML.

Например:

enter image description here

Но, если я проверю соответствующие XML-файлы - он там есть:

enter image description here

Обратите внимание на элемент <output>.

Мне бы очень хотелось, чтобы этот вывод был опубликован вместе с результатами теста.Как я могу это сделать?

PS

Есть еще одна проблема с публикацией.Продолжительность пробега указывается как 4 ч 59 м в верхней панели, но в нижней панели сведений это правильные значения 10: 48,176 минут.4 часа 59 минут очень похожи на 5 часов, что является разницей во времени между EST и UTC.Тесты были запущены на сервере Octopus и были получены сборкой vNext.Может быть, где-то путаница с часовым поясом.

РЕДАКТИРОВАТЬ 1

У нас есть локальный TFS

РЕДАКТИРОВАТЬ 2

Изучение исходного кода задачи Publish Test Results показывает, что она использует сборку Microsoft.TeamFoundation.TestClient.PublishTestResults для анализа результатов теста NUnit XML.В частности, следующий код C # используется для анализа элемента test-case (NUnit3ResultsXmlReader.cs):

if (testCaseResultNode.Attributes["result"] != null)
{
  testCaseResultData.TestCaseResult.Outcome = !string.Equals(testCaseResultNode.Attributes["result"].Value, "Passed", StringComparison.OrdinalIgnoreCase) ? (!string.Equals(testCaseResultNode.Attributes["result"].Value, "Failed", StringComparison.OrdinalIgnoreCase) ? (!string.Equals(testCaseResultNode.Attributes["result"].Value, "Skipped", StringComparison.OrdinalIgnoreCase) ? TestOutcome.Inconclusive.ToString() : TestOutcome.NotExecuted.ToString()) : TestOutcome.Failed.ToString()) : TestOutcome.Passed.ToString();
  XmlNode xmlNode1 = testCaseResultNode.SelectSingleNode("failure");
  if (xmlNode1 != null)
  {
    XmlNode xmlNode2 = xmlNode1.SelectSingleNode("message");
    XmlNode xmlNode3 = xmlNode1.SelectSingleNode("stack-trace");
    testCaseResultData.TestCaseResult.ErrorMessage = xmlNode2 != null ? xmlNode2.InnerText : (string) null;
    testCaseResultData.TestCaseResult.StackTrace = xmlNode3 != null ? xmlNode3.InnerText : (string) null;
    XmlNode xmlNode4 = testCaseResultNode.SelectSingleNode("output");
    if (!string.IsNullOrWhiteSpace(xmlNode4 != null ? xmlNode4.InnerText : (string) null))
      testCaseResultData.ConsoleLog = xmlNode4.InnerText;
  }
}

Из чего следует, что авторы сборки считают, что вывод теста полезен только тогда, когдавопрос не удался.Это неудачное решение, потому что не им решать, когда результат будет полезен.Если он есть в результатах теста XML, то его следует опубликовать.

Открыт новый выпуск https://github.com/Microsoft/azure-pipelines-tasks/issues/8979

Открыт запрос функции Azure DevOps - https://developercommunity.visualstudio.com/idea/432166/the-publish-tests-azure-devops-plugin-should-publi.html

1 Ответ

0 голосов
/ 03 декабря 2018

Мое решение этой неудачной поведенческой силы для нас состоит в том, чтобы исказить результат теста XML, прежде чем передать его в задачу «Опубликовать результаты теста».

Следующий код PowerShell делает свое дело:

$Modified = $false
$xml = [xml](cat $OriginalTestResultsXmlFile -Raw)
$xml.SelectNodes('//test-case') |? { !$_.failure -and $_.output } |% { 
    $Modified = $true
    $_.InnerXml = @"
<!-- Workaround the issue https://github.com/Microsoft/azure-pipelines-tasks/issues/8979. No real failure here -->
<failure/>
$($_.InnerXml)

"@
}

if ($Modified)
{
    $xml.Save($TestResultsXmlFile)
}
else
{
    move $OriginalTestResultsXmlFile $TestResultsXmlFile
    $OriginalTestResultsXmlFile = $TestResultsXmlFile
}

Мы должны заставить задачу выполнить требуемую логику, создав фиктивный элемент failure, кроме элемента output.

Ло и вот:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...