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();
     }
 }
Beispiel #2
0
        public ItemInfoDto SaveTestRun(TestRunDto testRun, TestOutputDto testOutput)
        {
            var res = _dataWriterService.SaveTestRun(testRun, testOutput);

            _cache.SaveTestRun(testRun, testOutput);
            return(res);
        }
Beispiel #3
0
 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());
        }
Beispiel #6
0
        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());
        }
Beispiel #9
0
 public GhprTestCase()
 {
     Id                  = "";
     ParentId            = "";
     GhprTestRun         = new TestRunDto();
     GhprTestOutput      = new TestOutputDto();
     GhprTestScreenshots = new List <TestScreenshotDto>();
 }
Beispiel #10
0
 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);
     }
 }
Beispiel #11
0
 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);
     });
 }
Beispiel #12
0
        public static TestOutputDto ToDto(this TestOutput testOutput)
        {
            var testOutputDto = new TestOutputDto
            {
                SuiteOutput    = testOutput.SuiteOutput,
                Output         = testOutput.Output,
                TestOutputInfo = testOutput.TestOutputInfo.ToDto()
            };

            return(testOutputDto);
        }
Beispiel #13
0
        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);
        }
Beispiel #14
0
        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)}");
        }
Beispiel #16
0
        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);
        }
Beispiel #19
0
 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);
 }
Beispiel #20
0
 public void DeleteTestOutput(TestRunDto testRun, TestOutputDto testOutput)
 {
     _dataWriterService.DeleteTestOutput(testRun, testOutput);
     _cache.DeleteTestOutput(testRun, testOutput);
 }
Beispiel #21
0
 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);
        }
Beispiel #24
0
 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)
     });
 }
Beispiel #29
0
        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);
        }
Beispiel #30
0
        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);
        }