코알못

[Jenkins] 젠킨스 배포 자동화 (with. newman) 본문

ETC

[Jenkins] 젠킨스 배포 자동화 (with. newman)

코린이s 2021. 4. 18. 14:14
728x90

 

이전 포스팅에서는 JenKins를 통해 배포 자동화(co-de.tistory.com/17) 하는 방법을 배웠습니다.

이번 시간에서는 배포 후에 필수로 해야하는 테스트까지 자동화하여 배포 시간을 단축하는 방법을 다뤄보겠습니다.

그전에 다룰 서비스에 대해 간단하게 설명 하면 아래와 같습니다.

  • NewMan : postman 에서 만든 테스트 케이스를 CLI 상에서 실행 시킬수 있도록 하는 서비스
  • PostMan : 테스트를 쉽게 할 수 있도록 도와주는 서비스

일단 포스트맨을 통해 테스트 케이스 collection 을 작성합니다.

[잠깐!] 포스트 맨이 설치 되어 있지 않다면 설치 해주세요

:: www.postman.com/downloads/

- Postman 으로 collection 을 만들고, 테스트 케이스를 만든다. (참고로 해당 컬렉션 단위로 테스트를 진행하게 된다.)

- 저자는 RAN-A 호출 결과를 RAN-B 호출 파라미터로 사용할 예정으로 아래와 같이 환경 설정을 이용하면 쉽게 셋팅이 가능합니다.

1. 환경 설정에 필요한 설정을 넣는다. (key 는 동적으로 사용할 파라미터라 빈값으로 둔다 = RAN-A 호출 결과)

2. 환경설정을 사용하여 RAN-A 의 테스트 케이스를 작성한다.

- tests 안에 테스트 스크립트는 jenkins 에서 테스트 실패, 성공여부를 판단하는 요소가 된다.

- 테스트 스크립트 사용 방법은 링크를 참고한다. (learning.postman.com/docs/writing-scripts/test-scripts/)

// test script
// status 코드가 200인가?
pm.test("Status code is 200 - OK",function(){ pm.response.to.have.status(200); });

var data = pm.response.text(); // 결과를 data에 저장한다.
if (data != ""){
    pm.environment.set("key", data); // RAN-A 결과를 환경 key에 저장한다. (나중에 key로 불러올 수 있다.)
}else{
    console.log("값이 없습니다.");
}

3. RAN-A 에서 리턴한 key 를 가져와서 RAN-B 모듈 파라미터로 사용하여 호출한다.

4. jenkins 에서 B 모듈 성공 실패를 판단할 테스트 스크립트를 작성 한다.

// test script
// status 코드가 200인가?
pm.test("Status code is 200 - OK",function(){ pm.response.to.have.status(200); });

// 결과를 로그로 출력
var data = pm.response.text();
console.log("TEST SUCCESS : "+data);

 

포스트맨을 이용해서 테스트 케이스와 환경 설정이 끝났다면 Mac에서 hombrew를 통해 쉽게 NewMan을 설치할 수 있다.

$ brew install newman

설치가 완료 됐으면 NewMan을 통한 테스트를 하기위해 두가지가 필요하다.

  1. Collection 정보
  2. Environment 정보 (테스트 케이스 생성시 사용 안했다면 필요하지 않습니다.)

 

정보는 아래와 같이 2가지 방법으로 얻을 수 있다.

  1. postman 으로 export 하여 json 파일로 내려 받는다.
  2. postman 으로 URL 얻는다 

# 1번 방식

- Collection

 

- Environment

# 2번 방식 

- 참고 문서 : www.npmjs.com/package/newman

 

newman

Command-line companion utility for Postman

www.npmjs.com

- 참고 문서 처럼 Environment 도 URL 로 가능하지만 테스트시 잘 되지 않았다. 무료 버전이라 안되는건지, 이제 지원안하는지는 찾아봐야 한다.

1 Generate an API key
2 Fetch a list of your collections from: https://api.getpostman.com/collections?apikey=$apiKey
3 Get the collection link via it's uid: https://api.getpostman.com/collections/$uid?apikey=$apiKey
4 Obtain the environment URI from: https://api.getpostman.com/environments?apikey=$apiKey

# apiKey 얻는법

1. 아래 URL 접속

- https://app.getpostman.com/dashboard/integrations

2. 아래 그림대로 순서대로 실행

이제 NewMan을 통해 테스트를 해보자!

// 예) 
$ newman run [Collection URL or Json파일] -e [Environment URL or Json파일]

 

테스트 결과 아래와 같이 실행한 test script 결과가 나온다. (2개의 테스트중 0개가 실패함을 나타냄)

NewMan 테스트가 정상적으로 실행 됐다면 Jenkins 와 연동 해본다!

1. 매개변수 지정 

- 저자는 Collection 정보를 얻어올때 동적으로 테스트 케이스를 수정하기 위해 URL 을 사용했으며, 해당 정보를 얻어 오기 위해 필요한 Key, UID 정보를 매개변수로 지정했다.

2. 빌드 후 조치에 NewMan 스크립트 추가

-  아래와 같이 newman 옵션을 주어 실행 결과를 newman.xml 로 리턴하도록 한다.

# 옵션 설명

  • -e : Environment 설정
  • --reporters : 결과를 리턴하는 방식 지정 (저자는 2개 모두 보고 싶었기에 2개를 쉼표로 구분)
    • junit : xml 파일로 리턴
      • junit 으로 리턴시 --reporter-junit-export <path> 옵션이 추가 필요로 하며 <path> 에 파일명을 적어주면 된다.(경로 포함 가능)
    • cli : cli로 리턴
    • json : json 파일로 리턴
      • json 으로 리턴시 --reporter-json-export <path> 옵션이 추가 필요로 하며 <path> 에 파일명을 적어주면 된다.(경로 포함 가능)
// URL 사용시
$ newman run https://api.getpostman.com/collections/${COLLECTION_UID}?apikey=${POSTMAN_API_KEY} -e https://api.getpostman.com/environments/${ENVIRONMENT_UID}?apikey=${POSTMAN_API_KEY} --reporters cli,junit --reporter-junit-export "newman.xml"

// JSON FILE 사용시
newman run /Users/hongyoolee/script/postman/Multi-Module.postman_collection.json -e /Users/hongyoolee/script/postman/postman_environment.json --reporters cli,junit --reporter-junit-export "newman.xml"

3. 빌드 후 조치에 결과를 읽어서 jenkins 에서 빌드 상태에 대한 성공 실패를 판단하는 설정을 해준다. (위에서 newman.xml 로 파일을 리턴하도록 했으니 아래와 같이 적는다)

 # 테스트 

- Bulid 를 시작한다.

- 아래 실행바를 클릭하여 로그를 확인한다.

- 로그에 NewMan 테스트 했던 결과와 동일하게 로그가 나와 정상 실행 됐음을 확인 할 수 있다.

- 테스트 결과 상세 확인

- 2개의 테스트가 실행 됐으며, 모두 정상적으로 Pass 됐다.

만약 실패하면 어떻게 될까? 

RAN-B 테스트 스크립트를 추가해서 일부러 실패하도록 한다.

// RAN-B 테스트 스크립트에 아래와 같이 status 코드가 500일 경우에만 성공인 테스트를 추가 한다.

pm.test("Status code is 500 - OK",function(){ pm.response.to.have.status(500); });

다시 테스트 진행!

- 로그 확인시 3개의 테스트 진행 하였고, 1개의 테스트가 실패 했다고 나오며, UNSTABLE 상태를 리턴하여 테스트가 실패 하였음을 알린다.

* 참고 : 빌드 과정중 실패시에는 FAILURE(빨간색), 성공시에는 SUCCESS(초록색) 을 리턴하며, 경고시에는 UNSTABLE(노란색)을 리턴한다.

- 테스트 결과 확인시 3개의 테스트중 1개의 테스트가 실패 했다고 나온다.

- 실패한 모든 테스트란에 실패한 테스트명이 나오며, 상세 정보 확인시 아래와 같다. 

- status 코드가 200이고 500이 아니다라고 나온다.

- 빌드 후에 색으로도 빌드 상태를 확인할 수 있으니 한번에 알기 쉽다. (성공:초록색/경고:주황색/실패:빨간색)

초록색이 아니면 배포가 잘못 됐음을 인지하고 바로 원복을 진행하면 된다.

- Jenkins 프로젝트 메인으로 가면 아래와 같이 그래프로도 확인 가능하다.

참 쉽죠잉~!

-끝-

728x90
Comments