2017-02-03 4 views
0

私はjMeterでいくつかのパフォーマンステストを行いました.1つの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を使用してください。

もう1つのオプションは、の前にCSVファイル作成ロジックを実行しているときに、その行を読み込もうとします。

3番目の(そしてIMHO)最も良い解決策は、ファイルを取り除き、すべてをJMeterの変数またはプロパティに書き込み、必要に応じてメモリから値を読み込むことです。 JSR223 PostProcessorGroovy言語に切り替えることをお勧めします。GroovyはBeanshellを使用して実現できるよりもはるかに優れたパフォーマンスを提供します。詳しくは、Groovy Is the New Blackの記事を参照してください。

+0

メモリに保存することができません。このCSVファイルを別のテストでアプリケーションにログインするために使用します。クリティカルセクションコントローラを試してみます。そして、それをGroovyにも書き直すことができます。 – medy75

関連する問題