कस्टम रिपोर्टर
आप WDIO टेस्ट रनर के लिए अपना खुद का कस्टम रिपोर्टर लिख सकते हैं जो आपकी जरूरतों के अनुरूप हो। और यह आसान है!
आपको बस एक नोड मॉड्यूल बनाना होगा जो @wdio/reporter पैकेज से विरासत में मिला हो, ताकि यह टेस्ट से संदेश प्राप्त कर सके।
बेसिक सेटअप कुछ इस तरह का होना चाहिए:
import WDIOReporter from '@wdio/reporter'
export default class CustomReporter extends WDIOReporter {
constructor(options) {
/*
* make reporter to write to the output stream by default
*/
options = Object.assign(options, { stdout: true })
super(options)
}
onTestPass(test) {
this.write(`Congratulations! Your test "${test.title}" passed 👏`)
}
}
इस रिपोर्टर का उपयोग करने के लिए, आपको केवल इसे अपने कॉन्फिगरेशन में reporter प्रॉपर्टी को असाइन करने की आवश्यक ता है।
आपकी wdio.conf.js फ़ाइल इस तरह दिखनी चाहिए:
import CustomReporter from './reporter/my.custom.reporter'
export const config = {
// ...
reporters: [
/**
* use imported reporter class
*/
[CustomReporter, {
someOption: 'foobar'
}],
/**
* use absolute path to reporter
*/
['/path/to/reporter.js', {
someOption: 'foobar'
}]
],
// ...
}
आप रिपोर ्टर को NPM पर भी प्रकाशित कर सकते हैं ताकि हर कोई इसका उपयोग कर सके। पैकेज का नाम अन्य रिपोर्टर की तरह wdio-<reportername>-reporter रखें, और इसे wdio या wdio-reporter जैसे कीवर्ड के साथ टैग करें।
इवेंट हैंडलर
आप कई इवेंट्स के लिए इवेंट हैंडलर रजिस्टर कर सकते हैं जो टेस्टिंग के दौरान ट्रिगर होते हैं। निम्नलिखित सभी हैंडलर वर्तमान स्थिति और प्रगति के बारे में उपयोगी जानकारी के साथ पेलोड प्राप्त करेंगे।
इन पेलोड ऑब्जेक्ट्स की संरचना इवेंट पर निर्भर करती है, और फ्रेमवर्क (Mocha, Jasmine, और Cucumber) में एकरूप होती है। एक बार जब आप एक कस्टम रिपोर्टर लागू करते हैं, तो यह सभी फ्रेमवर्क के लिए काम करना चाहिए।
निम्नलिखित सूची में सभी संभावित विधियाँ शामिल हैं जिन्हें आप अपनी रिपोर्टर क्लास में जोड़ सकते हैं:
import WDIOReporter from '@wdio/reporter'
export default class CustomReporter extends WDIOReporter {
onRunnerStart() {}
onBeforeCommand() {}
onAfterCommand() {}
onSuiteStart() {}
onHookStart() {}
onHookEnd() {}
onTestStart() {}
onTestPass() {}
onTestFail() {}
onTestSkip() {}
onTestEnd() {}
onSuiteEnd() {}
onRunnerEnd() {}
}
मेथड के नाम काफी स्पष्ट हैं।
किसी निश्चित इवेंट पर कुछ प्रिंट करने के लिए, this.write(...) मेथड का उपयोग करें, जो पैरेंट WDIOReporter क्लास द्वारा प्रदान किया गया है। यह या तो सामग्री को stdout पर स्ट्रीम करता है, या लॉग फाइल में (रिपोर्टर के विकल्पों के आधार पर)।
import WDIOReporter from '@wdio/reporter'
export default class CustomReporter extends WDIOReporter {
onTestPass(test) {
this.write(`Congratulations! Your test "${test.title}" passed 👏`)
}
}
ध्यान दें कि आप किसी भी तरह से टेस्ट एक्जिक्यूशन को स्थगित नहीं कर सकते।
सभी इवेंट हैंडलर को सिंक्रोनस रूटीन को निष्पादित करना चाहिए (या आप रेस कंडीशन में पड़ जाएंगे)।
उदाहरण अनुभाग को जरूर देखें जहां आप एक उदाहरण कस्टम रिपोर्टर पा सकते हैं जो प्रत्येक इवेंट के लिए इवेंट नाम प्रिंट करता है।
यदि आपने एक कस्टम रिपोर्टर लागू किया है जो समुदाय के लिए उपयोगी हो सकता है, तो पुल रिक्वेस्ट बनाने में संकोच न करें ताकि हम रिपोर्टर को जनता के लिए उपलब्ध करा सकें!
इसके अलावा, यदि आप WDIO टेस्टरनर को Launcher इंटरफ़ेस के माध्यम से चलाते हैं, तो आप निम्नानुसार फ़ंक्शन के रूप म ें एक कस्टम रिपोर्टर लागू नहीं कर सकते:
import Launcher from '@wdio/cli'
import CustomReporter from './reporter/my.custom.reporter'
const launcher = new Launcher('/path/to/config.file.js', {
// this will NOT work, because CustomReporter is not serializable
reporters: ['dot', CustomReporter]
})