가짜연구소 내 Python - Data Engineering 스터디를 위해 작성했습니다.
https://www.notion.so/chanrankim/PseudoLab-c42db6652c1b45c3ba4bfe157c70cf09
(가짜연구소 링크)
https://www.notion.so/chanrankim/Data-Engineer-Python-83c206a662004120a8211a800581e124
(스터디상세 링크)
- 테스트를 실패하지 않는 가장 좋은 방법!
- 테스트를 하지 않는것!
0. TDD란?
- Test-Driven-Development의 약자(=테스트 주도 개발)
- 테스트 코드를 먼저 작성(실패할 확률이 높음)
- 테스트 통과 목적의 코드 작성
- 테스트 통과후 코드 성능 향상(재사용성, 가독성, 기능 성능 향상)
- 왜 하는가?
- 기능 단위의 피드백 루프를 거친다.
- 테스트 단계를 통해 서비스 전 코드가 가진 불확실성 개선
- 쓸데 없는 기능 추가하는 것 방지(테스트 통과가 목적이기 때문에)
- 구현하고자 하는 코드 기능에 부담없이 친숙해질 수 있음
- 단점은?
- 괜히 코드 구현 초기 비용만 늘어나는거 아닌가?(EX_그냥 바로 개발하면 되는데)
- TDD 자체가 목적이 되는경우(테스트만 하다가 끝나버림)
1. Pytest 구현 기능
python에서 코드 test를 해주는 라이브러리들은 다양하다. 그 중 가장 간단하고 사용이 쉬운 pytest를 사용해보려 한다. 우선, 구현하기 전에 개발하고자 하는 기능을 먼저 정의하겠다.
특정 분포에서 여러번 샘플링을 했을 때, 각 샘플 집단들은 얼마나 유사할까?(상관관계 이용)
뭐 대충 이런 작업을 해본다고 가정하자. 어떤 기능들이 필요할까?
2. Pytest 구현 내용
- array를 생성했을 때 numpy module을 이용했는지 check
우선 위 한가지만 테스트 해볼 것이다.
3. Pytest 구현
pip3 install pytest
우선 해당 명령어로 pytest를 설치해준다.
파일 구조는 위와 같은데, func라는 폴더에 본 파일을 작성하기전 테스트 폴더에서 TDD를 하는 상황을 가정했다. first_test.py 안 코드 구조는 다음과 같다.
import pytest
def get_array(mean: int, std: int, size: tuple):
return np.random.normal(mean, std, size)
def test_module_name():
assert type(get_array(0, 1, (2, 10))).__module__ = 'numpy'
한번 pytest를 실행해보자.
pytest test/first_test.py
이런 굉장히 호러블한...메시지가 나오는데, 일단 에러 내용을 살펴보니 syntax 에러라고 해서 문법에 뭔가 잘못된 부분이 있는 것 같다. 에러 수정 전에 directory 구조를 한번 더 살펴보자.
이렇게, pytest_cache라는 폴더가 동일 디렉토리 레벨에 생겼다.
일단 이점 참고하고, 다시 내부 코드를 살펴보니 ==이 아니고.. =이라고 입력해서 에러가 생긴것을 발견했다.
해당 부분을 수정하고 다시 실행했더니
이번에는 라이브러리가 제대로 설치되지 않은 것 같다. 다시.. 라이브러리까지 제대로 설치해주고 나면
import pytest
import numpy as np
def get_array(mean: int, std: int, size: tuple):
return np.random.normal(mean, std, size)
def test_module_name():
assert type(get_array(0, 1, (2, 10))).__module__ == 'numpy'
최종 코드는 위와 같이 된다. 한번 더 실행해보자.
테스트가 잘되면 위와 같이 표기된다.
아주 간단하게만, pytest를 해봤는데 다음 글에서는 pytest 내부 구성 요소에 대해 조금 더 살펴볼 예정이다. 이상
'딥상어동의 딥한 프로그래밍 > Python' 카테고리의 다른 글
심심해서만들어보는함수 - Pandas 인덱싱 메서드로 컬럼 순서 변경하기 (0) | 2022.07.09 |
---|---|
[Python] 클래스와 상속 기초 예제 (0) | 2022.04.24 |
[Python] PEP 8 스타일 가이드 중 헷갈리는 것 정리 (0) | 2022.04.11 |
파이썬을 효과적으로 사용하기 위한 몇가지 방법들 (0) | 2022.03.06 |
[Python] Dot.점 의 의미 (0) | 2022.02.06 |
제 블로그에 와주셔서 감사합니다! 다들 오늘 하루도 좋은 일 있으시길~~
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!