Python

Pythonのテストを視覚的なテストレポートで出力する

Pythonでテストを書いて実行するときはnoseのnosetestsを使っています。
JavaだとGradleでテストを実行するとテストレポートは作ってくれるのですがnosetestsでどのようにレポートを出力するかわからず色々調べていました。
するとAllureというツールがありテストレポートを出力してくれることがわかりました。
現在はAllre2が開発されており、こちらはJUnit系のXMLファイルをパースできるみたいです。
またnosetestsも実行時に--with-xunitオプションを指定するとJUnit形式のXMLを出力してくれます。
これを利用して実際にレポートを出力してみました。

概要

グラフ

パッケージ

こんな感じでレポートを作成できます。

インストール方法

ドキュメントにはUbuntuかDebian系のOS使っている人はapt-getでインストールする方法が書いてあるのですが、残念ながらうまく動かすことができず・・・。
Allre2はJavaで実行するのですがJava8以上じゃないと動かないみたいなのでJava8をインストールしておきます。
あとはバイナリをダウンロードして展開して実行すればレポートが作成されます。
例えば、Junit形式がのxmlがresultsディレクトリにありレポートをreportsディレクトリに書き出す場合は以下のようなコマンドになります。

[code lang=text]
allure generate ./results/ -o ./reports/ --clean
[/code]

デフォルトだと実行時にレポートフォルダにレポートが存在する場合は失敗しますが--cleanをつけると再生成してくれます。

Dockerで実行する方法

Dockerイメージを作ったのでDockerHubにPushしました。
ホストにJava入れたくない場合はこちらを利用してください。
初めてDockerHubにイメージをPushしたので不手際などありましたらご容赦ください。
とりあえず、試してみたいという場合は以下のコマンドで実行できます。
JUnit形式のXMLはテスト用のものを作ります。
[code language="bash"]
mkdir -p work/results
cd work
tee results/sample.xml <<_EOF_
<?xml version='1.0' encoding='utf-8'?>
<testsuite name="nosetests" tests="6" errors="0" failures="0" skip="0">
<testcase classname="src.app.tests.spiders.test_cloud_storage_pipeline.TestCloudStoragePipeline" name="test_process_file" time="0.001"></testcase>
<testcase classname="src.app.tests.spiders.test_cloud_storage_pipeline.TestDatastorePipeline" name="test_item_to_entity" time="0.000"></testcase>
<testcase classname="src.app.tests.spiders.test_helpers.TestUtil" name="test_is_content_type_video" time="0.001"></testcase>
<testcase classname="src.app.tests.spiders.test_site1_spider_spider.TestSite1SpiderSpider" name="test_index_to_lists" time="0.006"></testcase>
<testcase classname="src.app.tests.spiders.test_site2_spider_spider.TestSite2SpiderSpider" name="test_index_to_lists" time="0.004"></testcase>
<testcase classname="src.app.tests.spiders.test_site3_spider_spider.TestSite3SpiderSpider" name="test_index_to_lists" time="0.006"></testcase>
</testsuite>
_EOF_
docker run -it --rm -v $(pwd):/output -w /output beeete2/docker-allure2 allure generate /output/results/ -o /output/reports/ --clean
[/code]
するとreportsディレクトリにレポート用のhtmlが生成されますのでブラウザで開きます。
また、このレポートはディレクトリ内のjsonをロードするのですがChrome等だとCross origin requests are only supported for protocol schemesというエラーが表示される場合があるので、その他のブラウザでお試しください。EdgeとFireFoxだと今のところ大丈夫でしたがセキュリティ等の対応で表示できない場合もあるかと思います。

まとめ

Allure2には各言語にテストレポート用のバインディングが用意されていてレポートをより細かくできるみたいです。
次回は細かいレポートを出力してみたいと思います。

-Python

© 2025 ビー鉄のブログ Powered by AFFINGER5