[解決済み] ディレクトリ内のすべてのPythonユニットテストを実行するにはどうすればよいですか?
質問
私は、Pythonのユニットテストを含むディレクトリを持っています。各ユニットテストモジュールは次のような形式です。 test_*.py . というファイルを作ろうとしています。 all_test.py これは、ご想像のとおり、前述のテストフォームにあるすべてのファイルを実行し、その結果を返すものです。これまで2つの方法を試しましたが、両方とも失敗しました。この2つの方法を紹介しますが、実際にこれを正しく実行する方法を知っている人がいることを望みます。
最初の勇ましい試みとしては、ファイル内のすべてのテスト・モジュールをインポートして、次のように呼び出せばよいのではないかと考えました。
unittest.main()
しかし、それは間違いでした。
import glob
import unittest
testSuite = unittest.TestSuite()
test_file_strings = glob.glob('test_*.py')
module_strings = [str[0:len(str)-3] for str in test_file_strings]
if __name__ == "__main__":
unittest.main()
これはうまくいかなかった、私が得た結果は。
$ python all_test.py
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
2回目の挑戦では、テストというものをもっと手動でやってみようと思いました。そこで、以下にそれを試してみました。
import glob
import unittest
testSuite = unittest.TestSuite()
test_file_strings = glob.glob('test_*.py')
module_strings = [str[0:len(str)-3] for str in test_file_strings]
[__import__(str) for str in module_strings]
suites = [unittest.TestLoader().loadTestsFromName(str) for str in module_strings]
[testSuite.addTest(suite) for suite in suites]
print testSuite
result = unittest.TestResult()
testSuite.run(result)
print result
#Ok, at this point I have a result
#How do I display it as the normal unit test command line output?
if __name__ == "__main__":
unittest.main()
これもうまくいきませんでしたが、あと少しというところでしょうか。
$ python all_test.py
<unittest.TestSuite tests=[<unittest.TestSuite tests=[<unittest.TestSuite tests=[<test_main.TestMain testMethod=test_respondes_to_get>]>]>]>
<unittest.TestResult run=1 errors=0 failures=0>
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
何らかの組曲があるようで、その結果を実行することができます。とだけ書かれているのが少し気になります。
run=1
であるべきであるように思われる。
run=2
しかし、それは進歩です。しかし、どのようにmainに結果を渡して表示すればいいのでしょうか?あるいは、このファイルを実行するだけで、このディレクトリのすべてのユニットテストを実行できるように、基本的にどのように動作させればいいのでしょうか?
どのように解決するのですか?
Python 2.7以降では、新しいコードを書いたり、サードパーティのツールを使ったりする必要はありません。コマンドラインを使った再帰的なテスト実行はビルトインされています。 コマンドラインから再帰的なテスト実行が組み込まれています。
__init__.py
を test ディレクトリに置いてください。
python -m unittest discover <test_directory>
# or
python -m unittest discover -s <directory> -p '*_test.py'
で詳細を読むことができます。 パイソン2.7 または パイソン3.x unittestのドキュメントを参照してください。
2021年に向けてのアップデート。
最近のPythonプロジェクトでは、以下のような高度なツールを使用しています。 pytest . 例えば、プルダウン matplotlib または scikit-learn をクリックすると、両者が使っていることがわかります。
7000以上のテストがある場合、これらの新しいツールについて知っておくことは重要です。
- 合格、スキップ、警告、エラーを要約する、より高度な方法
- どのように失敗したかを簡単に確認する方法
- 実行中のパーセントコンプリート
- 総実行時間
- テストレポートの作成方法
- などなど
関連
-
Python百行で韓服サークルの画像クロールを実現する
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】「SyntaxError.Syntax」は何ですか?Missing parentheses in call to 'print'」はPythonでどういう意味ですか?
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] AndroidでPythonを実行する方法はありますか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonの非常に便利な2つのデコレーターを解説
-
opencvとpillowを用いた顔認証システム(デモあり)
-
python call matlab メソッドの詳細
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
Python LeNetネットワークの説明とpytorchでの実装
-
Pythonの画像ファイル処理用ライブラリ「Pillow」(グラフィックの詳細)
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み】Pythonでgoogle APIのJSONコードを読み込むとエラーになる件
-
[解決済み】ValueError: xとyは同じサイズでなければならない
-
[解決済み】典型的なテストディレクトリ構造でunittestを実行する