allure reportでテストの歴史を感じたかい?(Gitlab)

マリーザ?!

テストの履歴を見るとどんだけ連続で成功したり失敗したりしてるかわかります

わかると何がいいかって、E2Eだと特にそうなんだけど、不安定ないわゆるFreakyなテストを見つけられます

以下typescript+npm+playwright+Gitlab前提

playwrightでAllureログを出すようにする

www.npmjs.com

Allure用のプラグインがあるので、それで出力できる。

Installation

npm i -D @playwright/test allure-playwright

手元ならHTMLレポーターもいるだろうからplaywright.config.tsは以下

{
  reporter: [["html"], ["allure-playwright"]];
}

これで playwright testするとallure-resultsディレクトリの生成とそんなかへの出力がされるようになる

歴史を話すと昔のPlaywrightのレポートの標準だったとか何とか。本当か怪しい。ただ公式ドキュメントでも言及されてたり充実してるのは確か。

履歴を持つAllure Reportの生成

allurereport.org

前に生成したallure-report/historyをテスト実行時にできる allure-resultsにぶち込んで allure generate

CIというかスクリプト的にはmv書き込んでおけば良い

Gitlabで利用する

medium.com

上記のyamlを用法容量を守ってパクるんだけど、コロンが二つ連続してたり文法エラーあるんでそこは気をつける、気をつけた。

最近はmasterじゃなくてmainで作られるとかもあるのでそこも対応。

上のmediumにもあるけど${CI_DEPLOY_TOKEN}は適宜Gitlabの設定→アクセストークンから作って環境変数とかに突っ込む事。Gitlabのセキュリティの問題。公開ならいらんらしいけど、公開でもあっても邪魔にならんし作っといていいんじゃないかな

stages:
  - test
  - allure
  - deploy

.download_history: &download_history
  after_script:
    - apt-get update
    - apt-get upgrade -y
    - apt-get install -y unzip
    - mkdir backup && cd backup || true
    - "curl --location --output report.zip --request GET \"https://gitlab.com/api/v4/projects/${CI_PROJECT_ID}/jobs/artifacts/main/download?job=pages\" --header \"Authorization: Bearer ${CI_DEPLOY_TOKEN}\" || true"
    - (unzip report.zip) || true
    - cd ../
    - (cp -r backup/public/history/ allure-results/history) || true

.test_template: &test_template
  allow_failure: true
  stage: test
  image: mcr.microsoft.com/playwright:v1.40.1-jammy
  script:
    - npm install @playwright/test
    - npx playwright test
  artifacts:
    when: always
    paths:
      - allure-results/
    reports:
      junit: results.xml

smoke:
  <<: *test_template
  <<: *download_history

allure_report:
  stage: allure
  when: always
  image: timbru31/java-node
  dependencies: 
    - smoke
  script:
    - npm install
    - npx allure generate #change allure command specific to your framework
  artifacts:
    when: always
    paths:
      - allure-report/
      - allure-results/
  only:
    - main
  
pages:
  stage: deploy
  when: always
  dependencies:
    - allure_report
  script:
    - mv allure-report/ public/
  artifacts:
    paths:
      - public
    expire_in: 30 days
  only:
    - main

.download_historyで以前のhistoryを取得する

前回test_templateでArtifactsに保存したallure-resultsを拾う部分。拾い方の部分ドキュメント読んでないからようわからんけど雰囲気わかるはず

apt-get update周りは過剰かもしれない、調べてない。

CI_PROJECT_IDはGitlabが設定するからコピペでいいけど、CI_DEPLOY_TOKENは上でも書いた通り自分で環境変数として作る必要がある。名前変えたらもちろん合わせる事。

いちいち || trueしてるのは初回実行とかで拾えなかった時パイプラインを失敗としないため。本当は拾えてほしい時もエラーにならない問題はある。

test_templateはいい感じに

各テスト実行の通り

allure_reportでreports,resultsをArtifactsで保存

pagesが使う分にはreportsでいいけどresultsが次回実行の時にいる

pagesは名前固定

public にhtml保存すりゃいいっぽい。report持っていく