반응형

이번 글은 이전에 다뤘던 chaining test와 bulk request test의 연장선이다.

2022.02.08 - [서버 세팅 & tool/postman] - [postman] chaining sample test

 

[postman] chaining sample test

이전 글: 2022.02.08 - [서버 세팅, tool 사용법/postman] - [test] environment variable setting & snippets [test] environment variable setting & snippets 이전 글: 2022.02.08 - [서버 세팅, tool 사용법..

bangpurin.tistory.com

2022.02.23 - [서버 세팅 & tool/postman] - [postman] 파일로 bulk request를 불러와서 api test하기

 

[postman] 파일로 bulk request를 불러와서 api test하기

이전 글: 2022.02.08 - [서버 세팅 & tool/postman] - [postman] chaining sample test [postman] chaining sample test 이전 글: 2022.02.08 - [서버 세팅, tool 사용법/postman] - [test] environment variabl..

bangpurin.tistory.com

 

api 두 개를 순차적으로 요청할 때, 첫 번째 api 결과로 얻은 list안의 어떤 값을 두 번째 api의 요청 값에 넣어 순차적으로 테스트하는 방법을 알아본다. 이전 글에서 다룬 chaining test랑도 비슷하지만, chaining test에서는 object안의 항목을 variable로 set 해서 전달했다면, 여기서는 마치 for loop을 도는 것처럼 list안의 항목을 하나씩 돌아 테스트한다.

이전에 다룬 bulk test와도 비슷하지만 별도의 csv파일을 활용하지 않고 진행하는 것에 차이가 있다.

 

예를 들어 첫 번째 api의 결과가 다음과 같다고 가정하자.

{
    "playerInfos": [
        {
            "createdTime": "20171130144206",
            "updatedTime": "20190221153455",
            "playerId": "000120000000000",
            "bizLicenseNo": "1128131171",
            "name": " test",
            "status":"02"
        },
        {
            "createdTime": "20170825181332",
            "updatedTime": "20190221184742",
            "playerId": "000090000000000",
            "bizLicenseNo": "6068637012",
            "name": "미진테크",
            "status":"02"
        },
        {
            "createdTime": "20171106090524",
            "updatedTime": "20190221184837",
            "playerId": "000113000000000",
            "bizLicenseNo": "4558700713",
            "name": "맛있는우동",
            "status":"02"
        },
        {
            "createdTime": "20170728144046",
            "updatedTime": "20190221152314",
            "playerId": "000079000000000",
            "bizLicenseNo": "2140125811",
            "status":"02"
            "name": "공룡핸드폰",
        }
    ...
}

여기서 status = '01' 이면 active, '01'이 아니면 inactive이다. 원하는 것은 active 한 object의 playerId를 꺼내서 다음 api의 request항목(여기서는 path param)에 넣어 순차적으로 요청하는 것이라면, 테스트 코드를 어떻게 작성해야 할까.

전체 흐름을 다음과 같이 생각해볼 수 있다.

  1. 첫 번째 api결과를 json으로 바꾼다.
  2. playerInfos의 object를 순차적으로 돌면서 status = '01' 이면 playerId를 playerIds라는 array에 담는다.
  3. playerIds를 env-variable이나 collection-variable로 설정한다(여기서는 collection-variable로 지정한다).
  4. 두 번째 api에서 collection-variable로 설정된 playerIds를 꺼내서 맨 앞을 꺼내서 변수(playerId)로 설정하고 array에서 지운다.
  5. 수정된 array(playerIds)를 다시 collection-variable로 지정한다.
  6. 두 번째 api의 status code가 200인지 확인하다.
  7. playerIds array의 길이가 0보다 크면 두 번째 api를 요청한다. 그렇지 않으면 종료한다.

 

위 흐름은 아래와 같이 정리된다.

  • 첫 번째 api 요청 후에 세팅해야 하는 것: 1, 2, 3
  • 두 번째 api 요청 전에 세팅해야 하는 것: 4, 5
  • 두 번째api 요청 후에 세팅해야하는 것: 6, 7

 

1. 첫 번째 api 테스트 작성

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

if(pm.response.to.have.status(200)){  //정상요청했다면
    var json = pm.response.json();   //1. 결과를 json으로 담고
    //console.log(json.playerInfos)

    //2. json 중 status가 01인 아이들인 object를 모으고, object 중 playerId만 모아 playerIds에 넣는다.
    let playerIds = json.playerInfos.filter((i) => i.status == '01').map(e => e.playerId);
    //console.log(playerIds);
    pm.collectionVariables.set("playerIds", playerIds);  //3. collection-var로 세팅
}

 

두 번째 api url은 다음 형식이다.

[get] www.abc.com/asps/{{aspId}}  

aspId를 collection-var로 세팅해서 자동으로 가져가게 할 생각이다.

 

2. 두번째 api 테스트 작성 - pre-request script

let playerIds = pm.collectionVariables.get("playerIds"); //4. collection-var에서 꺼냄
let aspId = playerIds.shift(); //5. playerIds array에서 맨 처음 항목 꺼내서 aspId라는 변수로 담고 playerIds에서 지움
pm.collectionVariables.set("aspId", aspId); //5. 변수세팅
pm.collectionVariables.set("playerIds", playerIds); //6. 수정된 array 재세팅

postman test에서는 javascript가 사용 가능하기 때문에 여기서는 shift 함수를 이용했다. 상황에 따라 다양한 함수를 활용 가능하다.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift

 

Array.prototype.shift() - JavaScript | MDN

The shift() method removes the first element from an array and returns that removed element. This method changes the length of the array.

developer.mozilla.org

 

3. 두 번째 api 테스트 작성 - test

const playerIds = pm.collectionVariables.get("playerIds");

pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);  //6. 현재 요청이 성공인지 우선 확인
});

if(playerIds && playerIds.length > 0){ //collection-var의 array에 데이터가 있는지 확인하고, 있으면
    postman.setNextRequest("get affiliate by asp"); //7. 자기자신을 다시 실행
}else{
    postman.setNextRequest(null); //7. 없으면 끝
}

 

이렇게 두고 테스트하니 아래처럼 첫 번째 api는 1번 두 번째 api는 playerIds array의 크기(여기서는 29)만큼의 루프를 모두 돌아 정상 실행됨을 확인할 수 있었다.

728x90
반응형

+ Recent posts