2017-06-06 5 views
0

forループで動的にギャッティングシナリオを作成して設定し、Webサービスのテストをロードしたいとします。私は、このシミュレーション何も起こらないで実行しようとした場合シナリオを動的に作成して設定する

class RecordedSimulation extends Simulation { 

    val httpProtocol = http 
    .baseURL("http://127.0.0.1") 

    val overallUsers = 1000 

    val methods: Map[String, Double] = Map(
    "FindContact" -> 0.6, 
    "FindAddress" -> 0.3, 
    "FindNumber" -> 0.1 
) 

    for ((methodname, probability) <- methods) { 
    val scen = scenario(methodname) 
     .exec(http(methodname) 
     .get("/contactservice") 
     .queryParam("method", methodname)) 

    setUp(scen.inject(constantUsersPerSec(overallUsers * probability) during (60 seconds))).protocols(httpProtocol) 
    } 
} 

。したがって、私は(短縮)以下を試してみましませシミュレーションが開始されていない、また、エラーは表示されません。

私の質問は、シナリオを動的に作成して設定することも可能な場合です。何かを逃したり、何か間違っているのですか?


どうして私はそれを動的にしたいのですか?

私はかなり類似したテスト方法がありますが、繰り返し同じシナリオをコピーして貼り付けることは避けたいと思います。

答えて

0

私自身が問題を発見しました。 This gist私は正しい方向に私を得た。

と表示される場合は、setUpメソッドを1回だけと呼びます。そこで私は自分のシナリオをArraySeqに入れ、このArraySeqをパラメータとしてsetUpを呼び出しています:

import scala.collection.mutable.ArraySeq 
import io.gatling.core.structure.PopulationBuilder 

class RecordedSimulation extends Simulation { 

    val httpProtocol = http 
    .baseURL("http://127.0.0.1") 

    val overallUsers = 1000 

    val methods: Map[String, Double] = Map(
    "FindContact" -> 0.6, 
    "FindAddress" -> 0.3, 
    "FindNumber" -> 0.1 
) 

    def scnList() = { 
    var scnList = new ArraySeq[PopulationBuilder](methods.size) 
    var i = 0 
    for ((methodname, probability) <- methods) { 
     var scen = scenario(methodname) 
     .exec(http(methodname) 
      .get("/contactservice") 
      .queryParam("method", methodname)) 
     .inject(constantUsersPerSec(overallUsers * probability) during (60 seconds) randomized) 

     scnList(i) = scen 
     i = i + 1 
    } 
    scnList 
    } 

    setUp(scnList: _*).protocols(httpProtocol) 
} 
関連する問題