2017-06-06 10 views
0

Ich würde gerne erstellen und Setup-Gatling-Szenarien in einer for-Schleife zu laden Test einen Webservice.Dynamisch erstellen und Setup-Szenarien

Deshalb habe ich versucht, die folgenden (verkürzt):

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) 
    } 
} 

Wenn ich diese Simulation nichts versuchen laufen passiert: keine Simulation gestartet wird, auch kein Fehler angezeigt wird.

Also meine Frage ist, ob es sogar möglich ist, dynamisch zu erstellen und set up Gatling Szenarien. Fehle ich etwas oder mache ich etwas falsch?


Warum möchte ich es trotzdem dynamisch machen?

Nun, ich habe viele ziemlich ähnliche Methoden zu testen und ich möchte vermeiden, das gleiche Szenario immer und immer wieder kopieren/einfügen.

Antwort

0

Ich habe das Problem selbst gefunden. This gist brachte mich in die richtige Richtung.

Es scheint Sie können die setUp Methode nur einmal aufrufen. Also setze ich meine Szenarien in eine ArraySeq und rufe setUp mit diesem ArraySeq als Parameter an:

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) 
}