使用 nothingFor 函数进行模拟的 Gatling 编译失败

Gatling compilation fails for simulation with nothingFor function

我正尝试在 Gatling 3.4.1 下使用 nothingFor 功能进行 运行 模拟。但是,编译失败并显示错误 could not find implicit value for evidence parameter of type io.gatling.core.controller.inject.InjectionProfileFactory[Product with Serializable]

模拟

package abs

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

class DefaultSimulation extends Simulation {

  ...

  val httpProtocol = http
    .baseUrl(Setting.baseUrl)
    .userAgentHeader("Gatling/3.4.1")

  setUp(
    getScenario.inject(
      nothingFor(20 seconds),
      rampConcurrentUsers(0) to(20) during(10 seconds),
      constantConcurrentUsers(20) during (600 seconds)
    ),
    setScenario.inject(
      rampConcurrentUsers(0) to(20) during(30 seconds),
      constantConcurrentUsers(20) during (600 seconds)
    )
  ).protocols(httpProtocol)
}

编译错误

[ERROR] i.g.c.ZincCompiler$ - C:/Installation/gatling-3.4.1/user-files/simulations/DefaultSimulation.scala:50:30: could not find implicit value for evidence parameter of type io.gatling.core.controller.inject.InjectionProfileFactory[Product with Serializable]
    getScenario.inject(
                      ^
[ERROR] i.g.c.ZincCompiler$ - one error found
[ERROR] i.g.c.ZincCompiler$ - Compilation crashed
xsbt.InterfaceCompileFailed: null
        at xsbt.CachedCompiler0.handleErrors(CompilerBridge.scala:183)
        at xsbt.CachedCompiler0.run(CompilerBridge.scala:172)
        at xsbt.CachedCompiler0.run(CompilerBridge.scala:134)
        at xsbt.CompilerBridge.run(CompilerBridge.scala:39)
        at sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:89)
        at sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile(MixedAnalyzingCompiler.scala:185)
        at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
        at sbt.internal.inc.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:240)
        at sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile(MixedAnalyzingCompiler.scala:175)
        at sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$adapted(MixedAnalyzingCompiler.scala:156)
        at sbt.internal.inc.JarUtils$.withPreviousJar(JarUtils.scala:232)
        at sbt.internal.inc.MixedAnalyzingCompiler.compileScala(MixedAnalyzingCompiler.scala:156)
        at sbt.internal.inc.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:203)
        at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal(IncrementalCompilerImpl.scala:571)
        at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$adapted(IncrementalCompilerImpl.scala:571)
        at sbt.internal.inc.Incremental$.$anonfun$apply(Incremental.scala:174)
        at sbt.internal.inc.Incremental$.$anonfun$apply$adapted(Incremental.scala:172)
        at sbt.internal.inc.Incremental$$anon.run(Incremental.scala:459)
        at sbt.internal.inc.IncrementalCommon$CycleState.next(IncrementalCommon.scala:115)
        at sbt.internal.inc.IncrementalCommon$$anon.next(IncrementalCommon.scala:56)
        at sbt.internal.inc.IncrementalCommon$$anon.next(IncrementalCommon.scala:52)
        at sbt.internal.inc.IncrementalCommon.cycle(IncrementalCommon.scala:248)
        at sbt.internal.inc.Incremental$.$anonfun$incrementalCompile(Incremental.scala:414)
        at sbt.internal.inc.Incremental$.withClassfileManager(Incremental.scala:499)
        at sbt.internal.inc.Incremental$.incrementalCompile(Incremental.scala:401)
        at sbt.internal.inc.Incremental$.apply(Incremental.scala:166)
        at sbt.internal.inc.IncrementalCompilerImpl.compileInternal(IncrementalCompilerImpl.scala:571)
        at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileIncrementally(IncrementalCompilerImpl.scala:489)
        at sbt.internal.inc.IncrementalCompilerImpl.handleCompilationError(IncrementalCompilerImpl.scala:332)
        at sbt.internal.inc.IncrementalCompilerImpl.compileIncrementally(IncrementalCompilerImpl.scala:419)
        at sbt.internal.inc.IncrementalCompilerImpl.compile(IncrementalCompilerImpl.scala:137)
        at io.gatling.compiler.ZincCompiler$.doCompile(ZincCompiler.scala:258)
        at io.gatling.compiler.ZincCompiler$.delayedEndpoint$io$gatling$compiler$ZincCompiler(ZincCompiler.scala:265)
        at io.gatling.compiler.ZincCompiler$delayedInit$body.apply(ZincCompiler.scala:40)
        at scala.Function0.apply$mcV$sp(Function0.scala:39)
        at scala.Function0.apply$mcV$sp$(Function0.scala:39)
        at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:17)
        at scala.App.$anonfun$main$adapted(App.scala:80)
        at scala.collection.immutable.List.foreach(List.scala:431)
        at scala.App.main(App.scala:80)
        at scala.App.main$(App.scala:78)
        at io.gatling.compiler.ZincCompiler$.main(ZincCompiler.scala:40)
        at io.gatling.compiler.ZincCompiler.main(ZincCompiler.scala)

我试图隐式指定导入,但编译失败并出现相同的异常

import io.gatling.core.Predef.{nothingFor, rampConcurrentUsers, constantConcurrentUsers, _}

此模拟在没有 nothingFor(20 seconds) 的情况下编译和工作。

Gatling 有 2 个不同系列的注入配置文件步骤:

  • 打开,你控制用户到达率
  • 在您控制并发用户数的地方关闭

您不能混合使用它们,因为它们是两种完全不同且不兼容的行为。

nothingFor属于开放式,rampConcurrentUsers属于封闭式。

改用constantConcurrentUsers(0) during (20)