2017-03-21 14 views
0

Gatling Simulationにパラメータを渡したいと思っています。私はこれを試したが、失敗している。Gatling負荷テストでのパラメータ化されたシミュレーション

object PerfTestManager extends App { 
    run("trymain", 10, 2, 3); 
    def run(dcName: String, minutes: Int, threads: Int, maxThreads: Int) = { 
     class BasicSimul extends Simulation { 
      val scn = scenario("a").feed(QueryFeeder.myfeeder) 
        .exec(http("test").get(s => SolrEnv.getPath(s("params").validate[String].get))); 
      private val hostport = SolrEnv.hostport 

      val httpConf = http.baseURL(hostport) 
         .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") 
         .acceptEncodingHeader("gzip, deflate") 
         .acceptLanguageHeader("en-US,en;q=0.5") 
         .userAgentHeader("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/20100101 Firefox/16.0"); 
      setUp(scn.inject(atOnceUsers(threads)).protocols(httpConf)) 

     } 

     val simClass = classOf[BasicSimulation].getName 
     val props = new GatlingPropertiesBuilder 
     props.dataDirectory(Paths2.dataDirectory.toString) 
     props.resultsDirectory(Paths2.resultsDirectory.toString) 
     props.bodiesDirectory(Paths2.bodiesDirectory.toString) 
     props.binariesDirectory(Paths2.mavenBinariesDirectory.toString) 

     props.simulationClass(simClass) 
     props.runDescription("runonce") 
     props.outputDirectoryBaseName("0") 
     Gatling.fromMap(props.build) // <-- failing line 
    } 
} 

私の意図は、最終的にスケジュールし、UIからシミュレーションをパラメータ化するために使用されるWebサービスを、実行することです(問題は、内部クラスにあると思われます)。私が試すことができるいくつかの選択肢がありますが、上記のコードに近いものを維持するのが最も簡単です。ガトリングは私もBasicSimulationにパラメータを渡すことを試みたBasicSimul

Caused by: java.lang.NoSuchMethodException: computerdatabase.PerfTestManager$BasicSimul$1.<init>() 
    at java.lang.Class.getConstructor0(Class.java:3082) 
    at java.lang.Class.newInstance(Class.java:412) 

のインスタンスを作成することができないとして、上記のコードは、失敗した、しかし、フレームワークは、それはどちらか成功しなかったので、デフォルトのコンストラクタが必要です。そのTestConfigを取得するために

私の選択肢はobject

ヴァル・Q =新しいキュー

に次のように宣言することになりますスケジューリングWebサービスは、パラメータに基づいて、新しいTestConfigをエンキューし、BasicSimulationますdequeue()。競合状態を回避するために、同期化された構成を使用することができます。

答えて

0

私は.Basicallyあなたのシミュレーションクラスで今すぐオブジェクト

object Configuration{ 
val file = getClass.getResource("data/config.properties").getFile() 
val prop = new Properties() 
prop.load(new FileInputStream(file)) 
ENV =prop.getProperty("env"); 
} 

を作成することができますが、これを実行するための簡単なScalaのクラスを作成することによって、より良い方法で、上記の動作を実現することができると思い

class TestSimulation extends Simulation { 
    val ALL_STOP_STATUS = Configuration.ENV; 
} 

同様に、パス変数を使用するためにさらに特化します

+0

私のアプリケーションが同じシミュレーションクラスに基づいて異なる設定で並列負荷テストを実行しようとすると問題が発生します。それは私にenv変数の何らかの同期を持たせることを必要とするでしょう –

+0

同期の必要はありません...クラスパスから読み込み、オブジェクトをクラスインスタンスに置き換えるロジックを変更するだけです – user666

関連する問題