public void NotifyAboutTestFail(string testName, TestSession session, BrowserPattern pattern,
                                 string testResultMessage)
 {
     Console.ForegroundColor = ConsoleColor.Red;
     testOutputWriter($"Test failed: {testName} {testResultMessage}");
     Console.ResetColor();
 }
        public void NotifyAboutTestSuccess(string testName, TestSession session, BrowserPattern pattern)
        {
            var escapedTestName = ServiceMessageReplacements.Encode(testName);
            var testWriter      = serviceMessage.OpenTest(escapedTestName);

            testWriter.Dispose();
            UploadReportTabToCI(session, pattern.BrowserName);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Compares images pixel by pixel with a specified tolerance defined by PixelToleranceCount and PixelColorToleranceCount
        /// </summary>
        public bool Compare(BrowserPattern browserPattern, byte[] screenshot, out string resultMessage)
        {
            if (browserPattern == null)
            {
                throw new ArgumentNullException(nameof(browserPattern));
            }

            if (screenshot == null)
            {
                throw new ArgumentNullException(nameof(screenshot));
            }

            var pattern          = browserPattern.PatternScreenshot.Image;
            var blindRegions     = browserPattern.GetAllBlindRegions();
            var patternBitmap    = ImageHelpers.ApplyBlindRegions(pattern, blindRegions);
            var screenshotBitmap = ImageHelpers.ApplyBlindRegions(screenshot, blindRegions);

            if (patternBitmap == null)
            {
                resultMessage = "\r\n+---patternBitmap is null";
                return(false);
            }

            if (screenshotBitmap == null)
            {
                resultMessage = "\r\n+---screenshotBitmap is null";
                return(false);
            }

            if (!AreBitmapsOfEqualSize(patternBitmap, screenshotBitmap))
            {
                resultMessage = "\r\n+---Different sizes of bitmaps" +
                                $"\r\n+---Pattern size: {patternBitmap.Size}" +
                                $"\r\n+---Screenshot size: {screenshotBitmap.Size}";

                return(false);
            }

            var numberOfUnmatchedPixels = CountUnmatchedPixels(patternBitmap, screenshotBitmap);

            var percentOfUnmatchedPixels = (numberOfUnmatchedPixels * 100.0) / (patternBitmap.Width * patternBitmap.Height);
            var areMatchedByPixelCount   = numberOfUnmatchedPixels <= ComparisonParameters.PixelToleranceCount;
            var areMatchedByAllowedMaximumDifferenceInPercent = percentOfUnmatchedPixels <= ComparisonParameters.MaxPercentOfUnmatchedPixels;

            resultMessage = "\r\n+---" + (areMatchedByPixelCount ? "[PASS] Images match" : "[FAIL] Images do not match") +
                            $" within specified pixel tolerance: {numberOfUnmatchedPixels}" +
                            $" <= {ComparisonParameters.PixelToleranceCount}";

            resultMessage += $"\r\n+---" + (areMatchedByAllowedMaximumDifferenceInPercent ? "[PASS] Images match" : "[FAIL] Images do not match") +
                             " within specified percent of tolerance: " +
                             $"{percentOfUnmatchedPixels.ToString("0.######", CultureInfo.InvariantCulture)}%" +
                             " <= " +
                             $"{ComparisonParameters.MaxPercentOfUnmatchedPixels.ToString("0.######", CultureInfo.InvariantCulture)}%";

            return(areMatchedByPixelCount && areMatchedByAllowedMaximumDifferenceInPercent);
        }
        private string GetTestResultPreviewPath(TestSession session, BrowserPattern pattern)
        {
            var rootPath = GetVisualAssertionWebPath();

            if (string.IsNullOrWhiteSpace(rootPath))
            {
                return(string.Empty);
            }
            return($"{rootPath}/Home/GetTestResultPreview?testSessionId={session.Id}&patternId={pattern.Id}");
        }
        public void NotifyAboutTestFail(string testName, TestSession session, BrowserPattern pattern)
        {
            var escapedTestName = ServiceMessageReplacements.Encode(testName);
            var detailsMessage  = GetDetailsMessage(session, pattern);
            var testWriter      = serviceMessage.OpenTest(escapedTestName);

            testWriter.WriteFailed("Screenshots are different", detailsMessage);
            testWriter.Dispose();
            UploadReportTabToCI(session, pattern.BrowserName);
        }
        public bool Compare(BrowserPattern browserPattern, byte[] screenshot, out string resultMessage)
        {
            if (browserPattern == null)
            {
                throw new ArgumentNullException(nameof(browserPattern));
            }

            if (screenshot == null)
            {
                throw new ArgumentNullException(nameof(screenshot));
            }

            var blindRegions = browserPattern.GetAllBlindRegions();

            var screenshotHash = ImageHelpers.ComputeHash(screenshot, blindRegions);
            var areMatched     = screenshotHash == browserPattern.PatternScreenshot.Hash;

            resultMessage = areMatched ? "Hashes match" : "Hashes do not match";

            return(areMatched);
        }
Exemplo n.º 7
0
        private TestResult GetTestResult(byte[] image, ScreenshotIdentity screenshotIdentity, BrowserPattern browserPattern, BrowserPattern newPattern)
        {
            var testResult = new TestResult
            {
                Pattern        = newPattern ?? browserPattern,
                ScreenshotName = screenshotIdentity.ScreenshotName,
                Category       = screenshotIdentity.Category,
                BrowserName    = screenshotIdentity.BrowserName
            };

            if (newPattern != null)
            {
                testResult.Status = TestResultStatus.NewPattern;
            }
            else if (browserPattern.MatchTo(image))
            {
                testResult.Status = TestResultStatus.Passed;
            }
            else
            {
                testResult.Status               = TestResultStatus.Failed;
                testResult.ErrorScreenshot      = image;
                testResult.BlindRegionsSnapshot = browserPattern.GetCopyOfAllBlindRegions();
            }
            return(testResult);
        }
        private TestResult GetTestResult(byte[] image, ScreenshotIdentity screenshotIdentity, BrowserPattern browserPattern, BrowserPattern newPattern)
        {
            if (image == null)
            {
                throw new ArgumentNullException(nameof(image));
            }

            if (screenshotIdentity == null)
            {
                throw new ArgumentNullException(nameof(screenshotIdentity));
            }

            var testResult = new TestResult
            {
                Pattern        = newPattern ?? browserPattern,
                ScreenshotName = screenshotIdentity.ScreenshotName,
                Category       = screenshotIdentity.Category,
                BrowserName    = screenshotIdentity.BrowserName
            };

            if (newPattern != null)
            {
                testResult.Status = TestResultStatus.NewPattern;
            }

            var comparisonResult = screenshotComparisonStrategy.Compare(browserPattern, image, out var message);

            testResult.TestResultMessage = message;

            if (comparisonResult)
            {
                testResult.Status = TestResultStatus.Passed;
            }
            else
            {
                testResult.Status               = TestResultStatus.Failed;
                testResult.ErrorScreenshot      = image;
                testResult.BlindRegionsSnapshot = browserPattern.GetCopyOfAllBlindRegions();
            }
            return(testResult);
        }
Exemplo n.º 9
0
        private TestResult GetTestResult(byte[] image, ScreenshotIdentity screenshotIdentity, BrowserPattern browserPattern)
        {
            var testResult = new TestResult
            {
                Pattern        = browserPattern,
                ScreenshotName = screenshotIdentity.ScreenshotName,
                Category       = screenshotIdentity.Category,
                BrowserName    = screenshotIdentity.BrowserName
            };

            if (browserPattern.MatchTo(image))
            {
                testResult.TestPassed = true;
            }
            else
            {
                testResult.TestPassed           = false;
                testResult.ErrorScreenshot      = image;
                testResult.BlindRegionsSnapshot = browserPattern.GetCopyOfAllBlindRegions();
            }
            return(testResult);
        }
 public void NotifyAboutTestSuccess(string testName, TestSession session, BrowserPattern pattern)
 {
     Console.ForegroundColor = ConsoleColor.Green;
     testOuputWriter($"Test passed: {testName}");
     Console.ResetColor();
 }
Exemplo n.º 11
0
        private static Dropdown <long> MapToAllPatternsDropdown(long patternId, VisualAssertions.Screenshots.Domain.TestCase testCase, BrowserPattern browserPattern)
        {
            var allPatterns = testCase.Patterns
                              .Where(x => x.BrowserName == browserPattern.BrowserName)
                              .OrderByDescending(x => x.Id).ToList();

            var counter = 0;

            return(new Dropdown <long>()
            {
                Selected = patternId,
                Options = allPatterns
                          .Select(x => new DropdownItem <long>()
                {
                    Label = (allPatterns.Count - (counter++)).ToString(),
                    Value = x.Id
                }).ToList()
            });
        }
        private string GetDetailsMessage(TestSession session, BrowserPattern pattern)
        {
            var testResultPreviewPath = GetTestResultPreviewPath(session, pattern);

            return(string.IsNullOrWhiteSpace(testResultPreviewPath)? "": $"Details at {testResultPreviewPath}");
        }