Report Portal 报告器
一个 WebdriverIO 报告器插件,用于将结果报告到 Report Portal(http://reportportal.io/)。
安装
最简单的方法是在您的 package.json
中将 wdio-reportportal-reporter
和 wdio-reportportal-service
作为开发依赖项。
{
"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: { // report portal settings
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"}, // optional headers for internal http client
restClientConfig: { // axios like http client config - 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, // add selenium commands to log
seleniumCommandsLogLevel: 'debug', // log level for selenium commands
autoAttachScreenshots: false, // automatically add screenshots
screenshotsLogLevel: 'info', // log level for screenshots
parseTagsFromTestTitle: false, // parse strings like `@foo` from titles and add to Report Portal
cucumberNestedSteps: false, // report cucumber steps as Report Portal steps
autoAttachCucumberFeatureToScenario: false, // requires cucumberNestedSteps to be true for use
sanitizeErrorMessages: true, // strip color ascii characters from error stacktrace
sauceLabOptions : {
enabled: true, // automatically add SauseLab ID to rp tags.
sldc: "US" // automatically add SauseLab region to rp tags.
}
};
exports.config = {
// ...
services: [[RpService, {}]],
reporters: [[reportportal, conf]],
// ...
};
其他 API
可以使用以下方法访问 Api 方法
const reporter = require('wdio-reportportal-reporter')
方法描述
reporter.addAttribute({key, value})
– 向当前测试添加属性。key
(字符串,可选) - 属性键。它必须是非空字符串。value
(字符串,必需) – 属性值。它必须是非空字符串。
reporter.addAttributeToCurrentSuite({key, value})
- 向当前套件添加属性。key
(字符串,可选) - 属性键。它必须是非空字符串。value
(字符串,必需) – 属性值。它必须是非空字符串。
reporter.addDescriptionToCurrentSuite(description)
- 向当前套件添加一些字符串。description
(字符串) - 描述内容。文本可以使用 Markdown 格式化。
reporter.addDescriptionToAllSuites(description)
- 向所有即将到来的套件添加一些字符串。(在 before all 钩子中使用它,以便每个套件获得相同的描述)description
(字符串) - 描述内容。文本可以使用 Markdown 格式化。
reporter.sendLog(level, message)
– 将日志发送到当前套件/测试项。level
(字符串) - 日志级别。值 ['trace', 'debug', 'info', 'warn', 'error']。message
(字符串) – 日志消息内容。
reporter.sendFile(level, name, content, [type])
– 将文件发送到当前套件/测试项。level
(字符串) - 日志级别。值 ['trace', 'debug', 'info', 'warn', 'error']。name
(字符串) – 文件名。content
(字符串) – 附件内容type
(字符串,可选) – 附件 MIME 类型,默认为image/png
message
(字符串) – 日志消息内容。
reporter.sendLogToTest(test, level, message)
- 将日志发送到特定测试。test
(对象) - 来自afterTest\afterStep
wdio 钩子的测试对象level
(字符串) - 日志级别。值 ['trace', 'debug', 'info', 'warn', 'error']。message
(字符串) – 日志消息内容。
reporter.sendFileToTest(test, level, name, content, [type])
– 将文件发送到特定测试。test
(对象) - 来自afterTest\afterStep
wdio 钩子的测试对象level
(字符串) - 日志级别。值 ['trace', 'debug', 'info', 'warn', 'error']。name
(字符串) – 文件名。content
(字符串) – 附件内容type
(字符串,可选) – 附件 MIME 类型,默认为image/png
message
(字符串) – 日志消息内容。
请注意:sendLog
\sendFile
将日志发送到**当前正在运行的测试项**。这意味着如果您在没有活动测试的情况下发送日志(例如来自钩子或套件级别),它将不会被报告到 Report Portal UI。
当您需要从 wdio afterTest 钩子将屏幕截图或日志发送到失败的测试项时,方法 sendLogToTest
\sendFileToTest
非常有用。
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 UI 启动页面的链接
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'; // or empty string for default 80/443 ports
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 文件