in src/extensions/testframework/TrxXmlTestReporter.cs [15:199]
public static string WriteResultsFile(TestRun testRun, string? resultsFile = null)
{
resultsFile ??= "test-results.trx";
var testCases = testRun.TestCases;
var testResults = testRun.TestResults;
var startTime = testRun.StartTime;
var endTime = testRun.EndTime;
var assemblyPath = FileHelpers.GetAssemblyFileInfo(typeof(YamlTestFrameworkConsoleHost)).DirectoryName;
var testRunId = Guid.NewGuid().ToString();
var testListId = "8c84fa94-04c1-424b-9868-57a2d4851a1d";
var testType = "13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b";
var userName = Environment.UserName;
var machineName = Environment.MachineName;
var userAtMachine = userName.Split('\\', '/').Last() + "@" + machineName;
var testRunName = userAtMachine + " " + endTime.ToString("yyyy-MM-dd HH:mm:ss");
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = " ";
settings.NewLineChars = "\n";
settings.NewLineHandling = NewLineHandling.Replace;
settings.OmitXmlDeclaration = false;
var writer = XmlWriter.Create(resultsFile, settings);
writer.WriteStartDocument();
writer.WriteStartElement("", "TestRun", "http://microsoft.com/schemas/VisualStudio/TeamTest/2010");
writer.WriteAttributeString("id", testRunId);
writer.WriteAttributeString("name", testRunName);
writer.WriteAttributeString("runUser", userName);
writer.WriteStartElement("Times");
writer.WriteAttributeString("creation", endTime.ToString("o"));
writer.WriteAttributeString("queuing", endTime.ToString("o"));
writer.WriteAttributeString("start", startTime.ToString("o"));
writer.WriteAttributeString("finish", endTime.ToString("o"));
writer.WriteEndElement();
writer.WriteStartElement("Results");
foreach (var testResult in testResults)
{
var executionId = testRun.GetExecutionId(testResult.TestCase).ToString();
var stdout = testResult.Messages.FirstOrDefault(x => x.Category == TestResultMessage.StandardOutCategory)?.Text;
var stderr = testResult.Messages.FirstOrDefault(x => x.Category == TestResultMessage.StandardErrorCategory)?.Text;
var debugTrace = testResult.Messages.FirstOrDefault(x => x.Category == TestResultMessage.DebugTraceCategory)?.Text;
var message = testResult.Messages.FirstOrDefault(x => x.Category == TestResultMessage.AdditionalInfoCategory)?.Text;
writer.WriteStartElement("UnitTestResult");
writer.WriteAttributeString("executionId", executionId);
writer.WriteAttributeString("testId", testResult.TestCase.Id.ToString());
writer.WriteAttributeString("testName", testResult.TestCase.FullyQualifiedName);
writer.WriteAttributeString("computerName", machineName);
writer.WriteAttributeString("duration", testResult.Duration.ToString());
writer.WriteAttributeString("startTime", testResult.StartTime.DateTime.ToString("o"));
writer.WriteAttributeString("endTime", testResult.EndTime.DateTime.ToString("o"));
writer.WriteAttributeString("testType", testType);
writer.WriteAttributeString("outcome", OutcomeToString(testResult.Outcome));
writer.WriteAttributeString("testListId", testListId);
writer.WriteAttributeString("relativeResultsDirectory", Guid.NewGuid().ToString());
writer.WriteStartElement("Output");
if (!string.IsNullOrEmpty(stdout))
{
writer.WriteStartElement("StdOut");
writer.WriteRaw(System.Security.SecurityElement
.Escape(stdout.Replace("\u001b", string.Empty))
.Replace("\r\n", "
\n"));
writer.WriteEndElement();
}
if (!string.IsNullOrEmpty(stderr))
{
writer.WriteStartElement("StdErr");
writer.WriteRaw(System.Security.SecurityElement
.Escape(stderr.Replace("\u001b", string.Empty))
.Replace("\r\n", "
\n"));
writer.WriteEndElement();
}
if (!string.IsNullOrEmpty(debugTrace))
{
writer.WriteElementString("DebugTrace", debugTrace);
}
writer.WriteStartElement("ErrorInfo");
writer.WriteElementString("Message", testResult.ErrorMessage);
writer.WriteElementString("StackTrace", testResult.ErrorStackTrace);
writer.WriteEndElement();
writer.WriteStartElement("TextMessages");
if (!string.IsNullOrEmpty(message))
{
writer.WriteElementString("Message", message);
}
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.WriteStartElement("TestDefinitions");
foreach (var testCase in testCases)
{
var executionId = testRun.GetExecutionId(testCase).ToString();
var qualifiedParts = testCase.FullyQualifiedName.Split('.');
var className = string.Join(".", qualifiedParts.Take(qualifiedParts.Length - 1));
var name = qualifiedParts.Last();
writer.WriteStartElement("UnitTest");
writer.WriteAttributeString("name", testCase.DisplayName);
writer.WriteAttributeString("storage", assemblyPath);
writer.WriteAttributeString("id", testCase.Id.ToString());
writer.WriteStartElement("Execution");
writer.WriteAttributeString("id", executionId);
writer.WriteEndElement();
writer.WriteStartElement("TestMethod");
writer.WriteAttributeString("codeBase", assemblyPath);
writer.WriteAttributeString("adapterTypeName", testCase.ExecutorUri.ToString());
writer.WriteAttributeString("className", className);
writer.WriteAttributeString("name", name);
writer.WriteEndElement();
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.WriteStartElement("TestEntries");
foreach (var testCase in testCases)
{
var executionId = testRun.GetExecutionId(testCase).ToString();
writer.WriteStartElement("TestEntry");
writer.WriteAttributeString("testId", testCase.Id.ToString());
writer.WriteAttributeString("executionId", executionId);
writer.WriteAttributeString("testListId", testListId);
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.WriteStartElement("TestLists");
writer.WriteStartElement("TestList");
writer.WriteAttributeString("name", "Results Not in a List");
writer.WriteAttributeString("id", testListId);
writer.WriteEndElement();
writer.WriteStartElement("TestList");
writer.WriteAttributeString("name", "All Loaded Results");
writer.WriteAttributeString("id", "19431567-8539-422a-85d7-44ee4e166bda");
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteStartElement("ResultSummary");
writer.WriteAttributeString("outcome", "Completed");
writer.WriteStartElement("Counters");
writer.WriteAttributeString("total", testResults.Count.ToString());
writer.WriteAttributeString("executed", testResults.Count(r => IsExecuted(r)).ToString());
writer.WriteAttributeString("passed", testResults.Count(r => IsPassed(r)).ToString());
writer.WriteAttributeString("failed", testResults.Count(r => IsFailed(r)).ToString());
writer.WriteAttributeString("error", testResults.Count(r => IsError(r)).ToString());
writer.WriteAttributeString("timeout", testResults.Count(r => IsTimeout(r)).ToString());
writer.WriteAttributeString("aborted", testResults.Count(r => IsAborted(r)).ToString());
writer.WriteAttributeString("inconclusive", testResults.Count(r => IsInConclusive(r)).ToString());
writer.WriteAttributeString("passedButRunAborted", testResults.Count(r => IsPassedButRunaborted(r)).ToString());
writer.WriteAttributeString("notRunnable", testResults.Count(r => IsNotRunnable(r)).ToString());
writer.WriteAttributeString("notExecuted", testResults.Count(r => IsNotExecuted(r)).ToString());
writer.WriteAttributeString("disconnected", testResults.Count(r => IsDisconnected(r)).ToString());
writer.WriteAttributeString("warning", testResults.Count(r => IsWarning(r)).ToString());
writer.WriteAttributeString("completed", "0");
writer.WriteAttributeString("inProgress", "0");
writer.WriteAttributeString("pending", "0");
writer.WriteEndElement();
writer.WriteStartElement("Output");
writer.WriteElementString("StdOut", "");
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Close();
writer.Dispose();
return resultsFile;
}