본문 바로가기
Engineering/Jmeter, Postman

[Tip] jmx(jmeter) 또는 shell script 작성 시, OS(linux, mac)에 따라 command root path가 달라지는 것을 해결 하려면?

by 알탱2 2023. 12. 11.
반응형

테스트 시나리오의 일부를 jmeter와 shell script를 활용하여 자동화 스크립트를 작성/실행 하는 과정에서 아래와 같은 불편함이 발생되었고, library의 root path를 쉽게 변경 또는 모두 추가하는 방식으로 하여 좀 더 스크립트 관리 및 실행 편의성을 높일 수 있었던 사례이다.

jmeter나 shell script를 많이 작성해 본 경우라면 너무 쉬운 내용일 수 있으나 초심자도 있을 수 있으니 간단히 적어 본다.

 

 

 

Jmeter :

< 불편 사항 >

  • jmeter를 수정하며 단위 테스트를 해보는 환경은 macbook 이지만, 스크립트를 적용하여 실행하게될 환경은 linux(ubuntu)임
  • jmeter 시나리오에는 REST API를 호출하거나 dcmtk command를 호출하거나, shell script를 호출하는 등의 다양한 종류의 시나리오(sampler)가 혼재되어 있음
  • 다양한 팀원이 어느 환경에서든 스크립트를 수정 또는 실행 시, 주의해야 할 내용이 복잡하지 않았으면 함
  • 그 중, 문제되는 부분은 dcmtk의 storescp를 실행하는 sampler가 중간 시나리오에 포함되어 있었는데, 실제 실행 환경인 ubuntu에 설치된 기준으로는 /usr/local/bin/storescp 였고, mac 에서는 /opt/homebrew/bin/storescp 였음
    • 아래와 같이 개선하기 전까지는 해당 스크립트 위치를 찾아서 실행 환경마다 변경을 해줘야하는 수고로움이 있었고, 그게 귀찮은 경우는 laptop에서는 jmeter GUI형태로 실행하여 수정만 하고, 수정된 내용을 실제 돌려보는 것은 linux에 jmx 파일을 복사하여 확인하는 형태로 업무를 하고 있었음

 

< 해결 방법 >

  • User Defined Variables에 아래 캡쳐처럼 dcmtk_root_path 라는 변수를 추가하여 OS별로 다른 환경을 Description에 예시로 기재하여, 실행 환경마다 해당 부분을 찾아 변경하기 쉽도록 함 
    • 실행 환경 OS를 변경할 때마다 공수는 필요한 방법이지만, 한번에 전체 적용 가능한 방법에 해당함
    • 아래 shell script에 적용한 것처럼 PATH에 일괄적으로 적용하는 방법도 있을 것 같은데, 아직 적용해보진 않아서 다음에 해보고 이 부분은 좀 더 손이 덜 가는 방법으로 업데이트 해볼 예정 (jmeter실행에만 영향을 줄 수 있도록 PATH 적용하는 방법을 해보신 분이 계시면 제보 부탁드립니다 :) )

 

  • 아래는 storescp command 호출 부분에 변수로 기재한 root path를 적용한 샘플 형태

 

 

 

Shell Script : 

< 불편 사항 >

  • jmeter와 크게 다르지 않으며, 동일한 command를 사용하기 위해 해당 library 설치 위치가 OS에 따라 다를 수 있는 문제가 있음
  • 나의 경우 jmeter와 마찬가지로 dcmtk 가 설치된 경로가 달라서 아래의 방법을 사용하였으나, dcmtk 뿐 아니라 linux와 mac에서 공통으로 사용 가능한 모든 명령어에 적용할 수 있음 (e.g. scp, mv, 등.. 다양한 command 사용이 필요할 때)

 

< 해결 방법 >

  • jmeter 보다 훨씬 간단함
  • 환경이 변한다고 해서 jmeter에서처럼 사람이 매번 변수의 값을 수정할 필요도 없음
  • 아래와 같이 shell script 시작 부분에 PATH 라는 환경 변수를 지정하고, linux/mac에서 필요한 command의 root path를 모두 넣어주면 됨
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/opt/homebrew/bin
  • 위 예시(?)에서 /opt/homebrew/bin 은 mac OS의 기본 root path 이고, 그 앞에 모든 경로는 일반적으로 linux에서 root path로 지정되는 경로에 해당한다.
  • 해당 경로 중, 어디엔가 1군데 이상만 command 경로가 매칭된다면 에러 없이 실행 가능하다.
반응형

댓글