Legacy System을 잘 운영하기 위해서는 BlackBox 테스트 환경이 필요하다. 그래야 화이트 박스 테스트 코드를 짜지 않더라도 기본적인 테스트가 가능하다. (게다가 소스를 만질 수 없는 상황이라면 더더욱 Blackbox 테스트 환경이 필요하다)


서버의 중요 jar는 계약관게에 있어서 볼 수 없고, TestCode 조차 없는 운영중인 Legacy System을 만지고 있다. 게다 이 Legacy System은 UI는 없고 json/rest 기반 통신 서버이며 바로 직접 테스트할 수 없고 A,B,C Agent를 통해서 작업해야만 했다. 


즉, 아래와 같은 시스템이다.  하나의 API를 던지면 multicast 되는 형태의 솔루션이다. 

    A Agent---> 서버 --> B Agent 도착,

                              --> C Agent 도착 



Functional Test를 위해서는 ..

A Agent에 rest/json request를 보내고 그에 대한 응답을 체크하고

B Agent의  rest/json reponse와 C Agent의 rest/json reponse를 받아 정상적인지 체크해야 하는 상항이다. 


UI가 없어 selenium 이라는 툴도 쓰기 어렵다. 그렇다면 대안 SoapUi나 Jmeter가 되는데..

SoapUI는 vendor (http://www.soapui.org/)가 있고, jmeter는 apache 재단것이다.

(사실 난 jmeter 초반 유저라.. 아주 구린 형태만 기억하고 있었다. 그러나 지금은 기능성이나 완성도가 많이 좋아졌다. 현재 최신 버전은 가끔씩 잘 적용이 안되기도 하지만.. )

soapui는 soap을 테스트했던 것으로 테스트를 시작했지만 지금은 rest도 지원하고 있다. 게다가 loadui라는 툴도 제공한다. soap ui는 advanced 기능이 필요한 경우 enterprise 버전을 annual로 내야하는 상황이었다. 아무리 좋아도 그런 툴들의 특징은 쓰다보다가... 자연스럽게 enterprise로 갈 수 밖에 없다. 
soap ui의 스크립트는 groovy인데 반해 jmeter는 bsf, javascript를 지원했다. 



팀원과 토론 끝에 jmeter를 쓰기로 했다.  (팀원은 리눅스, 나는 mac 사용자다.....;;)

DB, Agent들과 서버를 모두 standalone으로 실행하고 스크립트를 실행시켜 자동으로 하게 했다.

jmeter는 성능 툴에서 시작했지만 functional test에도 적당했다. Thread Group 단위를 하나의 테스트 단위로 잡았고 순서를 보장하거나 순서를 보장하지 않는 경우에도 테스트할 수 있었다.

그리고 Assetion및 통과 여부를 지정하여 테스트할 수 있다.  (soapui에 있는 기능이 많이 jmeter안에 있었다.)





속도, 테스트 결과도 볼 수 있다. 



 


결론

jmeter를 이용하면 function test (black box) 툴로 쓸만하게 사용할 것 같다. (계속 작업중)



참고자료



http://blazemeter.com/blog/http-request-defaults


http://stackoverflow.com/questions/11306584/how-to-parse-jmeter-response-and-make-new-request


regular expression extractor

http://jmeter.apache.org/usermanual/component_reference.html#Regular_Expression_Extractor


http://community.blazemeter.com/knowledgebase/articles/64307-using-jmeter-functions-part-ii


http://community.blazemeter.com/knowledgebase/topics/10018-jmeter-tutorials


http://mxiayan.wordpress.com/2013/01/08/user-bsf-postprocessor-to-parse-json-response-and-save-the-properties-as-jmeter-variables/


http://fabiouechi.blogspot.kr/2012/04/jmeter-using-bsf-assertion-to-fail.html


http://stackoverflow.com/questions/14321662/running-multiple-thread-groups-sequentially-in-jmeter


http://jmeter.apache.org/api/index.html


http://stackoverflow.com/questions/5702621/jmeter-if-controller-with-parameters


http://jmeter.apache.org/usermanual/jmeter_proxy_step_by_step.pdf



Posted by 김용환 '김용환'