public void OnScenarioEnd() { lock (Lock) { var te = _engine.ScenarioContext?.TestError; var testOutput = _outputWriter.GetOutput(); var fc = _engine.FeatureContext; var sc = _engine.ScenarioContext; var finish = DateTime.Now; _currentTestRun.TestInfo.Finish = finish; var testOutputDto = new TestOutputDto { Output = testOutput, SuiteOutput = "", TestOutputInfo = new SimpleItemInfoDto { Date = finish, ItemName = "Test output" } }; _currentTestRun.Output = testOutputDto.TestOutputInfo; _currentTestRun = GhprPluginHelper.TestExecutionEngineHelper.UpdateTestRunOnScenarioEnd( _currentTestRun, te, testOutputDto, fc, sc); ReporterManager.TestFinished(_currentTestRun, testOutputDto); _runner.OnScenarioEnd(); _outputWriter.Flush(); } }
public ItemInfoDto SaveTestRun(TestRunDto testRun, TestOutputDto testOutput) { var res = _dataWriterService.SaveTestRun(testRun, testOutput); _cache.SaveTestRun(testRun, testOutput); return(res); }
public static void TestFinished(TestRunDto testRun, TestOutputDto testOutputDto) { lock (Lock) { _reporter.TestFinished(testRun, testOutputDto); } }
public static List <KeyValuePair <ItemInfoDto, TestOutputDto> > GetOutputsFromSuite(XmlNode suiteNode, List <ItemInfoDto> finishedTestInfoDtos) { var suiteOutput = suiteNode.SelectSingleNode("./output")?.InnerText ?? ""; var res = new List <KeyValuePair <ItemInfoDto, TestOutputDto> >(); var testNodes = suiteNode.SelectNodes("./test-case")?.Cast <XmlNode>().ToList() ?? new List <XmlNode>(); if (!testNodes.Any() || suiteOutput.Equals("")) { return(res); } foreach (var testNode in testNodes) { var testGuid = GetTestGuid(testNode); var testInfoDto = finishedTestInfoDtos.FirstOrDefault(i => i.Guid.Equals(testGuid)); var testOutputDto = new TestOutputDto { TestOutputInfo = new SimpleItemInfoDto(), SuiteOutput = suiteOutput, Output = testNode.SelectSingleNode("./output")?.InnerText ?? "" }; var data = new KeyValuePair <ItemInfoDto, TestOutputDto> (testInfoDto, testOutputDto); res.Add(data); } return(res); }
public ItemInfoDto SaveTestRun(TestRunDto testRunDto, TestOutputDto testOutputDto) { var testOutput = testOutputDto.Map(); var testRun = testRunDto.Map(testOutput.TestOutputInfo.ToDto()); var imgFolder = _locationsProvider.GetScreenshotFolderPath(testRun.TestInfo.Guid); if (Directory.Exists(imgFolder)) { var imgFiles = new DirectoryInfo(imgFolder).GetFiles("*.json"); _logger.Info($"Checking unassigned img files: {imgFiles.Length} file found"); foreach (var imgFile in imgFiles) { var img = Path.Combine(imgFolder, imgFile.Name).LoadTestScreenshot(); if (imgFile.CreationTime > testRun.TestInfo.Start) { _logger.Info($"New img file found: {imgFile.CreationTime}, {imgFile.Name}"); testRun.Screenshots.Add(img.TestScreenshotInfo); } } } var testOutputFullPath = testOutput.Save(_locationsProvider.GetTestOutputFolderPath(testRun.TestInfo.Guid)); _logger.Info($"Test output was saved: '{testOutputFullPath}'"); _logger.Debug($"Test run data was saved correctly: {JsonConvert.SerializeObject(testOutput, Formatting.Indented)}"); var testRunFullPath = testRun.Save(_locationsProvider.GetTestFolderPath(testRun.TestInfo.Guid)); _logger.Info($"Test run was saved: '{testRunFullPath}'"); var testRunsInfoFullPath = testRun.TestInfo.SaveTestInfo(_locationsProvider); _logger.Info($"Test runs Info was saved: '{testRunsInfoFullPath}'"); _logger.Debug($"Test run data was saved correctly: {JsonConvert.SerializeObject(testRun, Formatting.Indented)}"); return(testRun.TestInfo.ToDto()); }
public TestRunDto UpdateTestRunOnScenarioEnd(TestRunDto tr, Exception testError, string testOutput, FeatureContext fc, ScenarioContext sc, out TestOutputDto testOutputDto) { var finishDt = DateTime.Now; var tc = sc.TryGetTestContext(); var nameForGuid = GetFullNameForGuid(tc, sc, fc); var guid = nameForGuid.ToMd5HashGuid().ToString(); tr.TestInfo.Guid = Guid.Parse(guid); tr.TestInfo.Finish = finishDt; tr.FullName = GetFullName(tc, sc, fc); testOutputDto = new TestOutputDto { Output = testOutput, SuiteOutput = "", TestOutputInfo = new SimpleItemInfoDto { Date = finishDt, ItemName = "Test output" } }; tr.Output = testOutputDto.TestOutputInfo; tr.Result = testError == null ? "Passed" : (testError is AssertFailedException ? "Failed" : "Error"); tr.TestMessage = testError?.Message ?? ""; tr.TestStackTrace = testError?.StackTrace ?? ""; tr.TestData.AddRange(TestDataHelper.GetTestData()); return(tr); }
public void DeleteTestOutput(TestRunDto testRun, TestOutputDto testOutput) { var testOutputFullPath = _locationsProvider.GetTestOutputFullPath(testRun.TestInfo.Guid, testRun.TestInfo.Finish); _logger.Debug($"Deleting Test Output: {testOutputFullPath}"); File.Delete(testOutputFullPath); }
public ItemInfoDto SaveTestRun(TestRunDto testRunDto, TestOutputDto testOutputDto) { //TODO: SAVE testOutputDto correctly! var testRunEntity = testRunDto.Map(); Database.SaveTestRun(testRunEntity); return(testRunEntity.Data.TestInfo.ToDto()); }
public GhprTestCase() { Id = ""; ParentId = ""; GhprTestRun = new TestRunDto(); GhprTestOutput = new TestOutputDto(); GhprTestScreenshots = new List <TestScreenshotDto>(); }
public void TestFinished(TestRunDto testRun, TestOutputDto testOutputDto) { OnTestFinish(testRun, testOutputDto); Logger.Info($"Test '{testRun.Name}' (Guid: {testRun.TestInfo.Guid}) finished"); if (ReporterSettings.RealTimeGeneration) { GenerateReport(DateTime.Now); } }
private void OnTestFinish(TestRunDto testDtoWhenFinished, TestOutputDto testOutputDto) { Action.Safe(() => { RunRepository.OnTestFinished(testDtoWhenFinished); var testDtoWhenStarted = TestRunsRepository.ExtractCorrespondingTestRun(testDtoWhenFinished); var finalTest = TestRunProcessor.Process(testDtoWhenStarted, testDtoWhenFinished, RunRepository.RunGuid); Logger.Debug($"Saving test run '{finalTest.Name}' (Guid: {finalTest.TestInfo.Guid})"); DataWriterService.SaveTestRun(finalTest, testOutputDto); }); }
public static TestOutputDto ToDto(this TestOutput testOutput) { var testOutputDto = new TestOutputDto { SuiteOutput = testOutput.SuiteOutput, Output = testOutput.Output, TestOutputInfo = testOutput.TestOutputInfo.ToDto() }; return(testOutputDto); }
public static string Save(this TestOutputDto testOutput, string path) { path.Create(); var fullPath = Path.Combine(path, NamesProvider.GetTestOutputFileName(testOutput.TestOutputInfo.Date)); using (var file = File.CreateText(fullPath)) { var serializer = new JsonSerializer(); serializer.Serialize(file, testOutput); } return(fullPath); }
public static TestOutput Map(this TestOutputDto testOutputDto) { var name = NamesProvider.GetTestOutputFileName(testOutputDto.TestOutputInfo.Date); var testOutput = new TestOutput { SuiteOutput = testOutputDto.SuiteOutput, Output = testOutputDto.Output, TestOutputInfo = testOutputDto.TestOutputInfo.MapSimpleItemInfo(name) }; return(testOutput); }
public void UpdateTestOutput(ItemInfoDto testInfo, TestOutputDto testOutput) { var outputFolderPath = _locationsProvider.GetTestOutputFolderPath(testInfo.Guid); var outputFileName = NamesProvider.GetTestOutputFileName(testInfo.Finish); var existingOutput = Path.Combine(outputFolderPath, outputFileName).LoadTestOutput(); _logger.Debug($"Loaded existing output: {JsonConvert.SerializeObject(existingOutput, Formatting.Indented)}"); existingOutput.SuiteOutput = testOutput.SuiteOutput; existingOutput.Output = testOutput.Output; File.Delete(Path.Combine(outputFolderPath, outputFileName)); _logger.Debug("Deleted old output"); existingOutput.Save(outputFolderPath); _logger.Debug($"Saved updated output: {JsonConvert.SerializeObject(existingOutput, Formatting.Indented)}"); }
public static TestOutputDto GetTestOutput(XmlNode testNode, DateTime testFinishDate, ILogger logger) { var output = new TestOutputDto { SuiteOutput = "", Output = testNode.SelectSingleNode("./output")?.InnerText ?? "", TestOutputInfo = new SimpleItemInfoDto { Date = testFinishDate } }; return(output); }
public TestOutputDto GetTestOutput(TestRunDto test) { TestOutputDto testOutput = null; if (test != null) { var fullPath = _locationsProvider.GetTestOutputFullPath(test.TestInfo.Guid, test.TestInfo.Finish); if (File.Exists(fullPath)) { testOutput = fullPath.LoadTestOutput(); } } return(testOutput); }
public TestRunDto UpdateTestRunOnScenarioEnd(TestRunDto tr, Exception testError, string testOutput, FeatureContext fc, ScenarioContext sc, out TestOutputDto testOutputDto) { var toDto = new TestOutputDto { Output = testOutput, SuiteOutput = "", TestOutputInfo = new SimpleItemInfoDto { ItemName = "Test output", Date = tr.TestInfo.Finish } }; testOutputDto = toDto; tr.Output = toDto.TestOutputInfo; tr.Result = testError == null ? "Passed" : "Failed"; tr.TestMessage = testError?.Message ?? ""; tr.TestStackTrace = testError?.StackTrace ?? ""; return(tr); }
public TestRunDto UpdateTestRunOnScenarioEnd(TestRunDto tr, Exception testError, string testOutput, FeatureContext fc, ScenarioContext sc, out TestOutputDto testOutputDto) { testOutputDto = new TestOutputDto { Output = testOutput, SuiteOutput = "", TestOutputInfo = new SimpleItemInfoDto { Date = tr.TestInfo.Finish, ItemName = "Test output" } }; tr.Output = testOutputDto.TestOutputInfo; //tr.Result = testError == null ? "Passed" : (testError is AssertionException ? "Failed" : "Error"); tr.Result = TestContext.CurrentContext.Result.Outcome.ToString(); tr.TestMessage = testError?.Message ?? ""; tr.TestStackTrace = testError?.StackTrace ?? ""; tr.TestData.AddRange(TestDataHelper.GetTestData()); return(tr); }
public void DeleteTestOutput(TestRunDto testRun, TestOutputDto testOutput) { _dataWriterService.DeleteTestOutput(testRun, testOutput); _cache.DeleteTestOutput(testRun, testOutput); }
public TestRunDto UpdateTestRunOnScenarioEnd(TestRunDto tr, Exception testError, TestOutputDto testOutputDto, FeatureContext fc, ScenarioContext sc) { tr.Result = testError == null ? "Passed" : "Failed"; tr.TestMessage = testError?.Message ?? ""; tr.TestStackTrace = testError?.StackTrace ?? ""; return(tr); }
public void DeleteTestOutput(TestRunDto testRun, TestOutputDto testOutput) { throw new NotImplementedException(); }
public TestRunDto UpdateTestRunOnScenarioEnd(TestRunDto tr, Exception testError, TestOutputDto testOutputDto, FeatureContext fc, ScenarioContext sc) { var tc = sc.ScenarioContainer.Resolve <TestContext>(); var nameForGuid = GetFullNameForGuid(tc, sc, fc); var guid = nameForGuid.ToMd5HashGuid().ToString(); tr.TestInfo.Guid = Guid.Parse(guid); tr.FullName = GetFullName(tc, sc, fc); tr.Result = testError == null ? "Passed" : (testError is AssertFailedException ? "Failed" : "Error"); tr.TestMessage = testError?.Message ?? ""; tr.TestStackTrace = testError?.StackTrace ?? ""; tr.TestData.AddRange(TestDataHelper.GetTestData()); return(tr); }
public void UpdateTestOutput(ItemInfoDto testInfo, TestOutputDto testOutput) { _dataWriterService.UpdateTestOutput(testInfo, testOutput); _cache.UpdateTestOutput(testInfo, testOutput); }
public void UpdateTestOutput(ItemInfoDto testInfo, TestOutputDto testOutput) { //TODO: implement later! throw new System.NotImplementedException(); }
public void DeleteTestOutput(TestRunDto testRun, TestOutputDto testOutput) { }
public void UpdateTestOutput(ItemInfoDto testInfo, TestOutputDto testOutput) { }
public ItemInfoDto SaveTestRun(TestRunDto testRun, TestOutputDto testOutput) { return(new ItemInfoDto { Guid = Guid.NewGuid(), Start = DateTime.Now, ItemName = "SaveTestRun", Finish = DateTime.Now.AddSeconds(3) }); }
public List <GhprTestCase> GetTestRuns() { var testRuns = new List <GhprTestCase>(); var deploymentFolder = _xml.GetNode("TestSettings")?.GetNode("Deployment")?.GetAttrVal("runDeploymentRoot"); var utrs = _xml.GetNodesList("UnitTestResult"); var uts = _xml.GetNode("TestDefinitions")?.GetNodesList("UnitTest"); if (utrs == null) { Console.WriteLine("No tests found!"); return(testRuns); } foreach (var utr in utrs) { try { var executionId = utr.GetAttrVal("executionId"); var start = utr.GetDateTimeVal("startTime"); var finish = utr.GetDateTimeVal("endTime"); var duration = utr.GetAttrVal("duration"); var durationTimeSpan = new TimeSpan(0); TimeSpan.TryParse(duration, out durationTimeSpan); var internalTestGuid = utr.GetAttrVal("testId") ?? Guid.NewGuid().ToString(); var testName = utr.GetAttrVal("testName"); var ut = uts?.FirstOrDefault(node => (node.GetAttrVal("id") ?? "").Equals(internalTestGuid)); if (utr.FirstChild != null && utr.FirstChild.Name.Equals("InnerResults")) { continue; } var tm = ut?.GetNode("TestMethod"); var testDesc = ut?.GetNode("Description")?.InnerText; var testFullName = (tm?.GetAttrVal("className") ?? "").Split(',')[0] + "." + testName; var testGuid = testFullName.ToMd5HashGuid(); var testInfo = new ItemInfoDto { Start = start, Finish = finish, Guid = testGuid }; var result = utr.GetAttrVal("outcome"); var outputNode = utr.GetNode("Output"); var output = outputNode?.GetNode("StdOut")?.InnerText ?? ""; var msg = outputNode?.GetNode("ErrorInfo")?.GetNode("Message")?.InnerText ?? ""; var sTrace = outputNode?.GetNode("ErrorInfo")?.GetNode("StackTrace")?.InnerText ?? ""; var testOutputInfo = new SimpleItemInfoDto { Date = finish, ItemName = "Test output" }; var testRun = new TestRunDto { TestInfo = testInfo, Name = testName, Description = testDesc, Duration = durationTimeSpan == new TimeSpan(0) ? .0 : durationTimeSpan.TotalSeconds, FullName = testFullName, Result = result, Output = testOutputInfo, TestMessage = msg, TestStackTrace = sTrace }; var testOutput = new TestOutputDto { TestOutputInfo = testOutputInfo, Output = output, SuiteOutput = "" }; var testScreenshots = new List <TestScreenshotDto>(); var resFiles = utr.GetNode("ResultFiles")?.GetNodesList("ResultFile") ?? new List <XmlNode>(); foreach (var resFile in resFiles) { var relativePath = resFile.GetAttrVal("path"); var fullResFilePath = Path.Combine( Path.GetDirectoryName(_trxFullPath), deploymentFolder, "In", executionId, relativePath); if (File.Exists(fullResFilePath)) { try { var ext = Path.GetExtension(fullResFilePath); if (new[] { "png", "jpg", "jpeg", "bmp" }.Contains(ext.Replace(".", "").ToLower())) { var fileInfo = new FileInfo(fullResFilePath); var bytes = File.ReadAllBytes(fullResFilePath); var base64 = Convert.ToBase64String(bytes); var screenInfo = new SimpleItemInfoDto { Date = fileInfo.CreationTimeUtc, ItemName = "" }; var testScreenshotDto = new TestScreenshotDto { Format = ext.Replace(".", ""), TestGuid = testGuid, TestScreenshotInfo = screenInfo, Base64Data = base64 }; testScreenshots.Add(testScreenshotDto); testRun.Screenshots.Add(screenInfo); } } catch (Exception e) { Console.WriteLine($"Error when trying to add test attachment: {e.Message}{Environment.NewLine}" + $"{e.StackTrace}{Environment.NewLine}" + $"The test XML node is:{Environment.NewLine}" + $"{utr.OuterXml}" + $"The file path is:{Environment.NewLine}" + $"{fullResFilePath}"); } } } var ghprTestCase = new GhprTestCase { Id = testGuid.ToString(), ParentId = "", GhprTestRun = testRun, GhprTestOutput = testOutput, GhprTestScreenshots = testScreenshots }; testRuns.Add(ghprTestCase); } catch (Exception e) { Console.WriteLine($"Error when trying to parse the test: {e.Message}{Environment.NewLine}" + $"{e.StackTrace}{Environment.NewLine}" + $"The test XML node is:{Environment.NewLine}" + $"{utr.OuterXml}"); } } return(testRuns); }
public List <KeyValuePair <TestRunDto, TestOutputDto> > GetTestRuns() { var testRuns = new List <KeyValuePair <TestRunDto, TestOutputDto> >(); var utrs = _xml.GetNodesList("UnitTestResult"); var uts = _xml.GetNode("TestDefinitions")?.GetNodesList("UnitTest"); if (utrs == null) { Console.WriteLine("No tests found!"); return(testRuns); } foreach (var utr in utrs) { var start = DateTime.Parse(utr.GetAttrVal("startTime")); var finish = DateTime.Parse(utr.GetAttrVal("endTime")); var testGuid = utr.GetAttrVal("testId") ?? Guid.NewGuid().ToString(); var testInfo = new ItemInfoDto { Start = start, Finish = finish, Guid = Guid.Parse(testGuid) }; var testName = utr.GetAttrVal("testName"); var ut = uts?.FirstOrDefault(node => (node.GetAttrVal("id") ?? "").Equals(testGuid)); var tm = ut?.GetNode("TestMethod"); var testDesc = ut?.GetNode("Description")?.InnerText; var testFullName = (tm?.GetAttrVal("className") ?? "").Split(',')[0] + "." + testName; var result = utr.GetAttrVal("outcome"); var output = utr.GetNode("Output")?.GetNode("StdOut")?.InnerText ?? ""; var msg = utr.GetNode("Output")?.GetNode("ErrorInfo")?.GetNode("Message")?.InnerText ?? ""; var sTrace = utr.GetNode("Output")?.GetNode("ErrorInfo")?.GetNode("StackTrace")?.InnerText ?? ""; var testOutputInfo = new SimpleItemInfoDto { Date = finish, ItemName = "Test output" }; var testRun = new TestRunDto { TestInfo = testInfo, Name = testName, Description = testDesc, FullName = testFullName, Result = result, Output = testOutputInfo, TestMessage = msg, TestStackTrace = sTrace }; var testOutput = new TestOutputDto { TestOutputInfo = testOutputInfo, Output = output, SuiteOutput = "" }; testRuns.Add(new KeyValuePair <TestRunDto, TestOutputDto>(testRun, testOutput)); } return(testRuns); }