테스트를 하는것은 중요하지만 그보다 더 중요한 것은 테스트를 자동화 시키는 것이다. 사람이 직접 테스트 하는 것을 메뉴얼 테스트 (manual test) 라 하는데 직접 일일이 하는 것이므로 테스트 속도와 시간이 오래 걸린다는 것이 문제다. 그렇기 때문에 인력과 시간이 부족한 현장에서는 테스트 자동화가 중요하다는 것이다.
이 책에서는 3가지 테스트 방법을 소개한다.
- UI test / End-To-End test
UI를 통해서 하는 테스트 ,프론트엔드 부터 백엔드 까지 실행시키고 연결해야 하는 테스트 이기 때문에 오래걸리며 완벽하게 자동화 하기 까다롭다. 이 책의 저자는 10% 정도는 UI test 를 할 것을 권장한다.
- Intergration test
지금까지 해 왔던 것이 바로 이 테스트이다. 기능을 구현하고 기능별로 일일이 HTTP 요청을 통해서 제대로 작동하는지 확인하는 방법이다. 즉 테스트 하고자 하는 해당 시스템만 실행시켜서 테스트를 하는 것이다. 그러므로 테스트 설정이나 실행 시간이 짧고 간다하며 자동화하기가 UI test 보다는 간단하다. 그러나 아래의 Unit test 보다는 실행 속도가 느리기 때문에 20% 정도 할당하는 것을 권장한다.
- Unit test
Unit test는 기존의 내가 생각하던 것과는 다르게 코드를 테스트하는 코드를 작성해서 테스트를 하는 방식이다.
예를 들어 X * 2 를 return 하는 함수 코드
def multiply_by_two(x):
return x * 2
를 테스트 하기 위한 코드는 아래와 같다.
assert_multiply_by_two(2) ==4
여기서 assert는 다음 표현이 Ture 가 아닌 False인 경우 AssertionError 익셉션 exception을 내뱉는다. 즉, 위의 함수값에 2를 넣었서 4가 나왔는데 다른 값이 나오는 경우 AssertionError 가 발생하게 된다. 이렇게 모든 함수 혹은 메소드를 테스트 하는 것이다.
이렇게 코드를 통해서 테스트 하는 경우 자동화도 원활하며 실행 속도도 빠르다. 또한 디버깅도 쉽고 문제 발생시 어디가 문제인지 바로 파악할 수 있다. 그러나 함수, 메소드 별로 테스트 했을시 별 문제가 없으므로 프론트와 백엔드 부분을 모두 연결하여 테스트시 오류가 발생하지 않을 거라고 단정할 수 없다. 결국은 UI test, integration test 도 해야 한다.
Pytest
Pytest 는 파이썬 외부라이브러리로 별도의 설치가 필요하다. 설치 명령어는 다음과 같다.
pip install pytest
Pytest는 실행파일 이름의 앞부분이 반드시 test_ 라고 되어있어야 테스트 파일로 인식하고 실행한다. 이는 함수도 마찬가지로 함수 이름 앞부분이 test_ 로 되어 있어야 한다.
multiply_by_two 파일과, 함수를 생성하고 테스트 코드를 작성해 보았다.
# file name : test_multiply_by_two.py
def multiply_by_two(x):
return x * 2
def test_multiply_by_two():
assert multiply_by_two(7) == 15
위의 함수가 테스트 대상 함수고 아래 부분이 unit test 함수이다. assert multiply_by_two 가 15 를 return 하는지, 한다면 정상적으로 출력이 될 것이고 그렇지 않다면 AssertionError 가 발생하게된다. 위 테스트 코드대로 실행할시 15 가 return 이 되지 않기때문에 AssertionError를 출력하게 된다.
따로 터미널에 들어갈 필요없이 평소에 vscode를 자주 사용한다면 이렇게 vscode 상에서도 실행시킬 수 있다. 테스트 결과 올바른 return 값이 아니기 때문에 AssertioErrorf 를 출력하고 어디가 틀렸는지 알려주기도 한다.
올바른 값이 return 되었다면 pass 를 출력한다.
'Backend > Flask 개발일지' 카테고리의 다른 글
20. miniter API Unit test 2 (0) | 2022.02.09 |
---|---|
19. miniter API Unit test 1 (0) | 2022.02.03 |
14. 인증 (Authentication)절차와 비밀번호 암호화 (0) | 2022.01.23 |
13. SQLAlchemy를 이용하여 API와 DB 연결하기 (0) | 2022.01.19 |
12. vscode 에 MySQL 연동하기 (0) | 2022.01.17 |