مراسل بوابة التقارير
wdio-reportportal-reporter هي حزمة من طرف ثالث، لمزيد من المعلومات يرجى زيارة GitHub | npm
وحدة إضافية لمراسل WebdriverIO لإرسال النتائج إلى Report Portal(http://reportportal.io/).
التثبيت
الطريقة الأسهل هي إبقاء wdio-reportportal-reporter
و wdio-reportportal-service
كتبعيات تطوير في ملف package.json
الخاص بك.
{
"devDependencies": {
"wdio-reportportal-reporter": "^7.0.0",
"wdio-reportportal-service": "^7.0.0"
}
}
يمكن العثور على تعليمات حول كيفية تثبيت WebdriverIO
هنا.
التكوين
قم بتكوين دليل الإخراج في ملف wdio.conf.js الخاص بك:
const reportportal = require('wdio-reportportal-reporter');
const RpService = require("wdio-reportportal-service");
const conf = {
reportPortalClientConfig: { // إعدادات بوابة التقارير
token: '00000000-0000-0000-0000-00000000000',
endpoint: 'https://reportportal-url/api/v1',
launch: 'launch_name',
project: 'project_name',
mode: 'DEFAULT',
debug: false,
description: "Launch description text",
attributes: [{key:"tag", value: "foo"}],
headers: {"foo": "bar"}, // رؤوس اختيارية لعميل http الداخلي
restClientConfig: { // تكوين عميل http مثل axios - https://github.com/axios/axios#request-config
proxy: {
protocol: 'https',
host: '127.0.0.1',
port: 9000,
auth: {
username: 'mikeymike',
password: 'rapunz3l'
}
},
timeout: 60000
}
},
reportSeleniumCommands: false, // إضافة أوامر سيلينيوم إلى السجل
seleniumCommandsLogLevel: 'debug', // مستوى السجل لأوامر سيلينيوم
autoAttachScreenshots: false, // إرفاق لقطات الشاشة تلقائيًا
screenshotsLogLevel: 'info', // مستوى السجل للقطات الشاشة
parseTagsFromTestTitle: false, // تحليل السلاسل مثل `@foo` من العناوين وإضافتها إلى Report Portal
cucumberNestedSteps: false, // تقرير خطوات cucumber كخطوات Report Portal
autoAttachCucumberFeatureToScenario: false, // يتطلب أن يكون cucumberNestedSteps صحيحًا للاستخدام
sanitizeErrorMessages: true, // إزالة أحرف ascii الملونة من تتبع الأخطاء
sauceLabOptions : {
enabled: true, // إضافة معرف SauseLab إلى علامات rp تلقائيًا.
sldc: "US" // إضافة منطقة SauseLab إلى علامات rp تلقائيًا.
}
};
exports.config = {
// ...
services: [[RpService, {}]],
reporters: [[reportportal, conf]],
// ...
};
واجهة برمجة التطبيقات الإضافية
يمكن الوصول إلى طرق واجهة برمجة التطبيقات باستخدام:
const reporter = require('wdio-reportportal-reporter')
وصف الطرق
reporter.addAttribute({key, value})
– إضافة سمة إلى الاختبار الحالي.key
(string, اختياري) - مفتاح السمة. يجب أن تكون سلسلة غير فارغة.value
(string, مطلوب) - قيمة السمة. يجب أن تكون سلسلة غير فارغة.
reporter.addAttributeToCurrentSuite({key, value})
- إضافة سمة إلى المجموعة الحالية.key
(string, اختياري) - مفتاح السمة. يجب أن تكون سلسلة غير فارغة.value
(string, مطلوب) - قيمة السمة. يجب أن تكون سلسلة غير فارغة.
reporter.addDescriptionToCurrentSuite(description)
- إضافة وصف إلى المجموعة الحالية.description
(string) - محتوى الوصف. يمكن تنسيق النص باستخدام markdown.
reporter.addDescriptionToAllSuites(description)
- إضافة وصف إلى جميع المجموعات القادمة. (استخدمه في before all hook، بحيث تحصل كل مجموعة على نفس الوصف)description
(string) - محتوى الوصف. يمكن تنسيق النص باستخدام markdown.
reporter.sendLog(level, message)
– إرسال سجل إلى المجموعة الحالية\عنصر الاختبار.level
(string) - مستوى السجل. القيم ['trace', 'debug', 'info', 'warn', 'error'].message
(string) – محتوى رسالة السجل.
reporter.sendFile(level, name, content, [type])
– إرسال ملف إلى المجموعة الحالية\عنصر الاختبار.level
(string) - مستوى السجل. القيم ['trace', 'debug', 'info', 'warn', 'error'].name
(string) – اسم الملف.content
(string) – محتوى المرفقtype
(string, اختياري) – نوع MIME للمرفق، الافتراضي هوimage/png
message
(string) – محتوى رسالة السجل.
reporter.sendLogToTest(test, level, message)
- إرسال سجل إلى اختبار محدد.test
(object) - كائن الاختبار من hook wdioafterTest\afterStep
level
(string) - مستوى السجل. القيم ['trace', 'debug', 'info', 'warn', 'error'].message
(string) – محتوى رسالة السجل.
reporter.sendFileToTest(test, level, name, content, [type])
– إرسال ملف إلى اختبار محدد.test
(object) - كائن الاختبار من hook wdioafterTest\afterStep
level
(string) - مستوى السجل. القيم ['trace', 'debug', 'info', 'warn', 'error'].name
(string) – اسم الملف.content
(string) – محتوى المرفقtype
(string, اختياري) – نوع MIME للمرفق، الافتراضي هوimage/png
message
(string) – محتوى رسالة السجل.
انتبه: sendLog
\sendFile
يرسل السجل إلى عنصر الاختبار النشط حاليًا. هذا يعني إذا قمت بإرسال سجل بدون اختبار نشط (مثل من الخطافات أو على مستوى المجموعة) فلن يتم عرضه في واجهة مستخدم Report Portal.
الطرق sendLogToTest
\sendFileToTest
مفيدة عندما تحتاج إلى إرسال لقطات شاشة أو سجلات إلى عنصر الاختبار الفاشل من hook wdio afterTest.
مثال Mocha:
const reportportal = require('wdio-reportportal-reporter');
const path = require('path');
const fs = require('fs');
exports.config = {
...
async afterTest(test) {
if (test.passed === false) {
const filename = "screnshot.png";
const outputFile = path.join(__dirname, filename);
await browser.saveScreenshot(outputFile);
reportportal.sendFileToTest(test, 'info', filename, fs.readFileSync(outputFile));
}
}
...
مثال Jasmine:
const reportportal = require('wdio-reportportal-reporter');
const path = require('path');
const fs = require('fs');
exports.config = {
...
async afterTest(test) {
if (test.passed === false) {
const filename = "screnshot.png";
const outputFile = path.join(__dirname, filename);
await browser.saveScreenshot(outputFile);
//!!
Object.assign(test, {title: test.description}}
reportportal.sendFileToTest(test, 'info', filename, fs.readFileSync(outputFile));
}
}
...
مثال WDIO Cucumber "5.14.3+" :
const reportportal = require('wdio-reportportal-reporter');
exports.config = {
...
afterStep: async function (uri, feature, { error, result, duration, passed }, stepData, context) {
if (!passed) {
let failureObject = {};
failureObject.type = 'afterStep';
failureObject.error = error;
failureObject.title = `${stepData.step.keyword}${stepData.step.text}`;
const screenShot = await global.browser.takeScreenshot();
let attachment = Buffer.from(screenShot, 'base64');
reportportal.sendFileToTest(failureObject, 'error', "screnshot.png", attachment);
}
}
...
}
الحصول على رابط إلى صفحة إطلاق واجهة مستخدم Report Portal
const RpService = require("wdio-reportportal-service");
...
onComplete: async function (_, config) {
const link = await RpService.getLaunchUrl(config);
console.log(`Report portal link ${link}`)
}
...
أو بطريقة أكثر تعقيدًا
const RpService = require("wdio-reportportal-service");
...
onComplete: async function (_, config) {
const protocol = 'http:';
const hostname = 'example.com';
const port = ':8080'; // أو سلسلة فارغة للمنافذ الافتراضية 80/443
const link = await RpService.getLaunchUrlByParams(protocol, hostname, port, config);
console.log(`Report portal link ${link}`)
}
...
الإبلاغ عن الاختبار إلى إطلاق موجود
إذا كنت ترغب في الإبلاغ عن اختبار لإطلاق نشط موجود، يمكنك تمريره إلى المراسل من خلال متغير البيئة REPORT_PORTAL_LAUNCH_ID
أنت مسؤول عن إنهاء الإطلاق وكذلك بدء هذا الإطلاق.
export REPORT_PORTAL_LAUNCH_ID=SomeLaunchId
npm run wdio
الترخيص
هذا المشروع مرخص بموجب ترخيص MIT - راجع ملف LICENSE.md للحصول على التفاصيل