Pytest(パイテスト)
PyCharm は、完全な機能を備えたテストフレームワーク pytest をサポートします。
次の機能が利用できます。
専用テストランナー。
テスト対象と pytest フィクスチャのコード補完。
コードナビゲーション。
詳細な失敗アサートレポート。
Python 2.7 および Python 3.5 以降をサポートします。
マルチプロセッシングテストの実行。
デフォルトでは、推奨されるデフォルトのテストランナーは unittest(英語) です。 pytest を利用するには、最初にそれをデフォルトのテストランナーにする必要があります。
Pytest をインストールする
Python パッケージ ツールウィンドウに移動します
pytestを 検索 フィールドに入力し始め、 Python パッケージ ツールウィンドウで操作します。 利用可能なパッケージのリストからパッケージを見つけ、 インストールする をクリックします。
pytest パッケージがインストールされると、PyCharm はそれを検出してプロジェクトのデフォルトテストランナーにします。 プロジェクト設定でいつでも テストランナーを変更できます。
これで、pytest がデフォルトのテストフレームワークとして設定されたため、 Car クラスの小さなテストを作成できます。 brake 関数をチェックするための pytest テストを作成しましょう。
テストを作成する
Python プロジェクトを作成します。
メインメニューで、 ファイル | 新規 に移動し、 Python ファイル を選択し、 car.py と入力して、 OK をクリックします。
Car クラスをコピーし、 car.py ファイルに貼り付けます。
エディターで、
brakeメソッド宣言にキャレットを置きます。次のいずれかを実行します:
に進みます。
コンテキストメニューから を選択します。

Ctrl+Shift+T を押す。
PyCharm は、利用可能なテストの一覧を表示します。

新規テストの作成 をクリックしてください。
テストの作成 ダイアログが開きます。

テストの作成 ダイアログで、以下の設定を指定します。
新しいテストクラスが生成されるターゲットディレクトリ。
テストファイルの名前(この例では test_car.py )、および必要に応じてテストクラスの名前。
テストクラスに含めるメソッドの横にあるチェックボックスを選択します。
キャレットがメソッド内にある場合、そのメソッド名だけがリストに含まれることに注意してください。 また、命名規則にもご注意ください。テストメソッドには
testプレフィックスが付いています。 そのようなプレフィックスを持つすべてのメソッドには、エディターガターに Run Test アイコンが表示されます。
準備ができたら、「OK 」をクリックします。 PyCharm は、指定した場所にテストファイルを生成します。
PyCharm は、テストメソッドテンプレート付きのテストファイルを自動生成します。 テンプレートコードを
Carの初期速度値を 50 に設定し、brake()関数の実行後に速度が正しく 45 に設定されるかどうかを確認するコードに置き換えます。from car import Car def test_car_brake(): car = Car(50) car.brake() assert car.speed == 45
PyCharm はテスト対象を認識し、 Car クラスのインスタンスに対して補完を提供します。

コンテキストメニューの テスト対象に移動 および テストへジャンプ コマンドは pytest ではサポートされていませんが、 宣言に移動 Ctrl+B コマンドを使用して、 car.py のテスト済みコードに移動できます。
テストを実行する
テストを実行するには、
をクリックします。

PyCharm は自動的に pytest 実行 / デバッグ構成を作成することに注意してください:

テストを実行するには、 test_car_pytest に対して pytest を実行する を選択します。
テスト結果をインスペクションする:

assertステートメントを次のように変更してください:assert my_car.speed == 4599。アサートに失敗したレポートを評価するためにテストを再実行します。

pytest は、失敗の明示的なレポートを提供します。
pytest フィクスチャを使用すると、テストモジュール全体で再利用できる小さなテストユニットを作成できます。 必要なのは、再利用可能なユニットに @pytest.fixture のマークを付けることだけです。
フィクスチャを使う
pytest テストを次のように変更します。
import pytest from car import Car @pytest.fixture def my_car(): return Car(50) def test_car_accelerate(my_car): my_car.accelerate() assert my_car.speed == 55 def test_car_brake(my_car): my_car.brake() assert my_car.speed == 45my_car()は、speed 値が 50 のCarインスタンスを作成するフィクスチャ関数です。test_car_accelerateおよびtest_car_brakeで、Carクラスの対応する関数が正しく実行されたことを確認するために使用されます。my_carフィクスチャはtempdirのような他の標準的な pytest フィクスチャと一緒にコード補完リストに追加されることに注意してください。いずれかの
アイコンをクリックするか、テストモジュール全体を実行します。
フィクスチャ関数の scope パラメーターを使用して、テスト間でのフィクスチャインスタンスの共有を有効にすることができます。 pytest フィクスチャの詳細については、 pytest フィクスチャのドキュメント(英語)を参照してください。
事前定義されたデータセットに対してテストを実行することをお勧めします。 PyCharm は、 @pytest.mark.parametrize を通じて pytest で実装されたテストのパラメータ化をサポートします。
パラメーターの適用
car.accelerateおよびcar.brake機能をテストするための速度値のセットを作成しましょう:speed_data = {45, 50, 55, 100}テストコードを次のように変更します。
import pytest from car import Car speed_data = {45, 50, 55, 100} @pytest.mark.parametrize("speed_brake", speed_data) def test_car_brake(speed_brake): car = Car(50) car.brake() assert car.speed == speed_brake @pytest.mark.parametrize("speed_accelerate", speed_data) def test_car_accelerate(speed_accelerate): car = Car(50) car.accelerate() assert car.speed == speed_acceleratePyCharm は新たに作成されたパラメーターを検出し、補完リストに追加することに注意してください。

car.brake()関数のテストを実行します。 次のテストレポートが必要です。
car.accelerate() 関数のテストを実行して、55 以外のすべての速度値で失敗することを確認することもできます。 パラメーター化されたテストの詳細については、 pytest のドキュメント(英語)を参照してください。