メインコンテンツにスキップ

Allure レポーター

Allure テストレポートを作成するための WebdriverIO レポータープラグインです。

Allure Reporter Example

インストール

最も簡単な方法は、`@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

wdio.conf.js
afterTest: async function(test, context, { error, result, duration, passed, retries }) {
if (error) {
await browser.takeScreenshot();
}
}

Cucumber

wdio.conf.js
afterStep: async function (step, scenario, { error, duration, passed }, context) {
if (error) {
await browser.takeScreenshot();
}
}

上記の例に示すように、この関数が呼び出されると、スクリーンショット画像が allure レポートに添付されます。

ようこそ!何かお困りですか?

WebdriverIO AI Copilot