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()
。競合状態を回避するために、同期化された構成を使用することができます。
私のアプリケーションが同じシミュレーションクラスに基づいて異なる設定で並列負荷テストを実行しようとすると問題が発生します。それは私にenv変数の何らかの同期を持たせることを必要とするでしょう –
同期の必要はありません...クラスパスから読み込み、オブジェクトをクラスインスタンスに置き換えるロジックを変更するだけです – user666