असफल हुए टेस्ट को दोबारा चलाना
आप WebdriverIO टेस्टरनर के साथ कुछ विशेष टेस्ट को दोबारा चला सकते हैं जो अस्थिर नेटवर्क या रेस कंडीशन्स जैसे कारणों से अस्थिर हो जाते हैं। (हालांकि, अगर टेस्ट अस्थिर हो जाते हैं तो केवल दोबारा चलाने की दर बढ़ाना अनुशंसित नहीं है!)
Mocha में सुइट्स को दोबारा चलाना
Mocha के वर्जन 3 से, आप पूरे टेस्ट सुइट्स को दोबारा चला सकते हैं (एक describe ब्लॉक के अं दर का सब कुछ)। अगर आप Mocha का उपयोग करते हैं तो आपको WebdriverIO के कार्यान्वयन के बजाय इस रीट्राई मैकेनिज्म का उपयोग करना चाहिए जो आपको केवल कुछ टेस्ट ब्लॉक्स को दोबारा चलाने की अनुमति देता है (एक it ब्लॉक के अंदर का सब कुछ)। this.retries() मेथड का उपयोग करने के लिए, सुइट ब्लॉक describe में अनबाउंड फंक्शन function(){} का उपयोग करना चाहिए, न कि फैट एरो फंक्शन () => {} का, जैसा कि Mocha docs में वर्णित है। Mocha का उपयोग करके आप अपने wdio.conf.js में mochaOpts.retries का उपयोग करके सभी स्पेक्स के लिए रीट्राई काउंट भी सेट कर सकते हैं।
यहां एक उदाहरण है:
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 हुक में निष्पादित रीट्राई की संख्या तक पहुँच सकते हैं।