Python을 활용해 GraphQL API 테스트하기
API를 사용하여 보다 효율적으로 서비스를 검증하는 방법

앱 내 기능을 보다 효율적으로 테스트할 수 있는 테스팅 도구 중 GUI 테스트 자동화의 경우, 화면 위에 그려지는 Object를 인식하고 특정 동작을 수행하면서 동작 여부를 검증하는 방식입니다.
보통 GUI 테스트 자동화로 로그인 기능을 테스트한다면 아래와 같은 순서로 테스트 코드를 수행하여 로그인 동작 여부를 검증하게 됩니다. 검증 순서를 보면 알 수 있지만 로그인을 시도하기까지 여러 선행 작업들이 존재하게 됩니다.

1. 앱 최초 실행
2. 마이페이지 진입
3. 가입된 계정 정보 입력
4. 로그인 버튼 탭
5. 로그인 성공 여부 확인
이와 같이 특정 기능까지 도달하기 위해 여러 화면을 이동하거나 뎁스가 깊어지는 경우처럼 선행 되어야 하는 작업들이 늘어나면서 테스트의 수행 시간이 증가하기 때문에 선행되는 작업이 검증에 반드시 필요한 부분이 아니라면 API를 활용하여 테스트 하는 것도 효율적인 검증 방법이 될 수 있습니다.
GraphQL이란?
GraphQL은 REST API의 Over-fetching과 무분별한 End-Point가 늘어나는것을 보완하기 위해서 Facebook에서 개발한 Query Language 입니다. 가장 큰 장점으로 하나의 End-point에서 직접 쿼리를 통해 원하는 데이터를 반환 받을 수 있기 때문에 Over-fetching, Under-fetching 해결이 가능합니다.
현재 재직중인 회사에서 GraphQL을 사용하고 있는데, 비개발자인 제가 처음 접했을 때 매우 생소했던 기억이 납니다. 다행히 Query Language다 보니 query, mutation만 쓰는 저에겐 생각보다 어렵지 않게 사용할 수 있었습니다.
API 테스트하기
API를 태스트하기 위해 python의 http 요청을 보내는 모듈인 requests를 사용했습니다. script_query.py 파일에는 테스트에 필요한 쿼리를 변수에 할당하여 작성했고, script_variables.py 파일에는 쿼리에 필요한 인자를 json으로 작성해 변수에 할당해두었습니다.

script_query, script_variables 파일을 수행할 테스트 스크립트 파일에 import하고, 세션 데이터를 요청하는 rs 변수를 생성해줍니다.
테스트 시 사용할 pytest 프레임워크는 이름의 prefix가 ‘test’인 함수만 인식하기 때문에 테스트할 함수명에 test를 입력해주어야 테스트가 가능합니다.
test_user_sign_up
서버에 실제로 가입된 이메일 주소와 가입 시 요청한 이메일 주소를 비교하여 서로 동일한 경우 테스트 통과
test_user_login
현재 세션에 로그인 성공 여부 데이터가 True인 경우 테스트 통과
test_user_info
현재 세션에 계정 정보 중 이름 데이터가 ‘회원’ 워딩과 동일한 경우 테스트 통과
test_user_delete
계정 삭제 성공 여부 데이터가 True인 경우 테스트 통과

작성된 스크립트를 수행하면 회원가입, 로그인, 회원탈퇴까지 단 2초만에 테스트가 완료된 모습입니다 😃
마치며
API 테스트처럼 검증을 도와주는 다양한 도구들이 있습니다. 상황에 맞게 적재적소에 잘 사용한다면 보다 효율적인 검증이 가능해집니다.
메뉴얼 테스트, GUI 테스트 자동화, API 테스트 자동화를 분배하여 프로젝트를 검증하거나 배포 전 최종 검증 단계에서 핵심 기능들에 대한 API 테스트 자동화를 수행하는것도 좋은 방법이 될 수 있습니다.