Python

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

投稿日:2017/09/30 更新日:

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ディレクトリに書き出す場合は以下のようなコマンドになります。

allure generate ./results/ -o ./reports/ --clean

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

Dockerで実行する方法

Dockerイメージを作ったのでDockerHubにPushしました。
ホストにJava入れたくない場合はこちらを利用してください。
初めてDockerHubにイメージをPushしたので不手際などありましたらご容赦ください。
とりあえず、試してみたいという場合は以下のコマンドで実行できます。
JUnit形式のXMLはテスト用のものを作ります。

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

するとreportsディレクトリにレポート用のhtmlが生成されますのでブラウザで開きます。
また、このレポートはディレクトリ内のjsonをロードするのですがChrome等だとCross origin requests are only supported for protocol schemesというエラーが表示される場合があるので、その他のブラウザでお試しください。EdgeとFireFoxだと今のところ大丈夫でしたがセキュリティ等の対応で表示できない場合もあるかと思います。

まとめ

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

-Python

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

Vagrantのshared_folderでマウント時にnosetestsでテストが読み込まれない

Pythonでテストを実行する時noseのnosetestsを使っているのですがVagrantのshared_folderでマウントしてるディレクトリでnosetestsと実行してもテストクラスとして …

Google App Engineのdev_appserver.pyをWindowsで動かす

Google App Engine(GAE)はStandard environmentとFlexible environmentの2あるんですけど、無料枠が適用されるのはStandard enviro …

Python初心者がPythonの環境構築をまとめたメモ(2017年)

最近、仕事でPythonを書いているのですがWindows環境でPython環境を構築するにあたり色々調べて最終的にAnacondaに落ち着きました。 Python力がなくて途中何をやっているのかよく …

ad-sidebar




カテゴリー