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); }
/// <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); }
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); }
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(); }
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}"); }