티스토리 뷰
회사에서 개발할 때 테스트 코드를 작성을 안하고 있다가 테스트 코드의 중요성을 느껴서
'깔끔한 파이썬 탄탄한 백엔드' 책에 나온 파이썬 테스트 도구인 'pytest' 를 활용한 것을 정리해봤습니다.
설치 - pip install pytest
(터미널)실행 - pytest
pytest 는 파일 이름의 앞부분에 test_ 라고 되어 있는 파일들만 테스트파일로 인식하고 실행한다 .
함수도 앞부분에 test_ 라고 되어 있는 함수들만 unittest 함수로 인식하고 실행한다.
def multiply_by_two(x):
return x * 2
def test_multiply_by_two(): ####### 1
assert multiply_by_two(4) == 8 ####### 2
1. multiply_by_two 함수를 테스트하는 unit test 함수.
2. multiply_by_two(4) 가 8를 리턴하는지 테스트한다.
def multiply_by_two(x):
return x * 2
def test_multiply_by_two():
assert multiply_by_two(4) == 7 ### 1
1. 8를 리턴해야 정상이므로 이 부분을 실행하게 되면 AssertionError 가 발생
https://jmkim.tistory.com/20?category=797093 만든 API 테스트 코드를 구현했습니다.
import app
import pytest
import json
@pytest.fixture ## 1
def api():
test_api = app.app ## 2
api=test_api.test_client() ##3
return api
def test_tweet(api): ## 4
#테스트 사용자 생성
new_user = {
"email" : "wjdals0304@gmail.com",
"name" : "최시후",
"password" : "test1234",
"profile" : "hi"
}
resp = api.post(
'/sign-up',
data=json.dumps(new_user),
content_type='application/json'
)
assert resp.status_code == 200
resp_json = json.loads(resp.data.decode('utf-8'))
new_user_id = resp_json['id']
##tweet
resp = api.post(
'/tweet',
data = json.dumps({"tweet": "hello world!","id": new_user_id}),
content_type = 'application/json'
)
assert resp.status_code == 200
## tweet 확인
resp = api.get(f'/timeline/{new_user_id}')
tweets = json.loads(resp.data.decode('utf-8'))
assert resp.status_code == 200
assert tweets == {
'user_id' : 1,
'timeline' : [
{
'user_id' : 1,
'tweet' : 'hello world!'
}
]
}
1. 다른 test 함수에 지정되어 있으면 pytest가 알아서 같은 이름의 함수의 리턴 값을 해당 인자에 넣어 준다.
2. flask api 가 있는 app을 넣어준다.
3. test_client 함수를 호출해서 테스트용 클라이언트를 사용해서 URI 기반으로 원하는 엔드포인트들을
호출할 수 있게 된다. 마치 실제로 HTTP 전송을 하는 듯한 효과를 볼 수 있는 것이다.
( 물론 실제로 네트워크를 통한 HTTP 전송을 하는것은 아니며 코드상에서 실행되는 것)
4. pytest가 자동으로 지정된 인자를 넣어 준다.
Reference
'Web programing > Flask' 카테고리의 다른 글
Flask 시작하기(2) (0) | 2019.05.04 |
---|---|
Flask 시작하기(1) (0) | 2019.05.01 |