Flask アプリケーションのテスト

Beginner

This tutorial is from open-source community. Access the source code

はじめに

この実験では、pytest フレームワークを使って Flask アプリケーションをテストする方法を学びます。テストはソフトウェア開発プロセスの重要な部分であり、アプリケーションの正確性と信頼性を保証するのに役立ちます。Flask はテスト用のユーティリティを提供しており、アプリケーションの異なる部分に対するテストを書きやすくします。

注:コードファイルは自分で作成し、環境で実行する必要があります。Web 5000 で Flask サービスの状態をプレビューできます。

テスト環境のセットアップ

Flask アプリケーションのテストを書き始める前に、テスト環境をセットアップする必要があります。以下がその手順です。

  1. 次のコマンドを実行して pytest フレームワークをインストールします。

    pip install pytest
  2. Flask アプリケーションの tests フォルダに conftest.py という新しいファイルを作成します。

  3. conftest.py ファイルで必要なモジュールをインポートします。

    import pytest
    from my_app import create_app
  4. アプリケーションインスタンスを作成して構成する app という名前のフィクスチャを定義します。

    @pytest.fixture()
    def app():
        app = create_app()
        app.config.update({
            "TESTING": True,
        })
        yield app

    アプリケーションファクトリパターンを使用している場合は、フィクスチャを適切に変更する必要があります。

  5. テストクライアントと CLI ランナー用のフィクスチャを定義します。

    @pytest.fixture()
    def client(app):
        return app.test_client()
    
    @pytest.fixture()
    def runner(app):
        return app.test_cli_runner()

テストの作成

テスト環境をセットアップしたので、Flask アプリケーションのテストを作成し始めることができます。作成したい一般的なテストの例をいくつか紹介します。

  1. ルートをテストする

    def test_hello(client):
        response = client.get("/")
        assert response.status_code == 200
        assert b"Hello, World!" in response.data

    このテストは、ルート ("/") に対して GET リクエストを送信し、レスポンスのステータスコードが 200 であり、レスポンスデータに文字列 "Hello, World!" が含まれていることを確認します。

  2. POST リクエストをテストする

    def test_login(client):
        response = client.post("/login", data={"username": "test", "password": "pass"})
        assert response.status_code == 200
        assert b"Logged in successfully" in response.data

    このテストは、ユーザー名とパスワードを含むフォームデータを使って、ログインルート ("/login") に対して POST リクエストを送信します。レスポンスのステータスコードが 200 であり、レスポンスデータに文字列 "Logged in successfully" が含まれていることを確認します。

  3. コマンドをテストする

    def test_hello_command(runner):
        result = runner.invoke(args=["hello"])
        assert result.exit_code == 0
        assert "Hello, World!" in result.output

    このテストは、"hello" という名前のコマンドを実行し、コマンドがコード 0 で終了し、出力に文字列 "Hello, World!" が含まれていることを確認します。

テストの実行

テストを実行するには、ターミナルで Flask アプリケーションのルートフォルダに移動し、次のコマンドを実行します。

pytest

このコマンドは、tests フォルダ内のすべてのテストを検出して実行します。ターミナル出力にテスト結果が表示されるはずです。

まとめ

この実験では、pytest フレームワークを使って Flask アプリケーションをテストする方法を学びました。テスト環境をセットアップし、アプリケーションの異なる部分に対するテストを作成し、コードの正確性を検証するためにテストを実行しました。テストはソフトウェア開発プロセスの不可欠な部分であり、Flask アプリケーションに対するテストを作成することで、その信頼性と安定性を保証するのに役立ちます。