public static void ConvertWttLogToXUnitLog(string wttInputPath, string xunitOutputPath, string testNamePrefix, string helixResultsContainerUri, string helixResultsContainerRsas) { var testPass = TestResultParser.ParseTestWttFile(wttInputPath, true); var results = testPass.TestResults; int resultCount = results.Count; int passedCount = results.Where(r => r.Passed).Count(); int failedCount = resultCount - passedCount; var root = new XElement("assemblies"); var assembly = new XElement("assembly"); assembly.SetAttributeValue("name", "MUXControls.Test.dll"); assembly.SetAttributeValue("test-framework", "TAEF"); assembly.SetAttributeValue("run-date", DateTime.Now.ToString("yyyy-mm-dd")); // This doesn't need to be completely accurate since it's not exposed anywhere. // If we need accurate an start time we can probably calculate it from the te.wtl file, but for // now this is fine. assembly.SetAttributeValue("run-time", (DateTime.Now - testPass.TestPassExecutionTime).ToString("hh:mm:ss")); assembly.SetAttributeValue("total", resultCount); assembly.SetAttributeValue("passed", passedCount); assembly.SetAttributeValue("failed", failedCount); assembly.SetAttributeValue("skipped", 0); assembly.SetAttributeValue("time", (int)testPass.TestPassExecutionTime.TotalSeconds); assembly.SetAttributeValue("errors", 0); root.Add(assembly); var collection = new XElement("collection"); collection.SetAttributeValue("total", resultCount); collection.SetAttributeValue("passed", passedCount); collection.SetAttributeValue("failed", failedCount); collection.SetAttributeValue("skipped", 0); collection.SetAttributeValue("name", "Test collection"); collection.SetAttributeValue("time", (int)testPass.TestPassExecutionTime.TotalSeconds); assembly.Add(collection); foreach (var result in results) { var test = new XElement("test"); test.SetAttributeValue("name", testNamePrefix + "." + result.Name); var className = result.Name.Substring(0, result.Name.LastIndexOf('.')); var methodName = result.Name.Substring(result.Name.LastIndexOf('.') + 1); test.SetAttributeValue("type", className); test.SetAttributeValue("method", methodName); test.SetAttributeValue("time", result.ExecutionTime.TotalSeconds); test.SetAttributeValue("result", result.Passed ? "Pass" : "Fail"); if (!result.Passed) { var failure = new XElement("failure"); failure.SetAttributeValue("exception-type", "Exception"); var message = new XElement("message"); StringBuilder errorMessage = new StringBuilder(); errorMessage.AppendLine("Log: " + GetUploadedFileUrl(wttInputPath, helixResultsContainerUri, helixResultsContainerRsas)); errorMessage.AppendLine(); if (result.Screenshots.Any()) { errorMessage.AppendLine("Screenshots:"); foreach (var screenshot in result.Screenshots) { errorMessage.AppendLine(GetUploadedFileUrl(screenshot, helixResultsContainerUri, helixResultsContainerRsas)); errorMessage.AppendLine(); } } errorMessage.AppendLine("Error Log: "); errorMessage.AppendLine(result.Details); message.Add(new XCData(errorMessage.ToString())); failure.Add(message); test.Add(failure); } collection.Add(test); } File.WriteAllText(xunitOutputPath, root.ToString()); }
public static void ConvertWttLogToXUnitLog(string wttInputPath, string xunitOutputPath, string testNamePrefix, string helixworkitem) { var testPass = TestResultParser.ParseTestWttFile(wttInputPath, helixworkitem, true); var results = testPass.TestResults; int resultCount = results.Count; int passedCount = results.Where(r => r.Passed).Count(); int failedCount = resultCount - passedCount; var root = new XElement("assemblies"); var assembly = new XElement("assembly"); assembly.SetAttributeValue("name", "ProjectReunionHelix.dll"); assembly.SetAttributeValue("test-framework", "TAEF"); assembly.SetAttributeValue("run-date", DateTime.Now.ToString("yyyy-MM-dd")); // This doesn't need to be completely accurate since it's not exposed anywhere. // If we need accurate an start time we can probably calculate it from the te.wtl file, but for // now this is fine. assembly.SetAttributeValue("run-time", (DateTime.Now - testPass.TestPassExecutionTime).ToString("hh:mm:ss")); assembly.SetAttributeValue("total", resultCount); assembly.SetAttributeValue("passed", passedCount); assembly.SetAttributeValue("failed", failedCount); assembly.SetAttributeValue("skipped", 0); assembly.SetAttributeValue("time", (int)testPass.TestPassExecutionTime.TotalSeconds); assembly.SetAttributeValue("errors", 0); root.Add(assembly); var collection = new XElement("collection"); collection.SetAttributeValue("total", resultCount); collection.SetAttributeValue("passed", passedCount); collection.SetAttributeValue("failed", failedCount); collection.SetAttributeValue("skipped", 0); collection.SetAttributeValue("name", "Test collection"); collection.SetAttributeValue("time", (int)testPass.TestPassExecutionTime.TotalSeconds); assembly.Add(collection); foreach (var result in results) { var test = new XElement("test"); test.SetAttributeValue("name", testNamePrefix + "." + result.Name); test.SetAttributeValue("time", result.ExecutionTime.TotalSeconds); test.SetAttributeValue("result", result.Passed ? "Pass" : "Fail"); if (!result.Passed) { var failure = new XElement("failure"); failure.SetAttributeValue("exception-type", "Exception"); var message = new XElement("message"); message.Add(new XCData(result.Details)); failure.Add(message); test.Add(failure); } collection.Add(test); } File.WriteAllText(xunitOutputPath, root.ToString()); }