Backend/Flask

Flask Test - 테스트 코드를 사용한 기능 확인 테스트

yxemsy 2022. 3. 1. 22:29

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이므로 통과