1) Flask Test
테스트 코드는 내가 작성한 기능들이 의도대로 잘 수행하는지 기능 확인을 위한 테스트를 위해 작성한다.
- 테스트의 장점
(1) 테스트 환경 세팅 자동화
특수한 상황에 맞는 파라미터도 사전에 정의할 수 있기 때문에, 매번 파라미터 값을 수동으로 바꿔가면서 테스트하지 않아도 된다.
(2) 통합 테스트 시간을 줄임
통합 테스트에는 테스트코드로 검증하기 어려운 부분에만 집중할 수 있다. (클라이언트 인터페이스 등)
(3) 외부와 의존성 있는 로직을 테스트하기 편리
외부와 통신하는 로직을 Mock으로 처리해두면, 외부에서 발생할 수 있는 여러 환경을 내가 가짜로 구성할 수 있다.
(4) 전체 테스트 자동화
모든 세부 기능을 통합 테스트에서 다 확인하기는 어렵다. 전체 테스트가 자동화되면, 수정된 코드가 다른 기능에 미친 영향을 확인할 수 있다.
- GET 테스팅의 간단한 예제
=== flask ===
# get 요청 메서드 이므로 URL은 /mysum?a=''&b='' 이런식으로 만들어진다.
@app.route('/mysum', methods=['GET'])
def add():
data = request.args # request.args로 데이터를 받아올 수 있다.
num1 = int(data.get("a"))
num2 = int(data.get("b"))
return jsonify(
{'result': num1 + num2 }
)
=== test ===
# 테스트 코드는 함수이름의 앞에 test가 꼭 붙어주어야 함
def test_get():
response = app.test_client().get(
'/mysum?a=10&b=20',
)
# return jsonify의 값들을 받아오는 코드
data = json.loads(
response.get_data()
)
assert response.status_code == 200 # 응답 상태가 성공이면 200으로 pass
assert data['result'] == 200 # result값이 30인데, 200이랑 같지 않으므로 통과 못함
- POST 테스팅의 간단한 예제
=== flask ===
@app.route('/add', methods=['POST']
def add():
data = request.get_json()
return jsonify(
{'sum': data['a'] + data['b']}
)
=== test ===
def test_add():
response = app.test_client().post(
'/add',
# 이 딕셔너리가 request.get_json()으로 받아지는 것
data = json.dumps({'a': 10, 'b': 2}),
content_type = 'application/json', # json 형식으로 보내겠다는 의미
)
# data는 딕셔너리를 그대로 갖고있음
data = json.loads(
response.get_data(as_text=True)
)
assert response.status_code == 200
assert data['sum'] == 12 # 더한 값이 12이므로 통과
'Backend > Flask' 카테고리의 다른 글
flask-restful - RESTful API서버를 만드는 라이브러리 (0) | 2022.03.01 |
---|---|
Flask 기초 - REST API (2) (Ajax를 사용한 update, delete) (0) | 2022.02.23 |
Flask 기초 - REST API (1) (create, read) (0) | 2022.02.23 |
Flask 기초 I - SQL Alchemy (0) | 2022.02.16 |
Flask 기초 I - RDB와 Flask 상호작용, 간단한 게시판, Flask JWT (0) | 2022.02.11 |