2017-02-03 1 views
0

jMeter에서 몇 가지 성능 테스트가 있는데 하나의 HTTP 요청에서 BeanShell PostProcessor가 있습니다. 사용자의 이메일 주소를 CSV 파일의 맨 위에 작성해야합니다 (맨 위의 최신 항목). 이 파일은 매우 중요합니다.jMeter BeanShell 포스트 프로세서 동기화

import org.apache.commons.io.FilenameUtils; 
import org.apache.jmeter.services.FileServer; 
import java.text.*; 
import java.io.*; 
import java.util.*; 

try { 
    String email = vars.get("emailPrefix") + "+" + vars.get("environment") + "-jm-" + vars.get("randomEmailNumber")+"@someEmail.com"; 
    log.info(email); 
    String separator = System.getProperty("file.separator"); 
    File mFile = new File(FileServer.getFileServer().getBaseDir() + separator + "investors_" + vars.get("environment") + ".csv"); 
    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(mFile), "UTF8")); 
    String result = ""; 
    String line = ""; 
    while((line = br.readLine()) != null){ 
     result = result + "\n" + line; 
    } 
    result = email + "," + result; 
    FileOutputStream fos = new FileOutputStream(mFile); 
    fos.write(result.getBytes()); 
    fos.flush(); 
} catch(Exception e) { 
    System.out.println("Exception in 2 1 4 /getContactInformation::Email writer:" + e.toString()); 
    throw e; 
} 

하지만 한 번에 즉, 100 스레드를 실행하려고하면, 언젠가는 모든 이메일이 기록 또는 CSV 파일 (내용이 실행의 중간에 삭제) 빈 종료된다하지 않도록, 발생합니다.

마지막으로이 CSV 파일을 읽으면 내 문제가 해결 될 수 있지만 jMeter는이를 수행 할 수 없습니다.

간단한 방법,이 포스트 프로세서를 동기화하는 방법 또는 이것을 다시 쓰는 방법이 있습니까?

답변

1

테스트가 잘못 설계된 것처럼 보입니다. 동일한 파일에 동시에 쓰는 것이 권장되지 않습니다. ReadWriteLock 구현이 있거나 JMeter의 Critical Section Controller을 사용하여 한 번에 하나의 스레드 만 파일에 내용을 쓰도록해야합니다.

또 다른 옵션은 전에 CSV 파일 생성 논리 을 실행하여 회선을 읽으려고 시도하는 것입니다.

가장 좋은 해결책은 파일을 없애고 모든 것을 JMeter 변수 또는 속성에 쓰고 필요할 때 메모리에서 값을 읽는 것입니다. 또한 JSR223 PostProcessorGroovy 언어로 전환하는 것을 권장합니다. Groovy는 Beanshell을 사용하여 얻을 수있는 것보다 훨씬 우수한 성능을 제공합니다. 자세한 내용은 Groovy Is the New Black 문서를 참조하십시오.

+0

메모리에 저장할 수 없으므로이 CSV 파일을 다른 테스트에서 응용 프로그램에 로그인하는 데 사용합니다. 크리티컬 섹션 컨트롤러를 시험해 보겠습니다. 그리고 아마 그것을 Groovy로 다시 작성할 수도 있습니다. – medy75

관련 문제