본문 바로가기
Engineering/Jmeter, Postman

[jmeter][beanshell sampler] beanshell sampler에서 stdout 값을 저장하여 response assertion 추가하기

by 알탱2 2023. 7. 2.
반응형

(1) 작업 내용 설명

- jmeter version : 5.5

- 실행 환경 : mac OS

- 예제 상황 :

  • beanshell sampler에서 mac에 설치된 dcmdump command를 실행하여 로 test.dcm 파일에서 0020,0011 tag를 stdout 으로 출력
  • stdout으로 출력되는 정보 : (0020,0011) IS [77777]                                  #   6, 1 SeriesNumber
  • 해당 정보를 outputVariable 변수로 저장하고, beanshell sampler 하위에 response assertion을 추가하여 \[77777\] 을 포함하고 있는지를 검사

 

(2) jmeter 구성

아래와 같이 간단히 Thread Group에 Beanshell Sampler를 추가하였고, 하위에 Response Assertion 을 추가하였다.

Debug Sampler는 변수 저장된 내용을 확인하기 위해 임시 추가한거라 생략 가능하다.

 

(2-1) BeanShell Sampler 내용

import java.io.*;

// 파일 경로 입력 
String dicomFilePath = "./test.dcm";

// DCMTK의 dcmdump 실행 명령어 생성
String dcmtkRootPath = "/opt/homebrew/bin"; // DCMTK의 설치 경로
String dcmdumpCommand = dcmtkRootPath + "/dcmdump  --search 0020,0011 " + dicomFilePath;


try {
	// dcmdump 명령어 실행
	Process process = Runtime.getRuntime().exec(dcmdumpCommand);

	// 명령어 실행 결과를 읽기 위한 BufferedReader 생성
    BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
    
    // 결과를 저장할 변수
    StringBuilder output = new StringBuilder();
    
    String line;
    // 명령어 실행 결과를 한 줄씩 읽어서 변수에 추가
    while ((line = reader.readLine()) != null) {
        output.append(line);
    }
    
    // 결과를 변수에 저장
    vars.put("outputVariable", output.toString());
    
    // BufferedReader와 프로세스 종료
    reader.close();
    process.destroy();
} catch (IOException e) {
    log.error("Error executing command: " + e);
}

 

(2-2) Response Assertion 내용

Response Assertion

 

(3) 실행 결과

(3-1) Assertion에 \[77777\] 로 매칭 성공하도록 실행한 결과

캡쳐와 같이 에러가 발생하지 않고, 특이점이 없음

assertion 성공

 

(3-2) Asserion에 \[777779\] 로 매칭 실패하도록 실행한 결과

캡쳐와 같이 에러가 발생하며, Response Assertion에 실패된 이유(Test failed: variable(outputVariable) expected to contain /\[777779\]/) 가 출력되어 실패 원인을 추적할 수 있음

assertion 실패

 

반응형

댓글