前提
- コンテナを使用
- フレームワークはDjangoを使用
Allureとは?
公式ドキュメントにも記載している通りテストレポートを自動生成するツールです
Allure Framework is a flexible lightweight multi-language test report tool
- PythonのPytest
- RailsのRSpec
- JavaのjUnit
- PHPのPHPUnit
- KotlinのKotest
- JavaScriptのJasmine
にも対応しています
今あげたテストフレームワーク以外にも対応しているので詳細は公式ドキュメントを参照してください
今回私はPytestでいくつかテストコードを作成してますが
- テスト数
- カバレージ
- 所要時間
などさまざまな情報を表示できます
しかも日本語にも対応しているのでありがたいです
記事の後半でレポートの内容を詳細に説明をしたいと思います
allure-docker-serviceとallure-docker-service-ui
ローカルで実行している記事が多いですが私はローカル環境を汚したくないので今回はDockerを使います
- allure-docker-service
- allure-docker-service-ui
の2つのDocker Imageを使用します
docker-compose.ymlに以下を記載します
version: '3'
services:
allure:
container_name: allure
image: "frankescobar/allure-docker-service"
environment:
# 毎秒テスト結果を確認するかどうかの設定です
# マシンへの負担が大きいとのことなので今回はNONEにします
CHECK_RESULTS_EVERY_SECONDS: NONE
# テストの履歴を保存したいのでKEEP_HISTORYを有効化(TRUE)にします
KEEP_HISTORY: 1
# 直近25回分までを保存します
KEEP_HISTORY_LATEST: 25
ports:
- "5050:5050"
volumes:
- ${PWD}/allure-results:/app/allure-results
- ${PWD}/allure-reports:/app/default-reports
allure-ui:
container_name: allure-ui
image: "frankescobar/allure-docker-service-ui"
environment:
ALLURE_DOCKER_PUBLIC_API_URL: "http://localhost:5050"
ALLURE_DOCKER_PUBLIC_API_URL_PREFIX: ""
ports:
- "5252:5252"
公式ドキュメントに記載されている通りvolumesのディレクトリを変更してしまうとコンテナ側でテスト結果の保存や反映ができなくなってしまいます
今回はcontainer_name
だけ変更してポートも含めて公式に書いてある通りの構成にします
The /app/allure-results directory is inside of the container. You MUST NOT change this directory, otherwise, the container won't detect the new changes.
The /app/default-reports directory is inside of the container. You MUST NOT change this directory, otherwise, the history reports won't be stored.
docker-compose.ymlを作成後、
docker-compose up -d
を実行します
すると、プロジェクトのルートディレクトリに以下のフォルダが作成されます
❯ tree
.
├── allure-reports
└── allure-results
- allure
- allure-ui
のコンテナが起動できていることも確認できました
docker ps -a
3b88c08ffc9e frankescobar/allure-docker-service "/bin/sh -c '$ROOT/r…" 2 minutes ago Up 2 minutes (healthy) 4040/tcp, 0.0.0.0:5050->5050/tcp allure
becb4e3f0b5d frankescobar/allure-docker-service-ui "docker-entrypoint.s…" 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:5252->5252/tcp allure-ui
テストレポートを作成しよう!
テストレポートを作成する際は以下の順で行います
- プロジェクトの作成
- テストを実行し、テスト結果をJSONで出力
- JSONファイルをallureコンテナへアップロード
- レポートの作成
手順は多いですが順番にやっていきましょう
プロジェクトの作成
http://127.0.0.1:5050 にアクセスすると以下の画面が表示されます
Allure Reportを使用する際はプロジェクトごとにproject-idを設定します
/projects
に任意のidを入力し、POSTリクエストを送ります
今回はtest-proj
というidで作成し、Executeを押します
以下の画面が表示されたら成功です
テストを実行し、テスト結果をJSONで出力
任意のテストフレームワークを使ってテストを実行し、実行したテストの結果をJSONに出力する必要があります
その際は
各テストフレームワークでのやり方は以下の公式ドキュメントを参照してください
今回私はPytestを使用するのでallure-pytestをインストールします
pip install allure-pytest
その後、以下のコマンドを使用します
pytest --alluredir=allure-results
テストが実行されるとallure-results
フォルダ内にJSONファイルが作成されます
JSONファイルをallureコンテナへアップロード
先ほどJSONファイルをもとにテストレポートを作成しました
しかし、現状ではローカル上にはあるもののallureコンテナ(サーバ)内にありません
そのため、ローカル上のJSONファイルをallureコンテナへアップロードする必要があります
公式ではアップロード用のシェルスクリプトを用意しています
allure-reportsやallure-resultsと同じプロジェクトのルートディレクトリにシェルスクリプトを作成し、実行します
❯ tree
.
├── allure-reports
├── allure-results
└── send_results.sh
PROJECT_IDの箇所に自身が作成されたプロジェクトidを入れます
今回私はtest-proj
を入れます
#!/bin/bash
# This directory is where you have all your results locally, generally named as `allure-results`
ALLURE_RESULTS_DIRECTORY='allure-results'
# This url is where the Allure container is deployed. We are using localhost as example
ALLURE_SERVER='http://localhost:5050'
# Project ID according to existent projects in your Allure container - Check endpoint for project creation >> `[POST]/projects`
PROJECT_ID='test-proj'
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
FILES_TO_SEND=$(ls -dp $DIR/$ALLURE_RESULTS_DIRECTORY/* | grep -v /$)
if [ -z "$FILES_TO_SEND" ]; then
exit 1
fi
FILES=''
for FILE in $FILES_TO_SEND; do
FILES+="-F files[]=@$FILE "
done
set -o xtrace
echo "------------------SEND-RESULTS------------------"
curl -X POST "$ALLURE_SERVER/allure-docker-service/send-results?project_id=$PROJECT_ID" -H 'Content-Type: multipart/form-data' $FILES -ik
#If you want to generate reports on demand use the endpoint `GET /generate-report` and disable the Automatic Execution >> `CHECK_RESULTS_EVERY_SECONDS: NONE`
#echo "------------------GENERATE-REPORT------------------"
#EXECUTION_NAME='execution_from_my_bash_script'
#EXECUTION_FROM='http://google.com'
#EXECUTION_TYPE='bamboo'
#You can try with a simple curl
#RESPONSE=$(curl -X GET "$ALLURE_SERVER/allure-docker-service/generate-report?project_id=$PROJECT_ID&execution_name=$EXECUTION_NAME&execution_from=$EXECUTION_FROM&execution_type=$EXECUTION_TYPE" $FILES)
#ALLURE_REPORT=$(grep -o '"report_url":"[^"]*' <<< "$RESPONSE" | grep -o '[^"]*$')
#OR You can use JQ to extract json values -> https://stedolan.github.io/jq/download/
#ALLURE_REPORT=$(echo $RESPONSE | jq '.data.report_url')
シェルスクリプトを作成したら実行します
sh send_results.sh
JSONのレスポンスが帰ってくるので以下のようなメッセージが含まれていたら成功です
"meta_data":{"message":"Results successfully sent for project_id 'test-proj'"}
レポートの作成
ここでいよいよテストレポートを作成します
少し時間がかかるので待ちます
テストレポートを見てみよう!
/projects/{id}
へGETリクエストを送ります
idにプロジェクトidを指定し、Executeを押します
レスポンス内にindex.htmlのパスがあります
今回は最新のものが見たいので
http://127.0.0.1:5050/allure-docker-service/projects/test-proj/reports/latest/index.html
を選択します
スイート
テストをステータス別で分類できます
分類の種類は以下の通りです
色 | 分類 |
---|---|
赤 | 失敗 |
黄色 | 故障 |
緑 | 成功 |
グレー | スキップ |
紫 | 不明 |
また、ステータスの真上に結果をCSVファイルに出力するボタンがあります
グラフ
テストの分類や速度をグラフで表示することができます
タイムライン
どの順番で、どのテストが、どれくらい時間がかかったかを表示することができます
振る舞い
各テストの詳細を閲覧できます
テストのdocstring、異常テストのログも確認できます
Allure Reportの使い方は以上です
Makefileを作成してコマンド一つでテストレボートの作成から表示まで行おう!
手順が多いうえにコマンドが長いので覚えられないです
そこでMakefileを使って楽にテストレポートを作成しましょう
ルートディレクトリにMakefileを作成し、以下のように記載します
CONTAINER_NAME = app
PROJECT = test-proj
RUN_APP = docker-compose exec $(CONTAINER_NAME)
RUN_POETRY = $(RUN_APP) poetry run
RUN_PYTEST = $(RUN_POETRY) pytest
make_report:
-@ $(RUN_PYTEST) --alluredir=allure-results
sh send_results.sh
echo "Generating test report. This may take a while..."
curl -X GET "http://127.0.0.1:5050/allure-docker-service/generate-report?project_id=$(PROJECT)" -H "accept: */*"
echo "Successfully generated test report. Redirecting to allure server."
open http://127.0.0.1:5050/allure-docker-service/projects/$(PROJECT)/reports/latest/index.html
show_report:
open http://127.0.0.1:5050/allure-docker-service/projects/$(PROJECT)/reports/latest/index.html
-@をつけることでテストが失敗しても処理を続行させます
make make_report
と打つと
http://127.0.0.1:5050/allure-docker-service/projects/test-proj/reports/latest/index.html
に遷移します
コマンド1つでレポートが表示される上にエラーが出た箇所が分かりやすく表示されていい感じですね!
今回はレポートは生成しなくていいから見るたけでいいよ!と思ったら以下のコマンドを実行します
make show_report
Allure Docker Service UI
http://127.0.0.1:5252/
にアクセスするとAllure Docker Service UIを開くこともできます
該当するプロジェクトを開くとこちらもAllure Reportと同様の使い方ができます
まとめ
最初は設定が多いのとREADMEの内容を読むのに時間がかかって大変でした
やり方さえわかれば簡単にいい感じのテストレポートを作成できることがわかったので大満足です
記事の紹介
以下の記事も作成してみたのでよかったら読んでいただけると幸いです
参考