[Postman] REST API(HTTP) 호출 컬렉션을 CLI(Command Line Interface)로 실행하는 방법.
2024. 3. 15. 11:41ㆍTool/postman
728x90
728x90
Newman ?
- Postman으로 생성한 API 호출 컬렉션을 CLI(Command Line Interface)에서 실행할 수 있는 Node.js 도구.
Newman 기능 설명.
- Postman 컬렉션 실행: Postman에서 작성한 컬렉션을 커맨드 라인에서 실행할 수 있음.
- 테스트 결과 보고: 컬렉션 실행 후 테스트 결과를 요약하여 보고서 형식으로 출력할 수 있음.
- 환경 변수 및 데이터 파일 지원: 환경 변수 및 데이터 파일을 지원하여, 테스트 데이터를 동적으로 변경하고 다양한 환경에서 테스트를 실행할 수 있음.
- CI/CD 적용: CI/CD 도구(Jenkins, Travis CI, CircleCI, GitLab ...)와 통합하여 테스트를 자동으로 실행하고 결과를 보고할 수 있음.
Postman에서 API 호출 컬렉션을 생성 및 호출하는 방법은 링크를 참고.
Export Collection.
추출된 *.postman_collection.json 파일을 확인.
- Collection에서 생성한 내용(request, test script, variable …)이 추출된 것을 확인할 수 있음.
{
"info": {
"_postman_id": "8fa003b1-9830-408b-8e18-6873aa288b57",
"name": "jmapper",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
"_exporter_id": "14101271"
},
"item": [
{
"name": "httpPost_stream",
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "N000N001aaatmaxpgwabcdefghij",
"options": {
"raw": {
"language": "text"
}
}
},
"url": {
"raw": "http://{{url}}:{{port}}{{path_stream}}",
"protocol": "http",
"host": [
"{{url}}"
],
"port": "{{port}}{{path_stream}}"
}
},
"response": []
},
{
"name": "httpPost_json",
"request": {
"method": "POST",
"header": [
{
"key": "name",
"value": "parkgunwoo",
"type": "text"
},
{
"key": "company",
"value": "tmax",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\r\n \"kind_code\":\"N000\",\r\n \"tx_code\":\"N001\",\r\n \"date\":\"20210528\",\r\n \"uid\":\"0123456789\",\r\n \"body_data\":\"anylink\"\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "http://{{url}}:{{port}}{{path_json}}",
"protocol": "http",
"host": [
"{{url}}"
],
"port": "{{port}}{{path_json}}"
}
},
"response": []
},
{
"name": "httpPost_xml",
"request": {
"method": "POST",
"header": [
{
"key": "X-ANYLINK-3.0-APPLCODE",
"value": "9292",
"type": "text",
"disabled": true
},
{
"key": "X-ANYLINK-3.0-ETC",
"value": "",
"type": "text",
"disabled": true
},
{
"key": "X-ANYLINK-3.0-ETC2",
"value": "",
"type": "text",
"disabled": true
},
{
"key": "X-ANYLINK-3.0-FLAG",
"value": "",
"type": "text",
"disabled": true
},
{
"key": "X-ANYLINK-3.0-INSTCODE",
"value": "G004",
"type": "text",
"disabled": true
},
{
"key": "X-ANYLINK-3.0-LOGID",
"value": "",
"type": "text",
"disabled": true
},
{
"key": "X-ANYLINK-3.0-MAGIC",
"value": "",
"type": "text",
"disabled": true
},
{
"key": "X-ANYLINK-3.0-MSGTYPE",
"value": "101",
"type": "text",
"disabled": true
},
{
"key": "X-ANYLINK-3.0-MSGUID",
"value": "101",
"type": "text",
"disabled": true
},
{
"key": "X-ANYLINK-3.0-REQTYPE",
"value": "11",
"type": "text",
"disabled": true
},
{
"key": "X-ANYLINK-3.0-RESVD",
"value": "",
"type": "text",
"disabled": true
},
{
"key": "X-ANYLINK-3.0-SEQNO",
"value": "",
"type": "text",
"disabled": true
},
{
"key": "X-ANYLINK-3.0-KINDCODE",
"value": "N000",
"type": "text",
"disabled": true
},
{
"key": "X-ANYLINK-3.0-TXCODE",
"value": "N001",
"type": "text",
"disabled": true
},
{
"key": "X-ANYLINK-3.0-MAGIC",
"value": "5555",
"type": "text",
"disabled": true
}
],
"body": {
"mode": "raw",
"raw": "<Bancassurance>\r\n<HeaderArea>\r\n<HDR_AGT_CODE>12;;;;;</HDR_AGT_CODE>\r\n<HDR_BAK_CLS>0-1</HDR_BAK_CLS>\r\n<HDR_BAK_DOCSEQ>dd</HDR_BAK_DOCSEQ>\r\n<HDR_BAK_EXT>ds</HDR_BAK_EXT>\r\n<HDR_BAK_ID>26</HDR_BAK_ID>\r\n<HDR_BIZ_CODE>N001</HDR_BIZ_CODE>\r\n<HDR_CUR_DOC>asd</HDR_CUR_DOC>\r\n<HDR_DAT_GBN>T</HDR_DAT_GBN>\r\n<HDR_DOC_CODE>N000</HDR_DOC_CODE>\r\n<HDR_DOC_LEN>10</HDR_DOC_LEN>\r\n<HDR_DOC_STATUS>000</HDR_DOC_STATUS>\r\n<HDR_INS_DOCSEQ>ds</HDR_INS_DOCSEQ>\r\n<HDR_INS_EXT>z1</HDR_INS_EXT>\r\n<HDR_INS_ID>1</HDR_INS_ID>\r\n<HDR_RET_CODE>001</HDR_RET_CODE>\r\n<HDR_SND_DATE>20050317</HDR_SND_DATE>\r\n<HDR_SND_TIME>23</HDR_SND_TIME>\r\n<HDR_SYS_ID>11</HDR_SYS_ID>\r\n<HDR_TOT_DOC>23</HDR_TOT_DOC>\r\n<HDR_TRA_FLAG>1</HDR_TRA_FLAG>\r\n<HDR_TRX_ID>123</HDR_TRX_ID>\r\n<HDR_TRX_DATE>123</HDR_TRX_DATE>\r\n</HeaderArea>\r\n<BusinessArea>\r\n<LK_ENTY_NO>123</LK_ENTY_NO>\r\n<LK_PROD_CD>22</LK_PROD_CD>\r\n<LK_INPRD_REAL>22</LK_INPRD_REAL>\r\n<LK_INPRD_TP>test2</LK_INPRD_TP>\r\n<LK_INPRD_TP_VAL>11</LK_INPRD_TP_VAL>\r\n<LK_INSU_GBN>123</LK_INSU_GBN>\r\n<LK_PLCY_BANK>31</LK_PLCY_BANK>\r\n<LK_PROD_CD>76</LK_PROD_CD>\r\n</BusinessArea>\r\n</Bancassurance>",
"options": {
"raw": {
"language": "xml"
}
}
},
"url": {
"raw": "http://{{url}}:{{port}}{{path_xml}}",
"protocol": "http",
"host": [
"{{url}}"
],
"port": "{{port}}{{path_xml}}"
}
},
"response": []
},
{
"name": "httpPost_name",
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "kind_code=111&tx_code=111&body_data=111",
"options": {
"raw": {
"language": "text"
}
}
},
"url": {
"raw": "http://{{url}}:{{port}}{{path_name}}",
"protocol": "http",
"host": [
"{{url}}"
],
"port": "{{port}}{{path_name}}"
}
},
"response": []
},
{
"name": "httpPost_del",
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "KINDTD212,A,B,1,a,b,c,C,D,2,a,b,c,d,e,f",
"options": {
"raw": {
"language": "text"
}
}
},
"url": {
"raw": "http://{{url}}:{{port}}{{path_del}}",
"protocol": "http",
"host": [
"{{url}}"
],
"port": "{{port}}{{path_del}}"
}
},
"response": []
}
],
"event": [
{
"listen": "prerequest",
"script": {
"type": "text/javascript",
"exec": [
""
]
}
},
{
"listen": "test",
"script": {
"type": "text/javascript",
"exec": [
" // 상태 코드 확인",
" pm.test('상태 코드 확인', function () {",
" pm.response.to.have.status(200);",
" });",
"",
" // 응답 내용 확인",
" pm.test('응답 내용 확인', function () {",
" pm.expect(pm.response.text()).to.not.be.empty;",
" });",
"",
" // 응답 시간 확인",
" pm.test('응답 시간 확인', function () {",
" pm.expect(pm.response.responseTime).to.be.below(200);",
" });"
]
}
}
]
}
Export Environment.
추출된 *.postman_environment.json 파일을 확인.
{
"id": "03d4bf26-427f-4aa8-a28d-2f87880125f6",
"name": "jmapper",
"values": [
{
"key": "url",
"value": "192.168.115.30",
"type": "default",
"enabled": true
},
{
"key": "port",
"value": "9299",
"type": "default",
"enabled": true
},
{
"key": "path_xml",
"value": "/servlet/xml",
"type": "default",
"enabled": true
},
{
"key": "path_json",
"value": "/servlet/json",
"type": "default",
"enabled": true
},
{
"key": "path_stream",
"value": "/servlet/stream",
"type": "default",
"enabled": true
},
{
"key": "path_name",
"value": "/servlet/name",
"type": "default",
"enabled": true
},
{
"key": "path_del",
"value": "/servlet/del",
"type": "default",
"enabled": true
}
],
"_postman_variable_scope": "environment",
"_postman_exported_at": "2024-03-25T07:22:10.299Z",
"_postman_exported_using": "Postman/10.24.7"
}
Newman을 설치하는 필자의 서버 정보.
$ hostnamectl
...
Operating System: CentOS Linux 7 (Core)
Kernel: Linux 3.10.0-1160.6.1.el7.x86_64
...
Node.js 설치.
$ curl -sL https://rpm.nodesource.com/setup_16.x | sudo bash -
$ sudo yum install -y nodejs
Newman 설치.
$ sudo npm install -g newman
$ newman --version
6.1.2
Postman으로 생성한 API 호출 컬렉션을 커맨드 라인(Command Line Interface)에서 실행.(Newman 실행.)
$ newman run {dir}/{*_collection.json} -e {*_environment.json}
$ newman run ./jmapper.postman_collection.json -e jmapper.postman_environment.json
API 호출 컬렉션을 CLI(Command Line Interface)로 실행한 결과.
- 반복 횟수, 요청 수, 테스트 스크립트 수, 실행 시간, 데이터 수신량, 평균 응답 시간 ... 을 확인할 수 있음.
--reporters …와 --reporter-junit-export … 옵션을 추가하여, Newman 실행.
$ newman run ./jmapper.postman_collection.json -e jmapper.postman_environment.json --reporters cli,junit --reporter-junit-export report.xml
생성된 junit(xml) 형식의 테스트 수행 결과서(report.xml)를 확인.
$ cat report.xml
<?xml version="1.0" encoding="UTF-8"?>
<testsuites name="jmapper" tests="5" time="0.536">
<testsuite name="httpPost_stream" id="202d703b-e01c-46ba-b350-db12cac61d20" timestamp="2024-03-27T10:49:43.161Z" tests="3" failures="0" errors="0" time="0.125">
<testcase name="상태 코드 확인" time="0.125" classname="Jmapper"/>
<testcase name="응답 내용 확인" time="0.125" classname="Jmapper"/>
<testcase name="응답 시간 확인" time="0.125" classname="Jmapper"/>
</testsuite>
<testsuite name="httpPost_json" id="82e437fe-2497-4105-a994-46a732f38042" timestamp="2024-03-27T10:49:43.161Z" tests="3" failures="0" errors="0" time="0.086">
<testcase name="상태 코드 확인" time="0.086" classname="Jmapper"/>
<testcase name="응답 내용 확인" time="0.086" classname="Jmapper"/>
<testcase name="응답 시간 확인" time="0.086" classname="Jmapper"/>
</testsuite>
<testsuite name="httpPost_xml" id="e7219a34-bbda-4b5e-b03e-e929e4f59011" timestamp="2024-03-27T10:49:43.161Z" tests="3" failures="0" errors="0" time="0.174">
<testcase name="상태 코드 확인" time="0.174" classname="Jmapper"/>
<testcase name="응답 내용 확인" time="0.174" classname="Jmapper"/>
<testcase name="응답 시간 확인" time="0.174" classname="Jmapper"/>
</testsuite>
<testsuite name="httpPost_name" id="717e38a9-13dc-4b83-a301-fd4fe199167b" timestamp="2024-03-27T10:49:43.161Z" tests="3" failures="0" errors="0" time="0.063">
<testcase name="상태 코드 확인" time="0.063" classname="Jmapper"/>
<testcase name="응답 내용 확인" time="0.063" classname="Jmapper"/>
<testcase name="응답 시간 확인" time="0.063" classname="Jmapper"/>
</testsuite>
<testsuite name="httpPost_del" id="0528d457-7bf4-42b0-b7a3-dcc27d6d424e" timestamp="2024-03-27T10:49:43.161Z" tests="3" failures="0" errors="0" time="0.088">
<testcase name="상태 코드 확인" time="0.088" classname="Jmapper"/>
<testcase name="응답 내용 확인" time="0.088" classname="Jmapper"/>
<testcase name="응답 시간 확인" time="0.088" classname="Jmapper"/>
</testsuite>
</testsuites>
728x90
728x90
'Tool > postman' 카테고리의 다른 글
[Postman] REST API(HTTP) 호출을 그룹화 및 자동화하는 방법. (0) | 2024.03.12 |
---|