최근 회사에서 테스트 관련 최적화 작업을 진행하고 삽질하면서 몇 가지 소소한, 그리고 소중한 팁들을 얻게되었다..! 그 내용들을 정리해볼까 한다.
먼저 엄청 쉬운 팁부터.
테스트하는데 pdb를 써보고 싶어.. VSCode 는 불편해..
vscode 의 기본 테스트 기능에는 pytest 와 통합되어 작동하는 기능이 있다. 테스트의 실행결과를 콘솔 비슷하게 볼 수는 있는데 그 안에서 입력은 불가능 하다. 그래서 만약 pdb 같은걸로 set_trace 를 해서 테스트를 하려면 pytest 명령어를 셸에서 직접 입력해야 한다.
그렇다면 보통 시도하는 접근이 파일명을 옵션으로 줘서 해당 파일을 실행하는것인데, 그 안의 하나의 테스트만을 실행하고 싶다면 -k 옵션을 활용해 볼 수 있겠다.
pytest -vv "파일명" -k "테스트 함수 이름"
거기 너! 일하는척 하지마!
코딩을 하다보면 다양한 외부 api 를 사용하게 될 일이 있다. 그들은 대부분 네트워크를 이용해 통신할것이다. 가령 위치 관련 api, 메일 전송 관련한 api 같은것들..!
테스트 코드 작성시에는 외부 api 에 대한 테스트는 보통 작성하지 않고, 잘 integration 됐는지를 확인하는 테스트를 작성하곤 한다.
그런데 문제는 자동으로 외부 api 가 호출되지만 막상 그 안의 내용은 필요가 없을 경우인데, 가령 회원가입을 테스트 하려고 요청을 보냈을 때 회원가입 request 가 적절하게 생성됬는지만 확인하면 되고, 메일이 전송됐는지는 확인 할 필요가 없는 경우이다.
이 경우에 우리가 흔히 아는 mocking 을 시도해 볼 수 있다. mocking 을 해서 api 를 호출하는 함수를 success 값만 반환하도록 하고 그 안의 동작은 제거하는것!
누구인가? 누가 속도를 느리게 하고있는가?
이걸 알고싶다면, duration 옵션을 줘 볼 수 있다.
Printing test execution times and pinning down slow tests with py.test
I am running unit tests on a CI server using py.test. Tests use external resources fetched over network. Sometimes test runner takes too long, causing test runner to be aborted. I cannot repeat the
stackoverflow.com
pytest --duration=0 .
이런식으로 실행하면, 속도가 오래걸렸던 테스트 순으로 정렬하여 쭉 보여준다.
'Computer Science' 카테고리의 다른 글
멋있는 사람 훔쳐보기: Tiangolo (FastAPI 개발자) (0) | 2021.09.11 |
---|---|
Django 를 하는데 Signal 이 왔다! (Signal 관련 유의 사항) (0) | 2021.09.01 |
파이썬 함수가 mocking(patching) 이 안돼요! (0) | 2021.08.25 |
내 깃허브가 털렸다 (1) | 2021.04.09 |
Go 프로젝트 Docker 이미지 크기 99.2% 줄이기 (부제: 이미지 크기 12921% 떡상 시키기) (0) | 2021.04.08 |
최근 회사에서 테스트 관련 최적화 작업을 진행하고 삽질하면서 몇 가지 소소한, 그리고 소중한 팁들을 얻게되었다..! 그 내용들을 정리해볼까 한다.
먼저 엄청 쉬운 팁부터.
테스트하는데 pdb를 써보고 싶어.. VSCode 는 불편해..
vscode 의 기본 테스트 기능에는 pytest 와 통합되어 작동하는 기능이 있다. 테스트의 실행결과를 콘솔 비슷하게 볼 수는 있는데 그 안에서 입력은 불가능 하다. 그래서 만약 pdb 같은걸로 set_trace 를 해서 테스트를 하려면 pytest 명령어를 셸에서 직접 입력해야 한다.
그렇다면 보통 시도하는 접근이 파일명을 옵션으로 줘서 해당 파일을 실행하는것인데, 그 안의 하나의 테스트만을 실행하고 싶다면 -k 옵션을 활용해 볼 수 있겠다.
pytest -vv "파일명" -k "테스트 함수 이름"
거기 너! 일하는척 하지마!
코딩을 하다보면 다양한 외부 api 를 사용하게 될 일이 있다. 그들은 대부분 네트워크를 이용해 통신할것이다. 가령 위치 관련 api, 메일 전송 관련한 api 같은것들..!
테스트 코드 작성시에는 외부 api 에 대한 테스트는 보통 작성하지 않고, 잘 integration 됐는지를 확인하는 테스트를 작성하곤 한다.
그런데 문제는 자동으로 외부 api 가 호출되지만 막상 그 안의 내용은 필요가 없을 경우인데, 가령 회원가입을 테스트 하려고 요청을 보냈을 때 회원가입 request 가 적절하게 생성됬는지만 확인하면 되고, 메일이 전송됐는지는 확인 할 필요가 없는 경우이다.
이 경우에 우리가 흔히 아는 mocking 을 시도해 볼 수 있다. mocking 을 해서 api 를 호출하는 함수를 success 값만 반환하도록 하고 그 안의 동작은 제거하는것!
누구인가? 누가 속도를 느리게 하고있는가?
이걸 알고싶다면, duration 옵션을 줘 볼 수 있다.
Printing test execution times and pinning down slow tests with py.test
I am running unit tests on a CI server using py.test. Tests use external resources fetched over network. Sometimes test runner takes too long, causing test runner to be aborted. I cannot repeat the
stackoverflow.com
pytest --duration=0 .
이런식으로 실행하면, 속도가 오래걸렸던 테스트 순으로 정렬하여 쭉 보여준다.
'Computer Science' 카테고리의 다른 글
멋있는 사람 훔쳐보기: Tiangolo (FastAPI 개발자) (0) | 2021.09.11 |
---|---|
Django 를 하는데 Signal 이 왔다! (Signal 관련 유의 사항) (0) | 2021.09.01 |
파이썬 함수가 mocking(patching) 이 안돼요! (0) | 2021.08.25 |
내 깃허브가 털렸다 (1) | 2021.04.09 |
Go 프로젝트 Docker 이미지 크기 99.2% 줄이기 (부제: 이미지 크기 12921% 떡상 시키기) (0) | 2021.04.08 |