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이라는 픽스처 (fixture) 를 정의합니다.

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

    애플리케이션 팩토리 패턴 (application factory pattern) 을 사용하는 경우, 픽스처를 적절하게 수정해야 합니다.

  5. 테스트 클라이언트 (test client) 및 CLI 러너 (CLI runner) 에 대한 픽스처를 정의합니다.

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

테스트 작성

이제 테스트 환경을 설정했으므로 Flask 애플리케이션에 대한 테스트를 작성할 수 있습니다. 다음은 작성할 수 있는 일반적인 테스트의 몇 가지 예입니다.

  1. 라우트 (route) 테스트:

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

    이 테스트는 루트 라우트 ("/") 로 GET 요청을 보내고 응답 상태 코드 (status code) 가 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

    이 테스트는 사용자 이름과 비밀번호를 포함하는 폼 데이터 (form 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 애플리케이션에 대한 테스트를 작성하면 애플리케이션의 신뢰성과 안정성을 보장하는 데 도움이 됩니다.