miniter API 를 Unit test 하기 위해 새로 test_endpoints.py 파일을 생성한다. 일단 파일만 만들고 테스트를 할 DB를 만든다.
unit test의 테스트 DB에 접속할 수 있도록 config.py 파일을 수정한다.
db = {
'user' : 'root',
'password' : 'qwer123123!',
'host' : 'localhost',
'port' : 3306,
'database' : 'miniter'
}
DB_URL = f"mysql+mysqlconnector://{db['user']}:{db['password']}@{db['host']}:{db['port']}/{db['database']}?charset=utf8"
test_db = {
'user' : 'test',
'password' : 'test1234',
'host' : 'localhost',
'port' : 3306,
'database' : 'test_db'
}
test_config = {
'DB_URL' : f"mysql+mysqlconnector://{test_db['user']}:{test_db['password']}@{test_db['host']}:{test_db['port']}/{test_db['database']}?charset=utf8",
}
그 후 다시 test_endpoints.py 로 되돌아와서 코드를 입력하여 테스트 설정들을 읽어 들일 수 있도록 한다.
import config # 1
from sqlalchemy import create_engine, text
database = create_engine(config.test_config['DB_URL'], encoding= 'utf-8' max_overflow = 0) # 2
# 1 : config 파일을 import 하여 설정을 읽어들인다.
# 2 : 테스트 설정을 읽어들여 test DB에 접속한다.
그 다음 가장 간단한 ping 엔드포인트를 테스트 하기 위해서 test_endpoints.py 파일에 코드를 계속 작성한다.
import pytest
import bcrypt
import json
import config
from app import create_app # 1
from sqlalchemy import create_engine, test
database = create_engine(config.test_config['DB_URL'], encoding = 'utf-8', max_overflow = 0)
@pytest.fixture # 2
def api(): # 3
app = create_app(config.test_config) # 4
app.config['TEST'] = True # 5
api = app.test_client() # 6
return api # 7
# 1 : 소스코드 파일인 app.py 에서 create_app 함수를 import 한다.
# 2 : pytest.fixture decorator 가 적용된 함수와 같은 이름의 인자가 다른 test 함수에 지정되어 있으면 pytest가 알아서 같은 이름의 함수의 리턴 값을 해당 인자에 넣어 준다.
# 3 : fixture 함수 이름, 여기서 동일한 이름의 인자를 해당 함수의 리턴 값으로 적용시켜 준다. ping 를 입력하면 ping 엔드포인트의 리턴 값을 적용시켜 준다.
# 4 : create_app 함수를 사용해서 miniter API 애플리케이션을 생성한다. test_config을 create_app 함수에 인자로 넘겨 DB 등의 설정이 모두 테스트 설정이 적용되도록 한다.
# 5 : TEST 옵션을 true로 설정하여 Flask 에러 발생시 HTTP 요청 오류 부분은 출력되지 않게 한다.
# 6 : test_client 함수를 호출해서 테스트용 클라이언트를 생성한다. 이를 이용하여 URI 기반으로 원하는 엔드포인트를 호출 할 수 있다.
# 7 : 위에서 호출한 test client를 return 해 준다.
'Backend > Flask 개발일지' 카테고리의 다른 글
20. miniter API Unit test 2 (0) | 2022.02.09 |
---|---|
18. 단위 테스트 (Unit test) 와 여러 테스트들 (0) | 2022.02.02 |
14. 인증 (Authentication)절차와 비밀번호 암호화 (0) | 2022.01.23 |
13. SQLAlchemy를 이용하여 API와 DB 연결하기 (0) | 2022.01.19 |
12. vscode 에 MySQL 연동하기 (0) | 2022.01.17 |