pytestに入門、Djangoプロジェクトのスクリプトの単体テスト(assert)をする。

▼この記事をSNSでシェアする▼

スポンサーリンク

スポンサーリンク

santaka
久しぶりのDjango

画像編集アプリサイトを開発してだいぶ放置していました。

機能自体はまあまあできているので単体テストでもやろうかなとおもい、pytestさわってみました。

assertで出力値が期待通りを確認する簡単なものしかやっていませんが・・・

pytestとは

pythonでの単体テスト用のライブラリ

知名度的にもJavaでいうJUnit的な存在?

詳細のドキュメントはこちら

docs.pytest.org

今回紹介していませんが、raises(例外処理),mock(既存関数のモック),fixture(既存オブジェクトの提供),mark(メタデータ付与)あたりのモジュールとかの使い方はここら辺が良さそう

前提

  • Django 2.1
  • Python3(version 3.7.0)と主要なライブラリ(numpy,matplotlib,scipy,pandas)
  • Bootstrap 4.1.1を適用しています。
  • 仮想環境venv使用
  • GitHubアカウント連携済:ローカル環境でのGitも利用可能な状態
  • pytest 4.6.1(単体テストライブラリ)を入れておく

写真は今回テストを適用するDjangoプロジェクト:画像変換(webサイト)

ソースはこちら(GitHub)

テスト対象の項目

テスト対象のメソッド

  • setLabelCvtType(cvt_param)
  • setOutputPath(name, cvt_param)

そのほかのメソッドは返り値がないものやアプリケーションを起動しないと実行できないもののため対象外とする

画像の読み込みに関するメソッドが多いので意外とpytestでテストできるものが少なかった

テストパターン

setLabelCvtType(cvt_param)

  • cvt_param(画像編集タイプ):4種類(gray,monochrome,mosaic,convolute)

setOutputPath(name, cvt_param)

  • cvt_param(画像編集タイプ):4種類(gray,monochrome,mosaic,convolute)
  • name(ファイル名):3種類(半角英数字、記号、全角文字)

editImage.py

テスト実行

テストコード

test_editImage.py

ファイル名は「test」で始まる名前にするとpytestで実行できる模様

test_(スクリプト名).pyとしておく

※今回おなじ階層にテストコードを置いていますが本来は分けるべきですね・・・

返り値をテストするために、assert文で返り値が期待通りかを確認します。

3行目でeditImage.pyをインポートします。

複数のテストを宣言するためにclassを宣言し、そこにテスト用の関数を宣言しています。

テスト実行

テスト実行(一つだけ失敗を仕込む)

TestClass.test_setOutputPath9をのぞき、15/16のケースが成功する

まとめ

pytestを初めて使って見ました。

導入もコーディングも手軽だなと思いました。

あまり難しいことをしていないのと、ほかのテストパッケージをつかったことがないので、比較検討できないのでもう少し使ってみようかなと思います。

スポンサーリンク


関連記事

▼この記事をSNSでシェアする▼

フォローする

メニュー・主な記事カテゴリ

おすすめ特集!




「ゆとり鳥日記」について
ITを中心に関心の赴くままに好きなように書いていく雑記ブログ!管理人が二人います。
◆フクロウ(ITコンサル)
◆santaka(SE)

詳しいプロフィール
お仕事の依頼・ご要望

ゆとり鳥日記をBTCで応援する