إعادة تشغيل الاختبارات غير المستقرة
يمكنك إعادة تشغيل بعض الاختبارات باستخدام أداة اختبار WebdriverIO التي تكون غير مستقرة بسبب أشياء مثل شبكة غير مستقرة أو ظروف سباق. (ومع ذلك، لا يُنصح ببساطة زيادة معدل إعادة التشغيل إذا أصبحت الاختبارات غير مستقرة!)
إعادة تشغيل مجموعات الاختبارات في Mocha
منذ الإصدار 3 من Mocha، يمكنك إعادة تشغيل مجموعات الاختبار بأكملها (كل شيء داخل كتلة describe). إذا كنت تستخدم Mocha، يجب أن تفضل آلية إعادة المحاول ة هذه بدلاً من تنفيذ WebdriverIO الذي يسمح لك فقط بإعادة تشغيل كتل اختبار معينة (كل شيء ضمن كتلة it). من أجل استخدام طريقة this.retries()، يجب أن تستخدم كتلة المجموعة describe دالة غير مرتبطة function(){} بدلاً من دالة السهم () => {}، كما هو موضح في وثائق Mocha. باستخدام Mocha، يمكنك أيضًا تعيين عدد إعادة المحاولات لجميع المواصفات باستخدام mochaOpts.retries في ملف wdio.conf.js الخاص بك.
إليك مثال:
describe('retries', function () {
// Retry all tests in this suite up to 4 times
this.retries(4)
beforeEach(async () => {
await browser.url('http://www.yahoo.com')
})
it('should succeed on the 3rd try', async function () {
// Specify this test to only retry up to 2 times
this.retries(2)
console.log('run')
await expect($('.foo')).toBeDisplayed()
})
})
إعادة تشغيل الاختبارات الفردية في Jasmine أو Mocha
لإعادة تشغيل كتلة اختبار معينة، يمكنك ببساطة تطبيق عدد إعادة التشغيل كآخر معامل بعد دالة كتلة الاختبار:
- Mocha
- Jasmine
describe('my flaky app', () => {
/**
* spec that runs max 4 times (1 actual run + 3 reruns)
*/
it('should rerun a test at least 3 times', async function () {
console.log(this.wdioRetries) // returns number of retries
// ...
}, 3)
})
نفس الشيء يعمل مع الخطافات أيضًا:
describe('my flaky app', () => {
/**
* hook that runs max 2 times (1 actual run + 1 rerun)
*/
beforeEach(async () => {
// ...
}, 1)
// ...
})
describe('my flaky app', () => {
/**
* spec that runs max 4 times (1 actual run + 3 reruns)
*/
it('should rerun a test at least 3 times', async function () {
console.log(this.wdioRetries) // returns number of retries
// ...
}, jasmine.DEFAULT_TIMEOUT_INTERVAL, 3)
})
نفس الشيء يعمل مع الخطافات أيضًا:
describe('my flaky app', () => {
/**
* hook that runs max 2 times (1 actual run + 1 rerun)
*/
beforeEach(async () => {
// ...
}, jasmine.DEFAULT_TIMEOUT_INTERVAL, 1)
// ...
})
إذا كنت تستخدم Jasmine، فإن المعامل الثاني محجوز للمهلة. لتطبيق معامل إعادة المحاولة، تحتاج إلى تعيين المهلة إلى قيمتها الافتراضية jasmine.DEFAULT_TIMEOUT_INTERVAL ثم تطبيق عدد إعادة المحاولات.
تسمح آلية إعادة المحاولة هذه فقط بإعادة تشغيل الخطافات الفردية أو كتل الاختبار. إذا كان اختبارك مصحوبًا بخطاف لإعداد تطبيقك، فلن يتم تشغيل هذا الخطاف. يقدم Mocha إعادة محاولات الاختبار الأصلية التي توفر هذا السلوك بينما لا يقدمها Jasmine. يمكنك الوصول إلى عدد إعادة المحاولات المنفذة في خطاف afterTest.