pytest基本の使い方 これだけ! 

今回はpytestの使い方について解説していきます。

pytestは、pythonのUTツールで以下コマンドで簡単にインストールできます。

インストール

pip install pytest

公式ドキュメント

pytest: helps you write better programs

フォルダ構成

.
├── src
│ └── main_logic.py
└── test
  └── test_main_logic.py
  • 今回は、メイン処理のsrcディレクトリとUT用のディレクトリで分けた
  • テストコードのファイル名は、 test_*.py とする

main_logic.py

class Math: 
    def __init__(self, num1, num2):
        self.num1 = num1
        self.num2 = num2
    def add(self):
        return self.num1 + self.num2
    def sub(self):
        return self.num1 - self.num2
    def mul(self):
        return self.num1*self.num2
    def div(self):
        return self.num1/self.num2

test_main_logic.py

from src.main_logic import Math
def test_add_01():
    assert Math(1, 2).add() == 3
def test_add_02():
    assert Math(-1, 2).add() == 1
def test_sub_01():
    assert Math(1, 2).sub() == -1
def test_sub_02():
    assert Math(-1, 2).sub() == -3
def test_mul_01():
    assert Math(1, 2).mul() == 2
def test_mul_02():
    assert Math(-1, 2).mul() == -2
def test_div_01():
    assert Math(1, 2).div() == 0.5
def test_div_02():
    assert Math(-1, 2).div() == -0.5

実行方法

基本的な実行方法は以下です。全件テストが実行されます。

% pytest

ただ、最初に上記ソースで実行すると以下のエラーが発生します。

% pytest
================================================================ test session starts ================================================================
platform darwin -- Python 3.9.2, pytest-7.0.0, pluggy-1.0.0
rootdir: sample
collected 0 items / 1 error                                                                                                                         
====================================================================== ERRORS =======================================================================
_____________________________________________________ ERROR collecting test/test_main_logic.py ______________________________________________________
ImportError while importing test module '
sample/test/test_main_logic.py'. Hint: make sure your test modules/packages have valid Python names. Traceback: /usr/local/Cellar/python@3.9/3.9.2_2/Frameworks/Python.framework/Versions/3.9/lib/python3.9/importlib/__init__.py:127: in import_module return _bootstrap._gcd_import(name[level:], package, level) test/test_main_logic.py:1: in <module> from src.main_logic import Math E ModuleNotFoundError: No module named 'src' ============================================================== short test summary info ============================================================== ERROR test/test_main_logic.py !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ================================================================= 1 error in 0.14s ==================================================================

詳細な説明は割愛しますが、このエラーを回避するには、以下のいずれかの対応が必要になります。

1_実行方法を以下に変更

python -m pytest

2_test配下に__init__.pyを追加

具体的には以下のようなディレクトリ構成にします。

└── test
    ├── __init__.py
    └── test_main_logic.py

特定のテストファイルのみ実行

% pytest test/test_main_logic.py
================================================================ test session starts ================================================================
platform darwin -- Python 3.9.2, pytest-7.0.0, pluggy-1.0.0
rootdir: /Users/rshimada3/project/kus/sample
collected 8 items                                                                                                                                   
test/test_main_logic.py ........                                                                                                              [100%]
================================================================= 8 passed in 0.05s =================================================================

 

テストケース毎の結果を確認

% pytest -v                     
================================================================ test session starts ================================================================
platform darwin -- Python 3.9.2, pytest-7.0.0, pluggy-1.0.0 -- /usr/local/opt/python@3.9/bin/python3.9
cachedir: .pytest_cache
rootdir: sample
collected 8 items                                                                                                                                   
test/test_main_logic.py::test_add_01 PASSED                                                                                                   [ 12%]
test/test_main_logic.py::test_add_02 PASSED                                                                                                   [ 25%]
test/test_main_logic.py::test_sub_01 PASSED                                                                                                   [ 37%]
test/test_main_logic.py::test_sub_02 PASSED                                                                                                   [ 50%]
test/test_main_logic.py::test_mul_01 PASSED                                                                                                   [ 62%]
test/test_main_logic.py::test_mul_02 PASSED                                                                                                   [ 75%]
test/test_main_logic.py::test_div_01 PASSED                                                                                                   [ 87%]
test/test_main_logic.py::test_div_02 PASSED                                                                                                   [100%]
================================================================= 8 passed in 0.04s =================================================================

 

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA