From 1faca55e8eb4bc2df7cab47f7ce3d3f994a926db Mon Sep 17 00:00:00 2001 From: dev-jonghoonpark Date: Mon, 15 Jan 2024 13:41:39 +0900 Subject: [PATCH] =?UTF-8?q?add=20post=20'postman=20-=20setup,=20teardown?= =?UTF-8?q?=20=EC=B2=98=EB=A6=AC=ED=95=98=EA=B8=B0=20(using=20newman)'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _posts/2024-01-15-postman-setup-teardown.md | 89 ++++++++++++++++++ .../output.png | Bin 0 -> 31384 bytes 2 files changed, 89 insertions(+) create mode 100644 _posts/2024-01-15-postman-setup-teardown.md create mode 100644 assets/images/2024-01-15-postman-setup-teardown/output.png diff --git a/_posts/2024-01-15-postman-setup-teardown.md b/_posts/2024-01-15-postman-setup-teardown.md new file mode 100644 index 0000000..62ddad8 --- /dev/null +++ b/_posts/2024-01-15-postman-setup-teardown.md @@ -0,0 +1,89 @@ +--- +layout: post +title: postman - setup, teardown 처리하기 (using newman) +categories: [스터디-테스트] +tags: + [ + 테스트, + Testing, + Postman, + Newman, + Event, + Setup, + Teardown, + external library, + api test, + ] +date: 2024-01-15 13:30:00 +0900 +--- + +어떻게 보면 별거 아닌 이야기 인데 그래도 비슷한 고민을 하고 있으신 분이 있으실까 싶어서 글로 정리를 해본다. + +최근에 커피챗을 하면서 어떤 회사에서 Postman을 통한 테스트 자동화를 진행하고 있다는 이야기를 들었다. + +그래서 postman으로 데이터를 어떻게 초기화 하고 어떻게 정리할지에 대한 의문이 들었다. +아쉽게도 아무리 찾아봐도 속 시원한 방법은 보이지 않았다. + +테스트는 서로 독립적으로 동작할 수 있어야 한다고 이야기 한다. 그렇기 때문에 테스트를 한 후 데이터를 깔끔하게 정리하는 것도 중요하다고 생각한다. 테스트를 할 때 항상 이 부분이 어려운 것 같다. + +api를 통해서 데이터를 삭제하는 경우에는 데이터가 soft-delete 되어 있는 경우도 있어 아쉬움이 있었는데, 그렇다고 데이터베이스에 직접 접근하자니 내 범위를 벗어나는게 아닐까 싶은 마음도 들게된다. + +그렇기 때문에 데이터를 초기화 할 수 있는 기능을 개발자에게 부탁해야할지, 내가 처리해야할지도 고민해야한다. + +--- + +우선 postman에서 외부 라이브러리를 사용 할 수 있는지 찾아보았다. + +찾아보니 postman에서 외부 라이브러리를 사용하는 것은 제약이 있었다. +[Adding External Libraries in Postman](https://blog.postman.com/adding-external-libraries-in-postman/) + +--- + +그 이후로 newman이 떠올라서 newman의 documentation을 확인해보기로 하였다. +[https://github.com/postmanlabs/newman](https://github.com/postmanlabs/newman) + +newman은 postman collection을 cli 환경에서 실행할수 있도록 도와주는 실행 도구이다. +문서를 보면 알겠지만 newman은 cli 기능도 제공하지만 node 라이브러리로 사용하는 방식도 지원하고 있다. + +그리고 라이브러리 형태로 사용하면, 특정 이벤트가 발생하였을 때 어떤 처리를 해줄지를 정해놓을 수 있다. + +여기서 관심을 가지고 본 이벤트가 beforeTest, test 이다. +beforeTest에서 setup을 test에서 teardown을 해주면 될 것 같다는 생각이 들었다. + +| Event | Description | +| ---------- | ---------------------------------------- | +| beforeTest | Before `test` script is execution starts | +| test | After `test` script execution completes | + +일단 아래와 같이 코드를 작성해보았다. + +```ts +import newman from "newman"; + +newman + .run({ + collection: require("./postman_collection.json"), + reporters: "cli", + }) + .on("beforeTest", function (err, args) { + console.log("before test"); + }); +``` + +그리고 postman에서 autuator health api를 호출하는 request를 만들어 200이 정상적으로 나오는지 확인하는 간단한 테스트를 작성하였다. + +http://{{BASE_URL}}/actuator/health + +``` +pm.test("Status test", function () { + pm.response.to.have.status(200); +}); +``` + +해당 request에 대한 부분을 json으로 export하여 테스트를 진행해보았더니 예상했던대로 테스트가 진행되기 전 "before test" 로그가 출력되는 것을 확인할 수 있었다. + +![output](/assets/images/2024-01-15-postman-setup-teardown/output.png) + +node 단으로 끌고 나왔기 때문에 이제 내가 원하는대로 다양한 라이브러리를 이용하여 데이터 셋팅(setup)과 정리(teardown)를 할 수 있게 되었다. + +나의 경우에는 별도의 테스트용 환경에서 테스트 할 것이기 때문에 개발자에게 요청 없이 그냥 내가 처리해도 문제는 없을 것이라고 판단해서 내가 처음으로 끝까지 세팅해봐야 겠다 싶다. diff --git a/assets/images/2024-01-15-postman-setup-teardown/output.png b/assets/images/2024-01-15-postman-setup-teardown/output.png new file mode 100644 index 0000000000000000000000000000000000000000..b60cdba3b096df2e2fa86082f4b5ac90551a06ee GIT binary patch literal 31384 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