[파이썬] unittest 외부 설정 및 환경 변수 활용

소개

unittest는 Python에서 테스트를 작성하고 실행하기 위한 표준 라이브러리입니다. 이를 활용하여 코드의 품질을 향상시키고 버그를 예방할 수 있습니다. 하지만 때로는 코드의 테스트 환경을 설정해야할 필요가 있을 수 있습니다. 이 블로그 포스트에서는 unittest에서 외부 설정 및 환경 변수를 활용하는 방법에 대해 알아보겠습니다.

외부 설정 파일 사용하기

테스트를 작성할 때, 특정 값들의 구성이 필요한 경우가 많습니다. 이러한 값을 하드 코딩하여 사용하는 것은 좋지 않은 습관입니다. 대신, 설정 파일을 활용하여 이러한 값을 관리하는 것이 좋습니다.

Python에서는 다양한 설정 파일 포맷을 지원합니다. 대표적으로 JSON, YAML, INI 등이 있습니다. unittest에서는 JSON을 사용하는 예제를 살펴보겠습니다.

설정 파일 생성하기

아래와 같이 config.json이라는 외부 설정 파일을 생성합니다.

{
    "base_url": "https://example.com",
    "api_key": "your_api_key"
}

설정 파일 로드하기

unittest에서 설정 파일을 로드하기 위해 setUpClass 메서드를 사용할 수 있습니다. 아래는 로드한 설정 파일을 클래스 변수로 저장하는 예제입니다.

import unittest
import json

class MyTestCase(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        with open('config.json') as file:
            cls.config = json.load(file)

    def test_something(self):
        base_url = self.config.get('base_url')
        api_key = self.config.get('api_key')
        # 테스트 코드 작성
        pass

로드한 설정 파일은 setUpClass 메서드에서 작업을 수행하는 동안 클래스 변수 config에 저장됩니다. 이후 테스트 메서드에서 이 값을 사용할 수 있습니다.

환경 변수 활용하기

외부 설정 파일 대신 환경 변수를 활용하여 테스트를 설정하는 방법도 있습니다. 이 방법을 사용하면 코드에서 특정 값을 읽을 때 환경 변수를 확인하고, 없는 경우 기본값을 사용할 수 있습니다.

환경 변수 설정하기

테스트에 필요한 값을 환경 변수에 설정하는 방법은 운영체제마다 다를 수 있습니다. 아래는 Linux나 macOS에서 환경 변수를 설정하는 예제입니다.

export BASE_URL=https://example.com
export API_KEY=your_api_key

환경 변수 읽기

Python에서는 os 모듈을 사용하여 환경 변수를 읽을 수 있습니다. 아래는 환경 변수를 읽어 클래스 변수에 저장하는 예제입니다.

import unittest
import os

class MyTestCase(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.base_url = os.getenv('BASE_URL', 'https://default.com')
        cls.api_key = os.getenv('API_KEY', 'default_api_key')

    def test_something(self):
        # 테스트 코드 작성
        pass

위의 코드에서 os.getenv 함수는 첫 번째 인자로 환경 변수 이름을 받고, 두 번째 인자로 기본값을 받습니다. 환경 변수에 해당하는 값을 읽지 못하는 경우에는 기본값이 사용됩니다.

결론

unittest에서 외부 설정 및 환경 변수를 활용하는 방법을 알아보았습니다. 외부 설정 파일을 사용하여 중요한 값들을 관리하거나, 환경 변수를 활용하여 유연한 테스트 환경을 구축할 수 있습니다. 이를 통해 코드의 테스트성과 유지 보수성을 높일 수 있습니다.

이러한 방법을 사용하여 테스트 코드를 작성하고 실행함으로써, 안정적이고 견고한 소프트웨어를 개발하는 데 도움이 될 것입니다.