0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Laravel(10.19.0)でAllureReportを使う

Posted at

前提

走り書きです。
以前書いた記事ではscoopを使ってAllureを利用していましたが、Dockerイメージがあることを知ったのでメモ

そして、Laravelのバージョン10でスムーズにできなかったのでメモ

Dockerを用意

公式のSingle Project - Docker Composeほぼ同じ

docker-compose.yml
version: "3"
services:
  # アプリケーション関連は割愛 #
  allure:
    container_name: allure
    image: "frankescobar/allure-docker-service"
    user: 1000:1000
    environment:
      CHECK_RESULTS_EVERY_SECONDS: 1
      KEEP_HISTORY: 1
    ports:
      - "5050:5050"
    volumes:
      - ../app/allure-results:/app/allure-results
      - ../app/allure-reports:/app/default-reports

マウントのパスを少し変えた。
ここは個人的にLaravelのプロジェクト内に入れて、.gitignoreは忘れずに追記。
後のパッケージ側で外に出すように指定しても良いかと。
個人やプロジェクトの判断かと。

他は

  • user: 1000:1000
  • container_name: allure
    を追加したぐらい

立ち上げてみる

app/allire-resultsapp/allire-reportsができている

laravevl側でパッケージをインストール

前回の記事でも利用した通り、composerを利用してインストールしました(--dev忘れずに)

cmd
$ composer require --dev allure-framework/allure-phpunit

インストールされたら、1.3がインストールされます。

composer.json
    "require-dev": {
        "allure-framework/allure-phpunit": "^1.3",

Laravelプロジェクト直下のphpunit.xmlに追記

phpunit.xml
<extensions>
    <extension class="Qameta\Allure\PHPUnit\AllureExtension">
        <!-- Optional arguments block; omit it if you want to use default values -->
        <arguments>
            <!-- Path to config file (default is config/allure.config.php) -->
            <string>config/allure.config.php</string>
        </arguments>
    </extension>
</extensions>

configファイルが必要だそうで公式からいただきます。

config/allure.config.php
<?php

return [
    // Path to output directory (default is build/allure-results)
    'outputDirectory' => 'allure-results',
    'linkTemplates' => [
        // Class or object must implement \Qameta\Allure\Setup\LinkTemplateInterface
        'tms' => \My\LinkTemplate::class,
    ],
    'setupHook' => function (): void {
        // Some actions performed before starting the lifecycle
    },
     // Class or object must implement \Qameta\Allure\PHPUnit\Setup\ThreadDetectorInterface
    'threadDetector' => \My\ThreadDetector::class,
    'lifecycleHooks' => [
        // Class or object must implement one of \Qameta\Allure\Hook\LifecycleHookInterface descendants.
        \My\LifecycleHook::class,
    ],
];
  // 'outputDirectory' => 'build/allure-results',
  'outputDirectory' => 'allure-results',

outputDirectoryの値をbuild/allure-resultsからDockerのvolumesで指定したパスと合わせてますallure-results

実行してみる

cmd
php artisan test

初期のままだとExampleTest2つが実行されて終了。
ファイルが出力され...る...??...はずなんだけど、ない。

phpunitから実行してみる

cmd
vendor/bin/phpunit

同じく2件実行されはしたけど、以下の警告が…

There was 1 PHPUnit test runner warning:

1) Test results may not be as expected because the XML configuration file did not pass validation:

  Line 16:
  - Element 'extension': This element is not expected. Expected is ( bootstrap ).

これはphpunitのバージョンが起因していて、exceptedというタグは10以降はなくなったみたい。

Laravelをインストールした状態

composer.json
"phpunit/phpunit": "^10.1",

さあどうしたものか…

allure-phpunitのREADMEを読み返す

インストールは以下の通り

composer.json
{
    "require": {
	    "php": "^8",
	    "allure-framework/allure-phpunit": "^2"
    }
}

2ですね。composerコマンドからインストールしたら1.3がインストールされましたが、2だそうです。

パッケージの依存関係と戦い

ということで、

composer.json
    "require-dev": {
        "allure-framework/allure-phpunit": "^2",

に変更してインストールし直し。

スムーズにいかない…

  ~ 略 ~
  Problem 1
    - Root composer.json requires allure-framework/allure-phpunit ^2 -> satisfiable by allure-framework/allure-phpunit[v2.0.0, v2.1.0].
    - allure-framework/allure-phpunit[v2.0.0, ..., v2.1.0] require phpunit/phpunit ^9 -> found phpunit/phpunit[9.0.0, ..., 9.6.10] but it conflicts with your root composer.json require (^10.1).

Use the option --with-all-dependencies (-W) to allow upgrades, downgrades and removals for packages currently locked to specific versions.

phpunitのバージョンを下げろというので

composer.json
    "require-dev": {
        "phpunit/phpunit": "^9.6.10",

に変更して再度インストールし直し

インストールは完了しました。

cmd
php artisan test

またエラー

   NunoMaduro\Collision\Adapters\Laravel\Exceptions\RequirementsException 

  Running Collision 7.x artisan test command requires at least PHPUnit 10.x.

Collisionのバージョン7.xだとPHPUnitは10.xじゃないとダメだということで

composer.json
    "require-dev": {
        "nunomaduro/collision": "^6.4.0",

に変更して再度インストールし直し

インストールは完了しました。

cmd
php artisan test

また…(もう疲れた)

Config key "linkTemplates/tms" contains invalid source of Qameta\Allure\Setup\LinkTemplateInterface

Qameta\Allure\Setup\LinkTemplateInterfaceは以下の追加したallure.config.phpで定義してます。
サンプルなので、とりあえずはファイル出力の箇所以外はコメントアウトしときましょう。

config/allure.config.php
<?php

return [
    // Path to output directory (default is build/allure-results)
    'outputDirectory' => 'allure-results',
    // 'linkTemplates' => [
    //     // Class or object must implement \Qameta\Allure\Setup\LinkTemplateInterface
    //     'tms' => \My\LinkTemplate::class,
    // ],
    // 'setupHook' => function (): void {
    //     // Some actions performed before starting the lifecycle
    // },
    //  // Class or object must implement \Qameta\Allure\PHPUnit\Setup\ThreadDetectorInterface
    // 'threadDetector' => \My\ThreadDetector::class,
    // 'lifecycleHooks' => [
    //     // Class or object must implement one of \Qameta\Allure\Hook\LifecycleHookInterface descendants.
    //     \My\LifecycleHook::class,
    // ],
];

修正したので、再度テスト(涙目)

cmd
php artisan test

allure-results`にファイルができてる!!(歓喜)

次は、レポート作成

allure-docker-serviceのAPIを利用する

作成レポートを作成するAPI

GETなのでブラウザでアクセスするだけでOK
http://localhost:5050/generate-report?project_id=default

最新のレポートを確認する

とりあえず最新でOK
http://localhost:5050/allure-docker-service/projects/default/reports/latest/index.html#
ここで2件テストしたということが確認できればOK

できなかった場合は、コンテナを再起動してみる。

なお、最初のdokcer-compose.ymlで、
user: 1000:1000を追加したのは、allure-docker-service内でパーミッションエラーでディレクトリやファイルを作れなかったことがあり、追加しました。
作れなくても、レポート作成のAPIレスポンスは作ったぜ!なので困った。
issueもありました。

ひとまず、テストレポートとしてはできたので良し!
あとは、アノテーションを付けていく必要がある!

結論

  • レポートがあると視覚的に良い(やった感含め)
  • 公式のドキュメントは読むべし。(もう少し早く解決できたかな)
  • パッケージのバージョンは必要に応じてダウングレードさせるべし。
    • 最新だから良いってわけじゃない。けど、プロジェクトで検討必須。

手順まとめ

今回のLaravel(10.19.0)だと、

docker-compose.yml
version: "3"
services:
  # アプリケーション関連は割愛 #
  allure:
    container_name: allure
    image: "frankescobar/allure-docker-service"
    user: 1000:1000
    environment:
      CHECK_RESULTS_EVERY_SECONDS: 1
      KEEP_HISTORY: 1
    ports:
      - "5050:5050"
    volumes:
      - ../app/allure-results:/app/allure-results
      - ../app/allure-reports:/app/default-reports
  • userを明示して
  • volumesをのちのallure.config.phpoutputDIrectoryの値と合わせて
composer.json
    "require-dev": {
        "allure-framework/allure-phpunit": "^2",
        "phpunit/phpunit": "^9.6.10",
        "nunomaduro/collision": "^6.4.0",
  • allure-phpunitは公式の通りにして
  • phpunitとcollisionはバージョン下げる
config/allure.config.php
<?php

return [
    // Path to output directory (default is build/allure-results)
    'outputDirectory' => 'allure-results',
    // 'linkTemplates' => [
    //     // Class or object must implement \Qameta\Allure\Setup\LinkTemplateInterface
    //     'tms' => \My\LinkTemplate::class,
    // ],
    // 'setupHook' => function (): void {
    //     // Some actions performed before starting the lifecycle
    // },
    //  // Class or object must implement \Qameta\Allure\PHPUnit\Setup\ThreadDetectorInterface
    // 'threadDetector' => \My\ThreadDetector::class,
    // 'lifecycleHooks' => [
    //     // Class or object must implement one of \Qameta\Allure\Hook\LifecycleHookInterface descendants.
    //     \My\LifecycleHook::class,
    // ],
];
  • outputDirectory以外はコメントアウトしておく

おわり。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?