web-dev-qa-db-ja.com

ガトリングを使用して順番に実行するモジュール化シナリオ

ガトリングで一連のパフォーマンステストをモジュール化しようとしています。

いくつかのテストは、ページを介して同じ初期パスを実行するので、それらを一連のシナリオに分解できると考えました。各シナリオは、独自のファイルで定義された一連の共有アクションであり、その後、単純な最終的なシミュレーション定義です。指定されたシナリオを次々に実行しました。

次に必要なのは、シミュレーションでこれらのシナリオを順番に実行することです。しかし、それらを同時に実行する方法、またはそれぞれの間に特定の遅延を設定する方法のみを見つけることができます。任意の遅延を指定せずに定義されたシナリオを次々に実行するシミュレーション設定オプションはありますか?

[〜#〜]編集[〜#〜]

現在、私は以下のファイルのセットを持っています:

homepageHeaders.scala

package advanced

object homepageHeaders {

    val homepage_headers_1 = Map(
        "Accept" -> """text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8""",
        "If-Modified-Since" -> """Wed, 20 Mar 2013 15:36:31 +0000""",
        "If-None-Match" -> """"1363793791""""
    )

}

homepageChain.scala

package advanced
import com.excilys.ebi.gatling.core.Predef._
import com.excilys.ebi.gatling.http.Predef._
import com.excilys.ebi.gatling.jdbc.Predef._
import akka.util.duration._
import homepageHeaders._


object homepageChain {

    val homepageChain = 
        //Homepage
        exec(http("homepage")
                    .get("/")
                    .headers(homepageHeaders.homepage_headers_1)
            )

}

pageHeaders.scala

package advanced

object pageHeaders {

    val page_headers_1 = Map(
            "Accept" -> """text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"""
    )

}

pageChain.scala

package advanced
import com.excilys.ebi.gatling.core.Predef._
import com.excilys.ebi.gatling.http.Predef._
import com.excilys.ebi.gatling.jdbc.Predef._
import akka.util.duration._
import pageHeaders._


object pageChain {

    val pageChain = 
        //Page Menu
        exec(http("page request")
                    .get("/page1")
                    .headers(pageHeaders.page_headers_1)
            )

}

pageSimulation.scala

package advanced
import com.excilys.ebi.gatling.core.Predef._
import com.excilys.ebi.gatling.http.Predef._
import com.excilys.ebi.gatling.jdbc.Predef._
import homepageChain._
import pageChain._

class pageSimulation extends Simulation {

    val urlBase = "http://www.mytestsite.com"

    val httpConf = httpConfig
            .baseURL(urlBase)
            .acceptHeader("image/png,image/*;q=0.8,*/*;q=0.5")
            .acceptEncodingHeader("gzip, deflate")
            .acceptLanguageHeader("en-gb,en;q=0.5")
            .userAgentHeader("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0")

    val pageScenario = scenario("Bodycare Scenario")
        .exec(homepageChain.homepageChain)
        .exec(pageChain.pageChain)


    setUp(
            homepageScenario.users(1).protocolConfig(httpConf)
        )
}

私が得ているエラーは:

14:40:50.800 [ERROR] c.e.e.g.a.ZincCompiler$ - /Gatling/user-files/simulations/advanced/pageChain.scala:13: not found: value exec
14:40:50.807 [ERROR] c.e.e.g.a.ZincCompiler$ -          exec(http("page request")
14:40:50.808 [ERROR] c.e.e.g.a.ZincCompiler$ -          ^
14:40:53.988 [ERROR] c.e.e.g.a.ZincCompiler$ - /Gatling/user-files/simulations/advanced/homepageChain.scala:13: not found: value exec
14:40:53.989 [ERROR] c.e.e.g.a.ZincCompiler$ -          exec(http("homepage")
14:40:53.989 [ERROR] c.e.e.g.a.ZincCompiler$ -          ^
14:41:17.274 [ERROR] c.e.e.g.a.ZincCompiler$ - two errors found
Exception in thread "main" Compilation failed

明らかに私は私の定義に何かを欠いていますが、それが何であるかを理解していません

18
Mark Baker

シナリオではなくチェーンを作成できます。

例えば:

val login = exec(...)...
val foo = exec(...)...
val bar = exec(...)...
val scn1 = scenario("Scenario1").exec(login).exec(foo)
val scn2 = scenario("Scenario2").exec(login).exec(bar)

晴れ?

22

シナリオをカスケードして、次のように順番に実行することができます。

val allScenarios = scenario1.exec(scenario2).exec(scenario3)
12

ステファンのおかげで、彼は複数のチェーンのオブジェクトを作成してシナリオに渡すための解決策もくれました。

    val login = exec(...)...
    val foo = exec(...)...
    val bar = exec(...)...
    val scn_inpute = Seq(login, foo, bar)
    val scn1 = scenario("Scenario1").exec(scn_inpute)
3
Swapnil Kotwal

別のオプションは次のようにすることができます:

object GetAllRunDetails {
    val getAllRunDetails = exec( ....)
}


object GetRunIdDetails{
   val getRunIdDetails =  exec( .... )
}

val scn1 = scenario("Scenario 1")
    .exec(GetAllRunDetails.getAllRunDetails)

val scn2 = scenario("Scenario 2")
    .exec(GetRunIdDetails.getRunIdDetails)


setUp(scn1.inject(atOnceUsers(1)),
      scn2.inject(atOnceUsers(1)));
2
Pritam Banerjee