gatling - composing chains and executing in sequence

3.3k Views Asked by At

I'm trying to create multiple chains and execute them in sequence using gatling. According to the documentation, this should work since 1.3 and I'm using 2.0 but it still doesn't work for me. I get an error not found value exex.

package basic

import io.gatling.core.Predef._
import io.gatling.http.Predef._
import scala.concurrent.duration._

class BenchmarkSimulation extends Simulation {

  val httpConf = http
                .baseURL("http://127.0.0.1:9001")
                .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
                .doNotTrackHeader("1")
                .acceptLanguageHeader("en-US,en;q=0.5")
                .acceptEncodingHeader("gzip, deflate")
                .userAgentHeader("Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0")

  val helloworld = exec(http("write-hello-world").get("/hello"))
  val datetimenow = exec(http("write-datetime-now").get("/now"))
  val scn = scenario("My Scenario").exec(helloworld, datetimenow)

  setUp(scn.inject(ramp(1000 users) over (10 seconds))).protocols(httpConf)
}

The exact errors are something like, ne-api/gatling/user-files/simulations/basic/BenchmarkSimulation.scala:17: not found: value exec

00:09:39.660 [ERROR] i.g.a.ZincCompiler$ -   val helloworld = exec(http("write-hello-world").get("/hello"))
00:09:39.661 [ERROR] i.g.a.ZincCompiler$ -                    ^
00:09:39.663 [ERROR] i.g.a.ZincCompiler$ -
00:09:39.663 [ERROR] i.g.a.ZincCompiler$ -   val datetimenow = exec(http("write-datetime-now").get("/now"))
00:09:39.663 [ERROR] i.g.a.ZincCompiler$ -                     ^
00:09:40.671 [ERROR] i.g.a.ZincCompiler$ - two errors found
Exception in thread "main" Compilation failed
    at sbt.compiler.AnalyzingCompiler.call(AnalyzingCompiler.scala:105)
    at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:48)
    at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:41)
    at sbt.compiler.AggressiveCompile$$anonfun$3$$anonfun$compileScala$1$1.apply$mcV$sp(AggressiveCompile.scala:98)
    at sbt.compiler.AggressiveCompile$$anonfun$3$$anonfun$compileScala$1$1.apply(AggressiveCompile.scala:98)
    at sbt.compiler.AggressiveCompile$$anonfun$3$$anonfun$compileScala$1$1.apply(AggressiveCompile.scala:98)
    at sbt.compiler.AggressiveCompile.sbt$compiler$AggressiveCompile$$timed(AggressiveCompile.scala:155)
    at sbt.compiler.AggressiveCompile$$anonfun$3.compileScala$1(AggressiveCompile.scala:97)
    at sbt.compiler.AggressiveCompile$$anonfun$3.apply(AggressiveCompile.scala:138)
    at sbt.compiler.AggressiveCompile$$anonfun$3.apply(AggressiveCompile.scala:86)
    at sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:30)
    at sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:28)
    at sbt.inc.Incremental$.cycle(Incremental.scala:73)
    at sbt.inc.Incremental$$anonfun$1.apply(Incremental.scala:33)
    at sbt.inc.Incremental$$anonfun$1.apply(Incremental.scala:32)
    at sbt.inc.Incremental$.manageClassfiles(Incremental.scala:41)
    at sbt.inc.Incremental$.compile(Incremental.scala:32)
    at sbt.inc.IncrementalCompile$.apply(Compile.scala:25)
    at sbt.compiler.AggressiveCompile.compile2(AggressiveCompile.scala:146)
    at sbt.compiler.AggressiveCompile.compile1(AggressiveCompile.scala:70)
    at com.typesafe.zinc.Compiler.compile(Compiler.scala:161)
    at com.typesafe.zinc.Compiler.compile(Compiler.scala:142)
    at io.gatling.app.ZincCompiler$.main(ZincCompiler.scala:111)
    at io.gatling.app.ZincCompiler.main(ZincCompiler.scala)
Exception in thread "main" org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)
    at org.apache.commons.exec.DefaultExecutor.executeInternal(DefaultExecutor.java:377)
    at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:160)
    at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:147)
    at io.gatling.app.ZincCompilerLauncher$.apply(ZincCompilerLauncher.scala:54)
    at io.gatling.app.SimulationClassLoader$.fromSourcesDirectory(SimulationClassLoader.scala:32)
    at io.gatling.app.Gatling$$anonfun$15.apply(Gatling.scala:171)
    at io.gatling.app.Gatling$$anonfun$15.apply(Gatling.scala:171)
    at scala.Option.getOrElse(Option.scala:120)
    at io.gatling.app.Gatling.start(Gatling.scala:171)
    at io.gatling.app.Gatling$.fromMap(Gatling.scala:59)
    at io.gatling.app.Gatling$.runGatling(Gatling.scala:80)
    at io.gatling.app.Gatling$.main(Gatling.scala:54)
    at io.gatling.app.Gatling.main(Gatling.scala)
1

There are 1 best solutions below

0
On BEST ANSWER

I think you're mixing Gatling 1 and Gatling 2 libraries in your classpath.

Also, "ramp(1000 users) over (10 seconds))" is Gatling 1 syntax, it should be "rampUsers(1000) over (10 seconds)".

And datetimenow scenario will begin execution only after helloworld scenario is complete.

No. helloworld and datetimenow are not scenarios but chains (scenario parts). You're just merging then (chaing actually) into one scenario. If you want to wait for all users to complete helloworld before starting datetimenow, you have to write 2 different simulations are launch them sequentially.