تخطى إلى المحتوى الرئيسي

تنظيم مجموعة الاختبارات

مع نمو المشاريع، لا مفر من إضافة المزيد والمزيد من اختبارات التكامل. هذا يزيد من وقت البناء ويبطئ الإنتاجية.

لمنع هذا، يجب عليك تشغيل اختباراتك بالتوازي. يختبر WebdriverIO بالفعل كل ملف مواصفات (أو ملف ميزة في Cucumber) بالتوازي داخل جلسة واحدة. بشكل عام، حاول اختبار ميزة واحدة فقط لكل ملف مواصفات. حاول ألا يكون لديك الكثير أو القليل جدًا من الاختبارات في ملف واحد. (ومع ذلك، لا توجد قاعدة ذهبية هنا.)

بمجرد أن تحتوي اختباراتك على العديد من ملفات المواصفات، يجب أن تبدأ بتشغيل اختباراتك بشكل متزامن. للقيام بذلك، قم بتعديل خاصية maxInstances في ملف التكوين الخاص بك. يسمح لك WebdriverIO بتشغيل اختباراتك بأقصى قدر من التزامن - مما يعني أنه بغض النظر عن عدد الملفات والاختبارات التي لديك، يمكن تشغيلها جميعًا بالتوازي. (هذا لا يزال يخضع لحدود معينة، مثل وحدة المعالجة المركزية لجهاز الكمبيوتر الخاص بك وقيود التزامن وما إلى ذلك.)

لنفترض أن لديك 3 قدرات مختلفة (Chrome و Firefox و Safari) وقمت بتعيين maxInstances إلى 1. سيقوم مشغّل اختبار WDIO بإنشاء 3 عمليات. لذلك، إذا كان لديك 10 ملفات مواصفات وقمت بتعيين maxInstances إلى 10، فسيتم اختبار جميع ملفات المواصفات في وقت واحد، وسيتم إنشاء 30 عملية.

يمكنك تحديد خاصية maxInstances عالميًا لتعيين السمة لجميع المتصفحات.

إذا كنت تدير شبكة WebDriver الخاصة بك، فقد يكون لديك (على سبيل المثال) قدرة أكبر لمتصفح واحد أكثر من الآخر. في تلك الحالة، يمكنك تحديد maxInstances في كائن القدرات الخاص بك:

// wdio.conf.js
export const config = {
// ...
// set maxInstance for all browser
maxInstances: 10,
// ...
capabilities: [{
browserName: 'firefox'
}, {
// maxInstances can get overwritten per capability. So if you have an in-house WebDriver
// grid with only 5 firefox instance available you can make sure that not more than
// 5 instance gets started at a time.
browserName: 'chrome'
}],
// ...
}

الوراثة من ملف التكوين الرئيسي

إذا كنت تقوم بتشغيل مجموعة الاختبارات الخاصة بك في بيئات متعددة (مثل التطوير والتكامل)، فقد يساعد استخدام ملفات تكوين متعددة للحفاظ على الأمور قابلة للإدارة.

على غرار مفهوم كائن الصفحة، أول شيء ستحتاجه هو ملف تكوين رئيسي. يحتوي على كل التكوينات التي تشاركها عبر البيئات.

ثم قم بإنشاء ملف تكوين آخر لكل بيئة، وقم بتكملة التكوين الرئيسي بالتكوينات الخاصة بالبيئة:

// wdio.dev.config.js
import { deepmerge } from 'deepmerge-ts'
import wdioConf from './wdio.conf.js'

// have main config file as default but overwrite environment specific information
export const config = deepmerge(wdioConf.config, {
capabilities: [
// more caps defined here
// ...
],

// run tests on sauce instead locally
user: process.env.SAUCE_USERNAME,
key: process.env.SAUCE_ACCESS_KEY,
services: ['sauce']
}, { clone: false })

// add an additional reporter
config.reporters.push('allure')

تجميع مواصفات الاختبار في مجموعات

يمكنك تجميع مواصفات الاختبار في مجموعات وتشغيل مجموعات محددة بدلاً من تشغيلها جميعًا.

أولاً، حدد مجموعاتك في تكوين WDIO الخاص بك:

// wdio.conf.js
export const config = {
// define all tests
specs: ['./test/specs/**/*.spec.js'],
// ...
// define specific suites
suites: {
login: [
'./test/specs/login.success.spec.js',
'./test/specs/login.failure.spec.js'
],
otherFeature: [
// ...
]
},
// ...
}

الآن، إذا كنت تريد تشغيل مجموعة واحدة فقط، يمكنك تمرير اسم المجموعة كوسيط CLI:

wdio wdio.conf.js --suite login

أو، قم بتشغيل مجموعات متعددة في وقت واحد:

wdio wdio.conf.js --suite login --suite otherFeature

تجميع مواصفات الاختبار لتشغيلها بالتسلسل

كما هو موضح أعلاه، هناك فوائد في تشغيل الاختبارات بالتزامن. ومع ذلك، هناك حالات يكون فيها من المفيد تجميع الاختبارات معًا لتشغيلها بالتسلسل في حالة واحدة. أمثلة على ذلك هي بشكل رئيسي حيث توجد تكلفة إعداد كبيرة مثل ترجمة الكود أو توفير مثيلات سحابية، ولكن هناك أيضًا نماذج استخدام متقدمة تستفيد من هذه القدرة.

لتجميع الاختبارات للتشغيل في حالة واحدة، قم بتعريفها كمصفوفة ضمن تعريف المواصفات.

    "specs": [
[
"./test/specs/test_login.js",
"./test/specs/test_product_order.js",
"./test/specs/test_checkout.js"
],
"./test/specs/test_b*.js",
],

في المثال أعلاه، سيتم تشغيل الاختبارات 'test_login.js' و 'test_product_order.js' و 'test_checkout.js' بالتسلسل في حالة واحدة وسيتم تشغيل كل من اختبارات "test_b*" بالتزامن في حالات فردية.

من الممكن أيضًا تجميع المواصفات المحددة في المجموعات، لذلك يمكنك الآن أيضًا تحديد المجموعات على النحو التالي:

    "suites": {
end2end: [
[
"./test/specs/test_login.js",
"./test/specs/test_product_order.js",
"./test/specs/test_checkout.js"
]
],
allb: ["./test/specs/test_b*.js"]
},

وفي هذه الحالة، سيتم تشغيل جميع اختبارات مجموعة "end2end" في حالة واحدة.

عند تشغيل الاختبارات بالتسلسل باستخدام نمط، سيتم تشغيل ملفات المواصفات بترتيب أبجدي

  "suites": {
end2end: ["./test/specs/test_*.js"]
},

سيؤدي هذا إلى تشغيل الملفات المطابقة للنمط أعلاه بالترتيب التالي:

  [
"./test/specs/test_checkout.js",
"./test/specs/test_login.js",
"./test/specs/test_product_order.js"
]

تشغيل اختبارات محددة

في بعض الحالات، قد ترغب في تنفيذ اختبار واحد فقط (أو مجموعة فرعية من الاختبارات) من مجموعاتك.

مع معلمة --spec، يمكنك تحديد أي مجموعة (Mocha، Jasmine) أو ميزة (Cucumber) يجب تشغيلها. يتم حل المسار نسبيًا من دليل العمل الحالي الخاص بك.

على سبيل المثال، لتشغيل اختبار تسجيل الدخول فقط:

wdio wdio.conf.js --spec ./test/specs/e2e/login.js

أو تشغيل مواصفات متعددة في وقت واحد:

wdio wdio.conf.js --spec ./test/specs/signup.js --spec ./test/specs/forgot-password.js

إذا كانت قيمة --spec لا تشير إلى ملف مواصفات معين، فسيتم استخدامها بدلاً من ذلك لتصفية أسماء ملفات المواصفات المحددة في التكوين الخاص بك.

لتشغيل جميع المواصفات التي تحتوي على كلمة "dialog" في أسماء ملفات المواصفات، يمكنك استخدام:

wdio wdio.conf.js --spec dialog

لاحظ أن كل ملف اختبار يعمل في عملية مشغل اختبار واحدة. بما أننا لا نفحص الملفات مسبقًا (راجع القسم التالي للحصول على معلومات حول تمرير أسماء الملفات إلى wdioلا يمكنك استخدام (على سبيل المثال) describe.only في أعلى ملف المواصفات الخاص بك لتوجيه Mocha لتشغيل تلك المجموعة فقط.

ستساعدك هذه الميزة على تحقيق نفس الهدف.

عند توفير خيار --spec، فإنه سيلغي أي أنماط محددة بواسطة معلمة specs على مستوى التكوين أو القدرات.

استبعاد اختبارات محددة

عند الحاجة، إذا كنت بحاجة إلى استبعاد ملف (ملفات) مواصفات معين من التشغيل، يمكنك استخدام معلمة --exclude (Mocha، Jasmine) أو الميزة (Cucumber).

على سبيل المثال، لاستبعاد اختبار تسجيل الدخول من تشغيل الاختبار:

wdio wdio.conf.js --exclude ./test/specs/e2e/login.js

أو استبعاد ملفات مواصفات متعددة:

wdio wdio.conf.js --exclude ./test/specs/signup.js --exclude ./test/specs/forgot-password.js

أو استبعاد ملف مواصفات عند التصفية باستخدام مجموعة:

wdio wdio.conf.js --suite login --exclude ./test/specs/e2e/login.js

إذا كانت قيمة --exclude لا تشير إلى ملف مواصفات معين، فسيتم استخدامها بدلاً من ذلك لتصفية أسماء ملفات المواصفات المحددة في التكوين الخاص بك.

لاستبعاد جميع المواصفات التي تحتوي على كلمة "dialog" في أسماء ملفات المواصفات، يمكنك استخدام:

wdio wdio.conf.js --exclude dialog

عند توفير خيار --exclude، فإنه سيلغي أي أنماط محددة بواسطة معلمة exclude على مستوى التكوين أو القدرات.

تشغيل المجموعات ومواصفات الاختبار

قم بتشغيل مجموعة كاملة مع مواصفات فردية.

wdio wdio.conf.js --suite login --spec ./test/specs/signup.js

تشغيل مواصفات اختبار متعددة محددة

من الضروري أحيانًا - في سياق التكامل المستمر وغير ذلك - تحديد مجموعات متعددة من المواصفات للتشغيل. تقبل أداة سطر الأوامر wdio الخاصة بـ WebdriverIO أسماء ملفات مدخلة عبر الأنابيب (من find أو grep أو غيرها).

تلغي أسماء الملفات المدخلة عبر الأنابيب قائمة الأنماط العامة أو أسماء الملفات المحددة في قائمة spec للتكوين.

grep -r -l --include "*.js" "myText" | wdio wdio.conf.js

ملاحظة: هذا لن يلغي علامة --spec لتشغيل مواصفات واحدة.

تشغيل اختبارات محددة باستخدام MochaOpts

يمكنك أيضًا تصفية أي suite|describe و/أو it|test محدد تريد تشغيله عن طريق تمرير وسيطة خاصة بـ mocha: --mochaOpts.grep إلى واجهة سطر أوامر wdio.

wdio wdio.conf.js --mochaOpts.grep myText
wdio wdio.conf.js --mochaOpts.grep "Text with spaces"

ملاحظة: سيقوم Mocha بتصفية الاختبارات بعد إنشاء مشغّل اختبار WDIO للمثيلات، لذلك قد ترى إنشاء العديد من المثيلات ولكن لا يتم تنفيذها بالفعل.

استبعاد اختبارات محددة باستخدام MochaOpts

يمكنك أيضًا تصفية أي suite|describe و/أو it|test محدد تريد استبعاده عن طريق تمرير وسيطة خاصة بـ mocha: --mochaOpts.invert إلى واجهة سطر أوامر wdio. --mochaOpts.invert تؤدي عكس --mochaOpts.grep

wdio wdio.conf.js --mochaOpts.grep "string|regex" --mochaOpts.invert
wdio wdio.conf.js --spec ./test/specs/e2e/login.js --mochaOpts.grep "string|regex" --mochaOpts.invert

ملاحظة: سيقوم Mocha بتصفية الاختبارات بعد إنشاء مشغّل اختبار WDIO للمثيلات، لذلك قد ترى إنشاء العديد من المثيلات ولكن لا يتم تنفيذها بالفعل.

إيقاف الاختبار بعد الفشل

مع خيار bail، يمكنك إخبار WebdriverIO بالتوقف عن الاختبار بعد فشل أي اختبار.

هذا مفيد مع مجموعات الاختبار الكبيرة عندما تعرف بالفعل أن البناء الخاص بك سينكسر، ولكنك تريد تجنب الانتظار الطويل لتشغيل اختبار كامل.

يتوقع خيار bail رقمًا، يحدد عدد حالات فشل الاختبار التي يمكن أن تحدث قبل أن يوقف WebDriver عملية الاختبار بأكملها. القيمة الافتراضية هي 0، مما يعني أنه يقوم دائمًا بتشغيل جميع مواصفات الاختبار التي يمكنه العثور عليها.

يرجى الاطلاع على صفحة الخيارات للحصول على معلومات إضافية حول تكوين bail.

تسلسل هرمي لخيارات التشغيل

عند تحديد المواصفات التي يجب تشغيلها، هناك تسلسل هرمي معين يحدد النمط الذي سيكون له الأولوية. حاليًا، هكذا يعمل، من الأولوية الأعلى إلى الأدنى:

وسيطة CLI --spec > نمط specs في القدرات > نمط specs في التكوين وسيطة CLI --exclude > نمط exclude في التكوين > نمط exclude في القدرات

إذا تم تقديم معلمة التكوين فقط، فسيتم استخدامها لجميع القدرات. ومع ذلك، إذا كنت تحدد النمط على مستوى القدرات، فسيتم استخدامه بدلاً من نمط التكوين. وأخيرًا، فإن أي نمط مواصفات محدد في سطر الأوامر سيلغي جميع الأنماط الأخرى المعطاة.

استخدام أنماط المواصفات المحددة في القدرات

عندما تحدد نمط مواصفات على مستوى القدرات، فإنه سيلغي أي أنماط محددة على مستوى التكوين. هذا مفيد عندما تحتاج إلى فصل الاختبارات بناءً على قدرات الأجهزة المختلفة. في حالات كهذه، من المفيد أكثر استخدام نمط مواصفات عام على مستوى التكوين، وأنماط أكثر تحديدًا على مستوى القدرات.

على سبيل المثال، لنفترض أن لديك دليلين، واحد لاختبارات Android، وآخر لاختبارات iOS.

قد يحدد ملف التكوين الخاص بك النمط على النحو التالي، لاختبارات الأجهزة غير المحددة:

{
specs: ['tests/general/**/*.js']
}

ولكن بعد ذلك، سيكون لديك قدرات مختلفة لأجهزة Android و iOS الخاصة بك، حيث يمكن أن تبدو الأنماط كما يلي:

{
"platformName": "Android",
"specs": [
"tests/android/**/*.js"
]
}
{
"platformName": "iOS",
"specs": [
"tests/ios/**/*.js"
]
}

إذا كنت تتطلب كلتا هاتين القدرتين في ملف التكوين الخاص بك، فإن جهاز Android سيقوم فقط بتشغيل الاختبارات ضمن مساحة الاسم "android"، وستقوم اختبارات iOS بتشغيل الاختبارات فقط ضمن مساحة الاسم "ios"!

//wdio.conf.js
export const config = {
"specs": [
"tests/general/**/*.js"
],
"capabilities": [
{
platformName: "Android",
specs: ["tests/android/**/*.js"],
//...
},
{
platformName: "iOS",
specs: ["tests/ios/**/*.js"],
//...
},
{
platformName: "Chrome",
//config level specs will be used
}
]
}

Welcome! How can I help?

WebdriverIO AI Copilot