scala 使用 Gatling 模块化场景以按顺序运行

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/15568284/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-22 05:05:09  来源:igfitidea点击:

Modularising scenarios to run in sequence using Gatling

scalaperformance-testinggatling

提问by Mark Baker

I'm trying to modularise a series of performance tests in Gatling.

我正在尝试在 Gatling 中模块化一系列性能测试。

Several of the tests execute the same initial path through the pages, so I thought that I could break them down into a series of scenarios, each scenario being a series of shared actions defined in its own file, and then a final Simulation definition that simply executed the specified scenarios one after the other.

几个测试在页面中执行相同的初始路径,因此我认为我可以将它们分解为一系列场景,每个场景都是在其自己的文件中定义的一系列共享操作,然后是一个简单的最终模拟定义一个接一个地执行指定的场景。

What I then need is for my Simulation to run those scenarios in sequence; but I can only find how to run them either concurrently, or with a specified delay between each. Is there any Simulation setup option to run the defined scenarios one after the other without specifying an arbitrary delay?

然后我需要的是让我的模拟按顺序运行这些场景;但我只能找到如何同时运行它们,或者在每个之间有指定的延迟。是否有任何模拟设置选项可以在不指定任意延迟的情况下一个接一个地运行定义的场景?

EDIT

编辑

Currently, I have the following set of files:

目前,我有以下一组文件:

homepageHeaders.scala

主页Headers.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

主页Chain.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

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

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

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

The error that I'm getting is:

我得到的错误是:

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

Clearly I'm missing something in my definition, but I just don't understand what it is

显然我的定义中遗漏了一些东西,但我只是不明白它是什么

回答by Stephane Landelle

You can compose chains, not scenarios.

您可以组合链,而不是场景。

For example:

例如:

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)

Clear?

清除?

回答by Chinedu Ekwunife

You can cascade scenarios so that they execute in sequence as follows:

您可以级联场景,以便它们按如下顺序执行:

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

回答by Swapnil Kotwal

Thanks to Stephane, he also have given me a solution to create an object of multiple Chains and pass it to a scenario.

感谢 Stephane,他也给了我一个解决方案,可以创建多个 Chain 的对象并将其传递给一个场景。

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

回答by Pritam Banerjee

Another option can be like this:

另一种选择可以是这样的:

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