API 테스트하고 싶을때 사용할 수 있는 여러가지 도구들이 있지만, 호출할 API 목록을 저장하거나 환경별로 나눠서 호출하거나 여러번 호출해야 할 때 저는 주로 포스트맨을 사용합니다.
포스트맨을 단순히 API 호출 정도로만 사용하고 있는 분들이 많은 것 같아 제가 포스트맨에서 즐겨 사용하는 팁을 공유하려고 합니다. 도움이 되셨으면 좋겠습니다! 더 좋은 팁이 있다면 댓글로 같이 부탁드려요~
Collections, HTTP Request
Collection 은 요청들을 그룹핑할 수 있게 해줍니다. 용도에 따라 관련 Request 를 모아둘 수 있습니다.
포스트맨에서 workspace 생성시 도움을 줄 수 있는 템플릿을 제공해주는데 해당 템플릿을 이용할 수도 있습니다.
여기서는 포스트맨에서 제공하는 URL 을 사용하려고 합니다. 실제로는 호출하고자 하는 URL 을 사용하면 되겠죠!
예를 들어 우리에게 아래 3개의 API가 있고, 각 API 의 역할은 다음과 같습니다.
- 호출 URL: https://postman-integration-testing.glitch.me
- POST
/register
: 등록 후 토큰을 받는 API - GET
/my-name
: 토큰을 통해 등록된 이름을 받는 API - POST
/unregister
: 토큰을 삭제하는 API
Environment
이렇게 구성되어있을 때 포스트맨에서 해당 API 를 테스트하기 위해 일반적으로 이렇게 호출할 것 같습니다.
1회용으로 사용하는 API 라면 저도 임시로 간단히 만들어서 사용하지만, LOCAL, DEV, STAGE 등 환경별로 호출될 수 있다면 environmet 를 생성하여 관리합니다.
우상단에 있는 No environment > Create environment 으로 새로운 environment 를 만들 수 있습니다.
또는 왼쪽 메뉴에 Environments > New 를 통해 생성할 수 있습니다.
개발환경이라고 가정하고 DEV 라고 environment 를 만들어보겠습니다.
그리고 Variables 에 사용할 변수명, Initial value, Current value 에는 사용하려는 값을 넣으면 됩니다.
저는 호출하는 URL 이 환경마다 다르다는 가정으로 해당 url 을 환경변수에 세팅하려고 합니다.
간단히 url 이라고 해도 되지만 어떤 url 인지 명확히 하기 위해 아래와 같이 세팅했습니다.
데이터를 입력하면 Save 버튼을 눌러 꼭 저장해주셔야합니다.
- Variables: integration-testing-url
- Initial value, Current value : https://postman-integration-testing.glitch.me
다시 Collection 에 request 로 돌아와서 우리가 지정한 변수를 사용하기 위해서는 {{Variables(변수명)}} 의 형식으로 사용할 수 있습니다.
{{ 만 입력해도 아래 변수가 나오는 것을 볼 수 있습니다.
E 로 표시된 건 Environment 환경변수에 지정한 변수라는 것을 나타내고, 해당 변수의 값도 같이 확인할 수 있습니다.
같이 목록에 나오는 $ 로 시작하는 변수는 포스트맨에서 제공하는 변수로, 설명을 보면 어떤 값을 제공하는지 알 수 있습니다. 필요에 따라 사용할 수 있습니다.
지정한 URL 변수를 입력하고, 우상단 환경에 실행하고자 하는 환경이 잘 선택되어있는지 확인하고, 좌하단에 있는 Console 버튼을 클릭 후 Send 버튼을 누르면 우리가 Environment 변수에 지정한 URL 로 API 가 잘 호출됨을 알 수 있습니다.
이후 stage, local 환경이 추가된다면 environment 를 복사하여 value 만 수정하여 사용할 수 있습니다.
Scripts
다음 API 인 token 으로 name 을 가져오는 GET /my-name API 를 호출하려고 합니다.
my-name 에는 register API 응답으로 받은 토큰이 필요합니다.
register API 응답으로 받은 토큰을 복사해서 token 조회시 넣어주어야 합니다.
만약 /register , /my-name 호출하는 API 를 순차적으로 굉장히 자주 호출하게 되는 상황이라면 매번 token 을 붙여넣어서 호출하기에는 불편함이 존재합니다.
/register 응답으로 나온 token 값도 변수에 저장해서 사용할 수 없을까? 라는 생각이 드는데 Scripts 기능을 이용해서 사용할 수 있습니다.
우리는 /register 응답으로 나온 값을 저장하고 싶은것이니 Register Request 로 가서 Scripts 를 엽니다. Scripts 에는 Pre-request 와 Post-response 가 존재합니다.
- Pre-request : API 실행 전 동작할 스크립트
- Post-response : API 실행 후 동작할 스크립트
자바 스크립트와 문법이 같고, postman 에서 제공하는 기능을 통해 원하는 데이터를 가지고 올 수 있습니다.
포스트맨에서 제공하는 기능을 사용하기 위해서는 pm. 키워드로 시작하면 됩니다.
우리는 API response 의 값을 가지고 오고 싶은 것이니 Post-response 에서 원하는 내용을 입력하면 됩니다.
현재 API 결과가 json 형식이니 json 으로 가져오기 위해서는 pm.response.json() 입력해줍니다. console.log 를 활용해서 console 에 결과를 출력해볼 수도 있습니다.
pm.response.json() 을 res 변수에 저장 후, res 에서 token 이라는 key 의 값을 가져오려면 res.token 을 활용해서 가지고 올 수 있습니다.
response 에서 값을 가지고 왔다면 변수에 저장하면 됩니다.
저는 API 를 주로 환경별로 호출하기 때문에 API 결과로 나온 데이터는 환경변수에 저장하는 편입니다.
포스트맨 envirionment 환경에 저장하기 위해서는 아래와 같이 문법을 사용하면 됩니다.
- pm.environment.set('변수명', 값);
만약 데이터를 가지고 오려면 비슷하게 사용할 수 있겠죠
- pm.enviroment.get('변수명);
pm.environment.set('token', token); 을 넣어주고 send 버튼을 누르게 되면,
environment 에서 우리가 지정한 변수가 잘 들어감을 확인할 수 있습니다.
environment 변수는 우측 상단에 있는 버튼을 눌러 확인 할 수 있습니다.
그럼 이제 my-name 에서 환경변수에 지정한 token 변수를 활용해서 조회할 수 있습니다.
이렇게 Script 를 활용하여 변수를 지정하거나 가져올 수 있습니다.
저는 Pre-request Scripts 에는 대기할 시간을 지정한다든가, 랜덤으로 값을 넣어아할 경우 랜덤값을 정하게 하는 등의 로직을 넣을 때가 많습니다.
Post-response Scripts 에서는 위와 비슷하게 response 결과를 변수에 저장하고, API 결과가 200 응답으로 내려왔는지 테스트시 사용하게 됩니다.
API 결과가 200 응답으로 내려왔는지는 다음 코드를 사용할 수 있습니다. 저는 코드 작성 전 Postbot 이나 미리 제공해주는 템플릿을 활용합니다.
< 화살표 버튼을 누르게 되면 포스트맨에서 제공하는 Snippets 을 확인할 수 있습니다. 그 중 'Status code: Code is 200' 을 누르게 되면 아래와 같이 status 가 200 인지에 대한 테스트 코드를 넣어줍니다.
해당 코드 삽입 후 실행하면 Test Results 를 확인 할 수 있습니다.
/unregister API 까지 추가해봅시다.
request body 에도 동일하게 변수 사용가능합니다.
Run Collection
테스트를 위해 위 API를 반복적으로 호출하는 상황이라고 가정해봅시다. 그럴 때는 Run Collection 을 활용하면 됩니다.
collection 옆에 있는 ... 을 클릭 후 Run collection 을 클릭합니다.
Run collection 클릭시 다음과 같이 화면이 나옵니다.
- 어떤 API 를 호출할건지 Select 할 수 있고,
- iterations 를 통해 몇 번 반복할지 선택할 수 있습니다.
- delay 를 통해 api 간 시간차를 줄 수 있습니다.
- data file 을 통해 우리가 지정한 변수명을 그대로 csv 파일로 넣어주면 파일에 들어있는 값 만큼 반복적으로 api 를 호출해줍니다.
- Persiste responses for a session 을 선택하면 api 의 request , response 를 호출 이후에도 볼 수 있고
- Turn off logs during run 을 사용하면 api 호출하는 동안 log 기록을 끌 수 있습니다. 많은 api 를 호출할때는 console 찍힐 때 딜레이도 심하고 데이터 확인 어려우니 많은 데이터를 호출시에는 주로 끄고 사용합니다.
우선 iterations 를 3으로 두고 3번 실행시켜 봅시다.
3번 잘 호출됨을 확인할 수 있습니다.
현재 Get name 에만 초록불이 들어와있는데 다른 API 도 API 결과를 알 기 위해서는 아까 위에서 추가한 status 확인 등 결과를 성공이라고 표시해줄 수 있는 무언가가 필요합니다.
해당 Collection 에 있는 API 는 모두 status 200 으로 내려오면 테스트 성공이라고 표시하고 싶습니다. 그러면 Collection Post-response script 에 테스트 코드르 넣으면 해당 Collection 안에 있는 API 는 모두 같은 테스트를 실행하게 됩니다.
1. Get name > Scripts > Post-response 에 지정한 status 200 테스트 코드를 잘라내기합니다.
2. Collection > Edit 에 들어가 Scripts > Post-response 에 붙여넣어줍니다.
3. 저장해줍니다.
다시 Run Collection 실행해서 확인해봅시다.
테스트코드 추가를 통해 모든 API 가 테스트의 성공했는지 알 수 있습니다.
Run Collection 의 기능은 유용해서 저는 Run Collection 에 있는 모든 기능을 사용하고 있습니다.
다만 사용 제한이 있어서 무료 버전에서 어느 정도 사용하다 보면 유료 플랜을 추천해주고, 광고나 30초 정도 대기해야 Run Collection 기능을 사용할 수 있습니다.
유료 플랜은 너무 비싸서.. 저는 무료로 사용하고 있지만, 많은 호출 테스트를 하게 된다면 유료 플랜을 고려해볼 수도 있을 것 같습니다.
'개발~' 카테고리의 다른 글
자주 사용하는 카프카 명령어 (0) | 2021.11.04 |
---|---|
Go tour (0) | 2021.08.09 |
IntelliJ에서 자주 쓰는 Git 명령어(feat. JIRA) (0) | 2021.05.24 |
vi 편집기 입력 에러 (1) | 2020.05.18 |
Linux alias 설정하기 (0) | 2020.03.20 |