postman api test and integrating with jenkins
2022, Oct 18
postman jenkins
Goal
- layer가 다른 service끼리 dependency가 없는 상태에서 client 호출시 API 변경사항에 대한 대응개발을 감지하기 위한 목적으로 작성했습니다.
- 매 스프린트마다 수동으로 API테스트를 진행했었는데, 자동화를 하려고 합니다
- postman으로 작성한 후, jenkins의 job으로 등록해서 주기적으로 체크하려고 합니다.
Step
[postman]
- collection를 생성하고 단위테스트가 필요한 API를 작성합니다.
- 의존관계가 있는 API는 순서대로 작성해야 합니다.
- 작성이 완료되면 collection에서 export를 하고 파일을 다운받습니다. (url형식으로 실행시킬 수 있지만, 저는 내부망에서 실행해야하기 때문에 파일로 받았습니다.)
[Jenkins]
1. install nodejs, newman
- jenkins를 설치했으면, jenkins에 nodejs를 설치합니다.
- Jenkins 관리 > Plugin Manager로 이동해서 nodejs로 검색하면 설치할 수 있는데요. 이 기능을 사용하면 latest로 설치되기 때문에 gcc오류가 날 수 있습니다.
그래서 저는 stable버전으로 설치하기 위해 여기서 hpi파일을 다운받습니다.
https://archives.jenkins-ci.org/plugins/nodejs/latest/
[Jenkins 관리 > Plugin Manager > 고급 탭]에서 Deploy Plugin에 위에서 다운받은 파일을 불러옵니다.
- nodejs설치가 되었으면, nodejs로 newman을 설치합니다.
- [Jenkins관리 > Global Tool Configuration]으로 이동하면 Nodejs가 있습니다.
- Add NodeJS 를 눌러서 상세 설정합니다.
저는 16.18.0 버전이 필요해서 버전을 16.18.0으로 하고 newman을 설치하는 것으로 했습니다
2. create new item
- Freestyle project로 item을 하나 생성합니다. (pipeline로 해도 됩니다)
- 위에서 다운받은 파일을 생성한 프로젝트의 workspace하위에 위치시킵니다.
저는 test이름으로 생성해서 workspace가 이렇게 되었습니다.
/var/lib/jenkins/workspace/test
빌드 환경에서 [Provide Node & npm bin/ folder to PATH]을 체크하고 위에서 설치한 nodejs를 선택합니다.
- Build Steps에서 [Execute shell]을 선택합니다.
command에 newman으로 postman을 통해 작성한 스크립트를 실행시키도록 작성합니다
newman run crema-business.postman_collection.json --reporters cli,junit --reporter-junit-export report.xml
3. generate a test report file
xml로 report가 생성되게 하면 실패 성공 여부를 ui를 통해 확인할 수 있는데요. 아래처럼 에러가 날 경우
ERROR: Step ‘Publish JUnit test result report’ failed: No test report files were found. Configuration error? Finished: FAILURE
- command의 오타 확인하고
- workspace의 위치를 다시 파악합니다. jenkins홈 위치가 아니라면, Configuration > General > Advance Option 에서 use custom workspace를 체크하고 위치를 지정해줍니다.
- 그리고 Configuration > 빌드 후 조치에서 [Publish JUnit test result report]를 선택하고 위에서 command로 작성한 xml파일명을 입력합니다.
- 빌드 실행 후 생성된 파일을 확인합니다.
view test result
- test result trend를 표시하게 하려면, 성공 결과가 있어야 합니다.
Reference
[DevOps] Jenkins/Postman/Newman으로 API 테스트 자동화하기
How to Generate Newman Reports on Jenkins?
error
Running as SYSTEM
Building in workspace /var/lib/jenkins/workspace/test
Unpacking https://nodejs.org/dist/v18.11.0/node-v18.11.0-linux-x64.tar.gz to /var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/nodejs_18.11.0 on Jenkins
$ /var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/nodejs_18.11.0/bin/npm install -g newman
node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by node)
node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by node)
[test] $ /bin/sh -xe /tmp/jenkins17489636526245755837.sh
/tmp/jenkins17489636526245755837.sh: line 2: unexpected EOF while looking for matching `''
Build step 'Execute shell' marked build as failure
Finished: FAILURE
- 원인은 nodejs 18버전 때문인 것 같다. 가장 latest를 설치하지 말고, NodeJS 16 LTS Version을 설치하라고 함