Allure レポーター
Allure テストレポートを作成するための WebdriverIO レポータープラグインです。
インストール
最も簡単な方法は、`@wdio/allure-reporter` を `package.json` の devDependency として含めることです。
{
"devDependencies": {
"@wdio/allure-reporter": "^7.0.0"
}
}
以下のコマンドで簡単に実行できます。
npm install @wdio/allure-reporter --save-dev
設定
wdio.conf.js ファイルで出力ディレクトリを設定します。
export const config = {
// ...
reporters: [['allure', {
outputDir: 'allure-results',
disableWebdriverStepsReporting: true,
disableWebdriverScreenshotsReporting: true,
}]],
// ...
}
- `outputDir` のデフォルトは `./allure-results` です。テスト実行が完了すると、このディレクトリには、各スペックの `.xml` ファイルに加えて、多数の `.txt` ファイル、`.png` ファイル、その他の添付ファイルが生成されます。
- `disableWebdriverStepsReporting` - オプションパラメータ(デフォルトは `false`)、レポーターにカスタムステップのみをログ出力します。
- `issueLinkTemplate` - オプションパラメータ、課題リンクパターンを指定します。レポーターは `{}` プレースホルダーを `addIssue(value)` 呼び出しパラメータで指定された値に置き換えます。Cucumber を使用し、タグ `issue` が任意のレベルで設定されている場合も同様のロジックが適用され、レポート内のリンクに変換されます。パラメータ値の例
https://example.org/issue/{}
- `tmsLinkTemplate` - オプションパラメータ、TMS(テスト管理システム)リンクパターンを指定します。レポーターは `{}` プレースホルダーを `addTestId(value)` 呼び出しパラメータで指定された値に置き換えます。Cucumber を使用し、タグ `testId` が任意のレベルで設定されている場合も同様のロジックが適用され、レポート内のリンクに変換されます。パラメータ値の例
https://example.org/tms/{}
- `disableWebdriverScreenshotsReporting` - オプションパラメータ(デフォルトは `false`)、スクリーンショットをレポーターに添付しません。
- `useCucumberStepReporter` - オプションパラメータ(デフォルトは `false`)、cucumber を使用する場合にレポート階層を変更するには、これを true に設定します。実際に試して、どのように表示されるかを確認してください。
- `disableMochaHooks` - オプションパラメータ (デフォルトは `false`)、`before/after` スタックトレース/スクリーンショット/結果フックを Allure Reporter に取得しないようにするには、`true` に設定します。
- `addConsoleLogs` - オプションパラメータ(デフォルトは `false`)、ステップからのコンソールログをレポーターに添付するには、true に設定します。
- `reportedEnvironmentVars` (**型:** `Record<string, string>`) - レポートに環境変数を表示するには、このオプションを設定します。これを設定しても、実際の環境変数は変更されないことに注意してください。
サポートされている Allure API
- `addLabel(name, value)` - テストにカスタムラベルを割り当てます
- `addFeature(featureName)` – テストに機能を割り当てます
- `addStory(storyName)` – テストにユーザーストーリーを割り当てます
- `addSeverity(value)` – テストに重大度を割り当てます。blocker、critical、normal、minor、trivial のいずれかの値を受け入れます
- `addTag(value)` – テストにタグラベルを割り当てます
- `addEpic(value)` – テストにエピックラベルを割り当てます
- `addOwner(value)` – テストにオーナーラベルを割り当てます
- `addSuite(value)` – テストにスイートラベルを割り当てます
- `addSubSuite(value)` – テストにサブスイートラベルを割り当てます
- `addParentSuite(value)` – テストに親スイートラベルを割り当てます
- `addIssue(value)` – テストに課題 ID を割り当てます
- `addAllureId(value)` - allure test ops id ラベルをテストに割り当てます
- `addTestId(value)` – テストに TMS テスト ID を割り当てます
- ~~`addEnvironment(name, value)`~~ – 動作しなくなった非推奨の関数です。代わりに `reportedEnvironmentVars` を使用してください
- `addAttachment(name, content, [type])` – 添付ファイルをテストに保存します。
- `name` ( *String* ) - 添付ファイル名。
- `content` – 添付ファイルの内容。
- `type` ( *String* 、オプション) – 添付ファイルの MIME タイプ、デフォルトは `text/plain`
- `addArgument(name, value)` - テストに追加の引数を追加します
- `addDescription(description, [type])` – テストに説明を追加します。
- `description` ( *String* ) - テストの説明。
- `type` ( *String* 、オプション) – 説明のタイプ、デフォルトは `text` です。値 ['text', 'html','markdown']
- `addStep(title, [{content, name = 'attachment'}], [status])` - テストにステップを追加します。
- `title` ( *String* ) - ステップの名前。
- `content` ( *String* 、オプション) - ステップの添付ファイル
- `name` ( *String* 、オプション) - ステップの添付ファイル名、デフォルトは `attachment` です。
- `status` ( *文字列* 、オプション) - ステップの状態、デフォルトは `passed` です。「failed」、「passed」、または「broken」でなければなりません
- `startStep(title)` - ステップを開始します
- `title` ( *String* ) - ステップの名前。
- `endStep(status)` - ステップを終了します
- `status` ( *文字列* 、オプション) - ステップの状態、デフォルトは `passed` です。「failed」、「passed」、または「broken」でなければなりません
- `step(name, body)` - 中にコンテンツ関数を持つステップを開始します。無限の階層を持つステップを作成できます
- `body` ( *関数* ) - ステップ本体の非同期関数
使用方法
Allure Api は以下を使用してアクセスできます
CJS
const allureReporter = require('@wdio/allure-reporter').default
ESM
import allureReporter from '@wdio/allure-reporter'
Mocha の例
describe('Suite', () => {
it('Case', () => {
allureReporter.addFeature('Feature')
})
})
Cucumber
基本的な Cucumber の例
Given('I include feature and story name', () => {
allureReporter.addFeature('Feature_name');
allureReporter.addStory('Story_name');
})
カスタムステップ
`step` メソッドは、各ステップが内部に任意のコンテンツを持つ非同期関数として存在するため、ステップの処理を簡素化します。関数の最初の引数は現在のステップであり、ほとんどの allure API メソッド(`label`、`epic`、`attach` など)を持っています
allureReporter.step('my step name', async (s1) => {
s1.label('foo', 'bar')
await s1.step('my child step name', async (s2) => {
// you can add any combination of steps in the body function
})
})
Cucumber タグ
特別な名前(`issue` と `testId`)を持つ Cucumber タグはリンクに変換されます(対応するリンクテンプレートは事前に設定する必要があります)
@issue=BUG-1
@testId=TST-2
Feature: This is a feature with global tags that will be converted to Allure links
@issue=BUG-3
@testId=TST-4
Scenario: This is a scenario with tags that will be converted to Allure links
Given I do something
特別な名前(`feature`)を持つ Cucumber タグは Allure ラベルにマッピングされます
Feature: Test user role
@feature=login
Scenario: Login
Given I test login
レポートの表示
結果は、Allure が提供するレポートツールのいずれかで利用できます。例えば
コマンドライン
Allure コマンドラインツールをインストールし、結果ディレクトリを処理します
allure generate [allure_output_dir] && allure open
これにより、レポートが生成され(デフォルトでは `./allure-report` に)、ブラウザで開かれます。
レポートの自動生成
Allure コマンドラインツールをプログラムで使用して、レポートを自動生成することもできます。そのためには、以下のコマンドでプロジェクトにパッケージをインストールします
npm i allure-commandline
次に、`onComplete` フックを追加または拡張するか、このためのカスタムサービスを作成します
// wdio.conf.js
const allure = require('allure-commandline')
export const config = {
// ...
onComplete: function() {
const reportError = new Error('Could not generate Allure report')
const generation = allure(['generate', 'allure-results', '--clean'])
return new Promise((resolve, reject) => {
const generationTimeout = setTimeout(
() => reject(reportError),
5000)
generation.on('exit', function(exitCode) {
clearTimeout(generationTimeout)
if (exitCode !== 0) {
return reject(reportError)
}
console.log('Allure report successfully generated')
resolve()
})
})
}
// ...
}
Jenkins
Allure Jenkins プラグインをインストールして設定します
スクリーンショットの追加
スクリーンショットは、Mocha と Jasmine の `afterTest` フックまたは Cucumber の `afterStep` フックで WebDriverIO の `takeScreenshot` 関数を使用することで、レポートに添付できます。最初にレポーターオプションで `disableWebdriverScreenshotsReporting: false` を設定し、次に afterStep フックに追加します
Mocha / Jasmine
afterTest: async function(test, context, { error, result, duration, passed, retries }) {
if (error) {
await browser.takeScreenshot();
}
}
Cucumber
afterStep: async function (step, scenario, { error, duration, passed }, context) {
if (error) {
await browser.takeScreenshot();
}
}
上記の例に示すように、この関数が呼び出されると、スクリーンショット画像が allure レポートに添付されます。