Jmeter API 컨버팅 테스트

기존 python으로 되어있던 API 를 Java 로 바꾸게 되었다.
(두개 api 응답을 비교하자!!)

기존 python으로 되어있던 상품검색 api를 성능개선목적으로 로직을 변경하고 java 프로젝트로바꾸게 되었다. ( python을 잘 모르기때문에 java로…)

일단 상품검색 비지니스로직은 python으로 작성된 코드를 읽어보면서 성능개선 점을 적용!!! java로 얼추 동일하게 구현하여 작성을 했고, 이제 테스트를 통해 기존것과 완벽히 응답이 동일한지 체크해야했다.

두 API 의 응답을 체크하기 위해 아래와 같은 준비물이 필요.

  • Jmeter
    부하테스트등 테스트 용도로도 사용되는 Jmeter 를 이용해서 요청을 날리고 응답에 대해 체크를 한다.
  • 상품검색 api 호출 로그
    실제 운영기반 api 호출 로그를 수집하여 테스트 데이터로 삼았다.
    상품검색이 GET 요청뿐이기 때문에 요청 path와 queryString 만 수집

Jmeter 의 최종적인 테스트 플랜은 아래와 같이 하였다.

Image for post
Image for post
Jmeter Test plan
  • HTTP Header Manager 를 통해 공통적으로 필요한 Header 를 정의
  • CSV Data Set Config 를 통해 , 상품검색 api 호출 로그를 라인별로 나워서 PATH 변수에 담는다 ( 이 PATH 라는 변수는 HTTP Request 에 사용)
상품검색 api 호출 로그
CSV Data Set Config 설정
  • 각 서버별(python , java) HTTP Request를 추가하고
    각 서버에 맞는 protocol 과 ip또는 도메인 지정하고 Path 를 ${PATH} 변수를 사용하여 지정한다.
HTTP Request Sampler 설정

이렇게 만 설정 하고 테스트를 하면 각 서버로 호출이 되어진다.
이제는 응답을 비교하기위해 Compare Assertion 을 추가한다.

  • Compare Assertion추가 — 별다른 설정은 하지 않았다.

테스트를 해보니 …

나… 나닛!

두번째 HttpRequet의 View Results Tree에서 Compare Assertion fail 이…
나고있다…
(Compare Assertion에 의해 첫번째 HttpRequest 의 응답과 다르면 Fail이다.)

Image for post
Image for post
Fail…

두 HttpRequest 의 response를 확인해보니 body 의 json문자열 객체의 키 순서가 다르다. -_- 맞춰줘야 겟다.

  • JSR223 Assertion추가
    Json 응답을 Javascript Object로 파싱후 정렬하여 동일한 정렬의 json String 을 응답으로 재정의하게끔 한다.
JSR223 Assertion , 안에 들어가는 script는 아래 gist 참고

이제 테스트를 해보자.!

서..성공이닷.
Image for post
Image for post
응답이 같다. 흐어..
  • 테스트 중간과정
    테스트 하기위한 운영 로그는 10000건 정도 뽑아두었는데.
    실제 테스트 에서.
    기존 api대비 응답이 다른 케이스를 발견하여 컨버팅시 발생한 로직 오류를 찾아 수정하는 것에 도움이 되었다.
  • 테스트 완료
    최종적으로는 테스트 로그의 응답 전체가 동일한 결과를 보여 테스트를 완료하였다.
* 추가응답 한글 문자열이 깨지는 경우가 있어서 비교가 안된적이 잇는데.
python 서버 응답에서 charSet헤더가 없어서 발생하였다.
python 서버 HTTP Request 에 JSR223 PostProcessor를 아래와 같이 추가 했다.prev.setDataEncoding("UTF-8")dataEncoding을 UTF8로 지정하여 정상적으로 응답 body가 깨지지 않고 읽힌다.JSR(Java Specification Requests)은 자바 플랫폼에 대한 규격을 제안하거나 기술한 것을 말한다. 현재 수많은 JSR이 만들어지고 리뷰되고 이를 기반으로 플랫폼이 추가되고 있으며, 이미 많은 JSR이 구현되어 J2EE·J2SE·J2ME 등에 포함되어 있다. 따라서 JSR에 어떠한 내용이 논의되고 있으며, 어떻게 논의가 진행되고 있는지 파악하면 미래의 자바의 모습을 자연스럽게 유추해 볼 수 있다.

출처: http://imdsoho.tistory.com/entry/JSR을-보면-자바의-미래가-보인다 [삶은 예배다.]
http://www.drdobbs.com/jvm/jsr-223-scripting-for-the-java-platform/215801163

Written by

엘디는 사랑입니다.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store