何时在gatling场景和链上使用def和val

qnzebej0  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(276)

我来自java背景,正在接管一个gatling项目,在这个项目中,我注意到在使用val或def方法时有点不一致。下面的图片说明了这一点,我想知道是否有任何指导,在加特林的情况下,这些最好的用法请。

这些是我不确定应该用什么的其他例子。我假设一个开关在一个方法中是有意义的,但不确定其他的?

private def teacherViewResources: ChainBuilder =
    exec(viewResourcesFlow)
      .randomSwitch(
        70.0 -> pause(1,2).exec(teacherLaunchResource),
        10.0 -> pause(1,2).exec(teacherAssignResource),
        20.0 -> pause(1,2).exec(teacherResourcesNext)
      )

  private def teacherLaunchResource: ChainBuilder =
    exec(launchResourcesFlow)

val rootTeacherScenario = scenario("Root Teacher Scenario " + currentScenario.toString)
    .doIfOrElse(currentScenario == PossibleScenarios.BRANCH)(
      feed(userFeederTeacher).during(EXECUTION_TIME_SEC) {
        exec(teacherBranching)
      }

      //For use with atOnceUsers for debugging
      //feed(userFeederTeacher).exec(simulationTeacherBranching)

    )(
      exec {
        session =>
          logger.debug("Invalid teacher scenario chosen")
          session
      }
    )

val loginFlowWithExit = exec(loginFlow).exitHereIfFailed

val teacherBranching = group("teacherBranching") {
    exec(loginFlow)
      .exec(session => sessionSetSessionVariable(session))
      .exec(execFlaggedScenario(teacherDashboard)) // First method to run for a teacher
      .exec(logout())
  }

非常感谢。

fcg9iug3

fcg9iug31#

valdef 每次通话都会进行评估。记住,gatlingdsl组件只是构建器,而不是测试运行时执行的组件。所有不带参数的都可能是 val ,您只需确保最终不会使用前向引用,例如:
破损:

val foo = exec(???).exec(bar) // here, bar is still null because it's populated later in the code
val bar = exec(???)

对的:

val bar = exec(???)
val foo = exec(???).exec(bar) // fine because bar is already populated

相关问题