سرویس رگرسیون تصویری Novus
wdio-novus-visual-regression-service یک پکیج شخص ثالث است، برای اطلاعات بیشتر لطفا به GitHub | npm مراجعه کنید
تست رگرسیون تصویری برای WebdriverIO
بر اساس کار Jan-André Zinser روی wdio-visual-regression-service و wdio-screenshot
نصب
شما میتوانید wdio-novus-visual-regression-service را به صورت معمول از طریق NPM نصب کنید:
$ npm install wdio-novus-visual-regression-service --save-dev
دستورالعملهای نحوه نصب WebdriverIO
را میتوانید اینجا پیدا کنید.
پیکربندی
برای راهاندازی wdio-novus-visual-regression-service، novus-visual-regression
را به بخش سرویس فایل پیکربندی WebdriverIO خود اضافه کنید و استراتژی مقایسه مورد نظر خود را در گزینههای سرویس تعریف کنید.
// wdio.conf.js
var path = require('path');
var VisualRegressionCompare = require('wdio-novus-visual-regression-service/compare');
function getScreenshotName(basePath) {
return function(context) {
var type = context.type;
var testName = context.test.title;
var browserVersion = parseInt(context.browser.version, 10);
var browserName = context.browser.name;
var browserViewport = context.meta.viewport;
var browserWidth = browserViewport.width;
var browserHeight = browserViewport.height;
return path.join(basePath, `${testName}_${type}_${browserName}_v${browserVersion}_${browserWidth}x${browserHeight}.png`);
};
}
exports.config = {
// ...
services: [
[
'novus-visual-regression',
{
compare: new VisualRegressionCompare.LocalCompare({
referenceName: getScreenshotName(path.join(process.cwd(), 'screenshots/reference')),
screenshotName: getScreenshotName(path.join(process.cwd(), 'screenshots/screen')),
diffName: getScreenshotName(path.join(process.cwd(), 'screenshots/diff')),
misMatchTolerance: 0.01,
}),
viewportChangePause: 300,
viewports: [{ width: 320, height: 480 }, { width: 480, height: 320 }, { width: 1024, height: 768 }],
orientations: ['landscape', 'portrait'],
}
]
],
// ...
};
گزینهها
در کلید visualRegression
در فایل wdio.config.js خود، میتوانید یک شیء پیکربندی با ساختار زیر را ارسال کنید:
-
compare
Object
روش مقایسه اسکرینشات، به روشهای مقایسه مراجعه کنید -
viewportChangePause
Number
( پیشفرض: 100 )
بعد از تغییر viewport، x میلیثانیه صبر کنید. ممکن است مرورگر برای رسم مجدد مدتی طول بکشد. این میتواند منجر به مشکلات رندرینگ شود و نتایج ناسازگار بین اجراها تولید کند. -
viewports
Object[{ width: Number, height: Number }]
( پیشفرض: [viewport-کنونی] ) (فقط دسکتاپ)
تمام اسکرینشاتها در ابعاد viewport مختلف گرفته میشوند (مثلاً برای تستهای طراحی واکنشگرا) -
orientations
String[] {landscape, portrait}
( پیشفرض: [جهت-کنونی] ) (فقط موبایل)
تمام اسکرینشاتها در جهتهای صفحه نمایش مختلف گرفته میشوند (مثلاً برای تستهای طراحی واکنشگرا)
روشهای مقایسه
wdio-novus-visual-regression-service استفاده از روشهای مختلف مقایسه اسکرینشات را امکانپذیر میکند.
VisualRegressionCompare.LocalCompare
همانطور که از نامش پیداست، LocalCompare اسکرینشاتها را به صورت محلی روی کامپیوتر شما میگیرد و آنها را با اجراهای قبلی مقایسه میکند.
میتوانید گزینههای زیر را به صورت یک شیء به سازنده آن ارسال کنید:
-
referenceName
Function
تابعی را ارسال کنید که نام فایل را برای اسکرینشات مرجع برمیگرداند. تابع یک شیء context را به عنوان اولین پارامتر با تمام اطلاعات مربوط به دستور دریافت میکند. -
screenshotName
Function
تابعی را ارسال کنید که نام فایل را برای اسکرینشات فعلی برمیگرداند. تابع یک شیء context را به عنوان اولین پارامتر با تمام اطلاعات مربوط به دستور دریافت میکند. -
diffName
Function
تابعی را ارسال کنید که نام فایل را برای اسکرینشات تفاوت برمیگرداند. تابع یک شیء context را به عنوان اولین پارامتر با تمام اطلاعات مربوط به دستور دریافت میکند. -
misMatchTolerance
Number
( پیشفرض: 0.01 )
عددی بین 0 و 100 که درجه عدم تطابق برای در نظر گرفتن دو تصویر به عنوان یکسان را تعریف میکند. افزایش این مقدار پوشش تست را کاهش میدهد. -
ignoreComparison
String
( پیشفرض: nothing )
یک رشته با مقدارnothing
،colors
یاantialiasing
برای تنظیم روش مقایسه ارسال کنید.
برای مثالی از تولید نامهای فایل اسکرینشات بر اساس نام تست فعلی، به کد نمونه پیکربندی نگاه کنید.
VisualRegressionCompare.SaveScreenshot
این روش یک نسخه سادهشده از VisualRegressionCompare.LocalCompare
برای گرفتن فقط اسکرینشاتها است. این زمانی مفید است که میخواهید فقط اسکرینشاتهای مرجع ایجاد کنید و بدون مقایسه، آنها را بازنویسی کنید.
میتوانید گزینههای زیر را به صورت یک شیء به سازنده آن ارسال کنید:
- screenshotName
Function
تابعی را ارسال کنید که نام فایل را برای اسکرینشات فعلی برمیگرداند. تابع یک شیء context را به عنوان اولین پارامتر با تمام اطلاعات مربوط به دستور دریافت میکند.
VisualRegressionCompare.Spectre
این روش برای آپلود اسکرینشاتها به برنامه وب Spectre استفاده میشود. Spectre یک رابط کاربری برای تست رگرسیون تصویری است. اسکرینشاتها را ذخیره و مقایسه میکند که برای Integration مداوم بسیار مفید است.
میتوانید گزینههای زیر را به صورت یک شیء به سازنده آن ارسال کنید:
-
url
String
یک URL سرویس وب Spectre را ارسال کنید. -
project
String
یک نام برای پروژه خود ارسال کنید. -
suite
String
یک نام برای مجموعه تست خود ارسال کنید. یک پروژه میتواند شامل چندین مجموعه باشد. -
test
Function
تابعی را ارسال کنید که نام تست را برای اسکرینشات برمیگرداند. تابع یک شیء context را به عنوان اولین پارامتر با تمام اطلاعات مربوط به دستور دریافت میکند. -
browser
Function
تابعی را ارسال کنید که مرورگر را برای اسکرینشات برمیگرداند. تابع یک شیء context را به عنوان اولین پارامتر با تمام اطلاعات مربوط به دستور دریافت میکند. -
size
Function
تابعی را ارسال کنید که اندازه را برای اسکرینشات برمیگرداند. تابع یک شیء context را به عنوان اولین پارامتر با تمام اطلاعات مربوط به دستور دریافت میکند. -
fuzzLevel
Number
( پیشفرض: 30 )
عددی بین 0 و 100 که ضریب fuzz روش مقایسه تصویر Spectre را تعریف میکند. برای جزئیات بیشتر لطفاً به مستندات Spectre مراجعه کنید.
مثال
// wdio.conf.js
var path = require('path');
var VisualRegressionCompare = require('wdio-novus-visual-regression-service/compare');
exports.config = {
// ...
services: [
[
'novus-visual-regression',
{
compare: new VisualRegressionCompare.Spectre({
url: 'http://localhost:3000',
project: 'my project',
suite: 'my test suite',
test: function getTest(context) {
return context.test.title;
},
browser: function getBrowser(context) {
return context.browser.name;
},
size: function getSize(context) {
return context.meta.viewport != null ? context.meta.viewport.width : context.meta.orientation;
},
fuzzLevel: 30
}),
viewportChangePause: 300,
viewports: [{ width: 320, height: 480 }, { width: 480, height: 320 }, { width: 1024, height: 768 }],
orientations: ['landscape', 'portrait'],
}
]
],
// ...
};
استفاده
wdio-novus-visual-regression-service یک نمونه WebdriverIO را با دستورات زیر تقویت میکند:
browser.checkViewport([{options}]);
browser.checkDocument([{options}]);
browser.checkElement(elementSelector, [{options}]);
تمام اینها گزینههایی را ارائه میدهند که به شما کمک میکنند اسکرینشاتها را در ابعاد مختلف بگیرید یا بخشهای غیر مرتبط (مثلاً محتوا) را مستثنی کنید. گزینههای زیر در دسترس هستند:
-
exclude
String[]|Object[]
(هنوز پیادهسازی نشده)
بخشهایی از اسکرینشات خود را که به طور مکرر تغییر میکنند مستثنی کنید. میتوانید انواع مختلف استراتژیهای انتخابگر WebdriverIO را ارسال کنید که یک یا چند عنصر را پرس و جو میکند یا میتوانید مقادیر x و y را تعریف کنید که یک مستطیل یا چندضلعی را میکشند -
hide
Object[]
تمام عناصری که توسط انواع مختلف استراتژیهای انتخابگر WebdriverIO پرس و جو میشوند را پنهان میکند (با استفاده ازvisibility: hidden
) -
remove
Object[]
تمام عناصری که توسط انواع مختلف استراتژیهای انتخابگر WebdriverIO پرس و جو میشوند را حذف میکند (با استفاده ازdisplay: none
) -
viewports
Object[{ width: Number, height: Number }]
(فقط دسکتاپ)
مقدار جهانی viewports را برای این دستور نادیده میگیرد. تمام اسکرینشاتها در ابعاد viewport مختلف گرفته میشوند (مثلاً برای تستهای طراحی واکنشگرا) -
orientations
String[] {landscape, portrait}
(فقط موبایل)
مقدار جهانی orientations را برای این دستور نادیده میگیرد. تمام اسکرینشاتها در جهتهای صفحه نمایش مختلف گرفته میشوند (مثلاً برای تستهای طراحی واکنشگرا) -
misMatchTolerance
Number
مقدار جهانی misMatchTolerance را برای این دستور نادیده میگیرد. عددی بین 0 و 100 را ارسال کنید که درجه عدم تطابق برای در نظر گرفتن دو تصویر به عنوان یکسان را تعریف میکند. -
fuzzLevel
Number
مقدار جهانی fuzzLevel را برای این دستور نادیده میگیرد. عددی بین 0 و 100 را ارسال کنید که ضریب fuzz روش مقایسه تصویر Spectre را تعریف میکند. -
ignoreComparison
String
مقدار جهانی ignoreComparison را برای این دستور نادیده میگیرد. یک رشته با مقدارnothing
،colors
یاantialiasing
برای تنظیم روش مقایسه ارسال کنید. -
viewportChangePause
Number
مقدار جهانی viewportChangePause را برای این دستور نادیده میگیرد. بعد از تغییر viewport، x میلیثانیه صبر کنید.
مجوز
MIT