CucumberJS JSON 报告器
一个 WDIO 报告器,为 WebdriverIO v8 及更高版本创建 CucumberJS JSON 文件。
它能做什么
此报告器将为正在测试的每个功能生成一个**Cucumber JSON 文件**。JSON 文件可用于您想要使用的任何报告,例如multiple-cucumber-html-reporter。
它还将有关运行实例的元数据添加到功能文件中,最后但并非最不重要的一点是,它将为您提供将附件添加到 JSON 输出的机会。
安装
最简单的方法是在您的package.json
中将wdio-cucumberjs-json-reporter
作为开发依赖项。
{
"devDependencies": {
"wdio-cucumberjs-json-reporter": "^5.0.0"
}
}
您可以简单地通过以下方式进行操作
npm install wdio-cucumberjs-json-reporter --save-dev
因此它将自动添加到您的package.json
中。
有关如何安装WebdriverIO
的说明,请参见此处。
配置
在您的 wdio.conf.js 文件中配置输出目录和语言
export const config = {
// ...
reporters: [
// Like this with the default options, see the options below
'cucumberjs-json',
// OR like this if you want to set the folder and the language
[ 'cucumberjs-json', {
jsonFolder: '.tmp/new/',
language: 'en',
},
],
],
// ...
}
不要同时使用这两种添加报告器的方法,这只是一个示例!
选项
jsonFolder
- 类型:
字符串
- 是否必填:否
- 默认值:
.tmp/json/
此报告生成的 JSON 文件将存储到的目录,相对于脚本启动的位置。
注意:如果您从命令行使用 npm 脚本,例如npm run test
,则jsonFolder
将相对于执行脚本的路径。从项目根目录执行它也会在项目根目录中创建jsonFolder
。
language
- 类型:
字符串
- 是否必填:否
- 默认值:
en
编写 Gherkin 场景的语言(默认为英语)。语言代码及其关键字的列表,请参见此处。
disableHooks
- 类型:
布尔值
- 是否必填:否
- 默认值:
false
如果此属性设置为true
,则挂钩详细信息将不会成为生成的一部分。
reportFilePerRetry
- 类型:
布尔值
- 是否必填:否
- 默认值:
true
如果此属性设置为false
,则在重新尝试规范时,报告将附加到先前尝试的现有报告文件中。
示例:['cucumberjs-json', { jsonFolder: '.tmp/new/', language: 'en', disableHooks:true}]
元数据
注意
如果您使用的是 WebdriverIO V6,则目前不支持此功能,WebdriverIO V5 仍然支持此功能,WebdriverIO V7 再次支持此功能。
如上所述,此报告可以自动存储功能执行所在当前机器/设备的元数据。
要自定义此功能,您可以通过将以下对象添加到您的capabilities
中来实现。
// Example wdio.conf.js
export const config = {
//..
capabilities: [
{
browserName: 'chrome',
// Add this
'cjson:metadata': {
// For a browser
browser: {
name: 'chrome',
version: '58',
},
// for an app
app: {
name: 'name.of.app.ipa',
version: '1.2.3',
},
device: 'MacBook Pro 15',
platform: {
name: 'OSX',
version: '10.12.6'
}
},
},
],
};
元数据对象需要具有
cjson
前缀,否则将无法正常工作!
元数据值
metadata.app.name
- 类型:
字符串
例如:应用程序的名称。
metadata.app.version
- 类型:
字符串
例如:应用程序的版本。
metadata.browser.name
- 类型:
字符串
- 可能的值:
internet explorer | edge | chrome | firefox | safari
metadata.browser.version
- 类型:
字符串
例如:浏览器的版本,可以在测试执行期间手动添加或检索以获取精确的版本号。
metadata.device
- 类型:
字符串
例如:表示设备类型的名称。例如,如果您在虚拟机上运行它,则可以将其放置在此处虚拟机
,或移动设备的名称,例如iPhone 7 Plus
。
metadata.platform.name
- 类型:
字符串
- 可能的值:
windows | osx | linux | ubuntu | android | ios
metadata.platform.version
- 类型:
字符串
例如:平台的版本
如果您未在元数据中提供
browser
对象,则此模块将自动为您确定它。**它将始终使用它可以确定的最新值覆盖它。**
如果您未提供
device
和/或platform
对象,则它将默认为您为未知
。
如果您未提供
browser.name
或browser.version
,则模块将尝试自动确定它。
附件
您可以选择将数据附加到所有这些挂钩/步骤中的 JSON 文件中
- Before(All)
- After(All)
- Given
- When
- Then
- And
您只需要在您的步骤文件中提供以下代码。
对于 ES 模块 (ESM)
import cucumberJson from 'wdio-cucumberjs-json-reporter';
// Attach a string (if no type is provided it will automatically default to `text/plain`
cucumberJson.attach('just a string');
cucumberJson.attach('just a second string', 'text/plain');
// Attach JSON
cucumberJson.attach({"json-string": true}, 'application/json');
// Attach a screenshot in a before hook
cucumberJson.attach(await browser.takeScreenshot(), 'image/png');
对于 CommonJS (CJS)
const { attach } = require("wdio-cucumberjs-json-reporter");
// Attach a string (if no type is provided it will automatically default to `text/plain`
attach('just a string');
attach('just a second string', 'text/plain');
// Attach JSON
attach({"json-string": true}, 'application/json');
// Attach a screenshot in a before hook
attach(await browser.takeScreenshot(), 'image/png');
与 multiple-cucumber-html-reporter 一起使用
WebdriverIO V4 的先前模块wdio-multiple-cucumber-html-reporter与multiple-cucumber-html-reporter模块有内置连接。**此报告器并非如此**,因为 WebdriverIO V5 的新设置基于实例,不允许我使用onPrepare
和onComplete
挂钩。
如果您仍然想使用multiple-cucumber-html-reporter模块,您可以将以下内容添加到您的配置文件中。
-
使用以下命令安装模块
npm install multiple-cucumber-html-reporter --save-dev
-
将此添加到您的配置文件中
import fs from 'node:fs/promises'
// Import the module
import { generate } from 'multiple-cucumber-html-reporter'
// Example wdio.conf.js
export const config = {
//..
// =====
// Hooks
// =====
/**
* Gets executed once before all workers get launched.
*/
onPrepare: () => {
// Remove the `.tmp/` folder that holds the json and report files
return fs.rm('.tmp/', { recursive: true });
},
/**
* Gets executed after all workers got shut down and the process is about to exit.
*/
onComplete: () => {
// Generate the report when it all tests are done
generate({
// Required
// This part needs to be the same path where you store the JSON files
// default = '.tmp/json/'
jsonDir: '.tmp/json/',
reportPath: '.tmp/report/',
// for more options see https://github.com/wswebcreation/multiple-cucumber-html-reporter#options
});
}
}
旧版 WebdriverIO
此模块只能与 WebdriverIO V8+ 一起使用!
对于 V6,请查看此处的文档并使用版本 2.0.4
对于 V5,请查看此处的文档并使用版本 1.3.0
此模块不是wdio-multiple-cucumber-html-reporter的替代品。该模块仅支持 WEBDRIVERIO V4 并创建报告。此模块仅创建 JSON,不创建报告!