본문 바로가기
Python 문법/Python 기본 문법(3.10 기준)

[python3.10 기본] 15. 테스트와 디버깅

by cogito21_python 2024. 7. 2.
반응형

15.1 단위 테스트 (unittest 모듈)

unittest 모듈은 파이썬 표준 라이브러리로, 단위 테스트를 작성하고 실행하는 데 사용됩니다.

 

기본 테스트 작성

import unittest

def add(a, b):
    return a + b

class TestMath(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(1, 2), 3)
        self.assertEqual(add(-1, 1), 0)
        self.assertEqual(add(0, 0), 0)

if __name__ == '__main__':
    unittest.main()

테스트 실행

python -m unittest test_script.py

setup과 teardown 메소드
테스트 클래스에서 setUp()tearDown() 메소드를 사용하여 각 테스트 전에 초기화 작업을 수행하고, 테스트 후에 정리 작업을 수행할 수 있습니다.

import unittest

class TestExample(unittest.TestCase):
    def setUp(self):
        self.value = 42

    def tearDown(self):
        self.value = 0

    def test_value(self):
        self.assertEqual(self.value, 42)

if __name__ == '__main__':
    unittest.main()

15.2 디버깅 기법 (pdb 모듈, breakpoint 함수)

파이썬에서는 pdb 모듈과 breakpoint() 함수를 사용하여 디버깅을 수행할 수 있습니다.

 

pdb 모듈 사용:pdb.set_trace()를 사용하여 디버거를 호출하고, 코드 실행을 단계별로 추적할 수 있습니다.

import pdb

def buggy_function():
    x = 10
    y = 0
    pdb.set_trace()
    result = x / y
    return result

buggy_function()

 

breakpoint() 함수 사용 (Python 3.7+): breakpoint() 함수는 디버거를 호출하는 표준 방법으로, Python 3.7 이상에서 사용 가능합니다.

def buggy_function():
    x = 10
    y = 0
    breakpoint()
    result = x / y
    return result

buggy_function()

 

 

pdb 주요 명령어

  • n (next): 다음 줄로 이동
  • c (continue): 다음 중단점까지 실행
  • s (step): 함수 내부로 들어가기
  • p (print): 변수 값 출력
import pdb

def buggy_function():
    x = 10
    y = 0
    pdb.set_trace()
    result = x / y
    return result

buggy_function()

위 코드를 실행한 후, pdb 프롬프트에서 n, c, s, p x, p y 등의 명령어를 사용할 수 있습니다.

15.3 로깅 (logging 모듈)

logging 모듈은 프로그램의 실행 중 발생하는 이벤트를 기록하는 데 사용됩니다.

 

기본 로깅 설정

import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

logger.info("This is an info message")
logger.warning("This is a warning message")
logger.error("This is an error message")

파일에 로깅

import logging

logging.basicConfig(filename='app.log', filemode='w', level=logging.DEBUG)
logger = logging.getLogger(__name__)

logger.debug("This is a debug message")
logger.info("This is an info message")
logger.warning("This is a warning message")
logger.error("This is an error message")
logger.critical("This is a critical message")

로깅 포맷 지정

import logging

logging.basicConfig(
    filename='app.log',
    filemode='w',
    level=logging.DEBUG,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)

logger.debug("This is a debug message")
logger.info("This is an info message")
logger.warning("This is a warning message")
logger.error("This is an error message")
logger.critical("This is a critical message")

 

반응형