如果使用doIf通过了先前方案,则需要加特林运行下一个方案

时间:2019-06-21 04:11:40

标签: scala gatling scala-gatling

我是Scala和加特林的新手。如果使用doIf通过了以前的方案,我需要运行scenaio。

我的代码是:

HttpRequest

object CompanyProfileRequest {

val check_company_profile: HttpRequestBuilder = http("Create Company 
 Profile")
.get(onboarding_url_perf + "/profile")
.headers(basic_headers)
.headers(auth_headers)
.check(status.is(404).saveAs("NOT_FOUND"))


val create_company_profile: HttpRequestBuilder = http("Create Company 
 Profile")
.post(onboarding_url_perf + "/profile")
.headers(basic_headers)
.headers(auth_headers)
.body(RawFileBody("data/company/company_profile_corporation.json")).asJson
.check(status.is(200))
.check(jsonPath("$.id").saveAs("id"))
 }

场景类别为:-

 object ProfileScenarios {

  val createProfileScenarios: ScenarioBuilder = scenario("Create profile 
  Scenario")
  .exec(TokenScenario.getCompanyUsersGwtToken)
  .exec(CompanyProfileRequest.check_company_profile)
  .doIf(session => session.attributes.contains("NOT_FOUND")) {
   exec(CompanyProfileRequest.create_company_profile).exitHereIfFailed
   }
 }

仿真是:-

      private val createProfile = ProfileScenarios
     .createProfileScenarios
     .inject(constantUsersPerSec(1) during (Integer.getInteger("ramp", 1) 
     second))

     setUp(createProfile.protocols(httpConf))

每当我运行此仿真时,我都无法检查这种情况:-

.doIf(session => session.attributes.contains(“ NOT_FOUND”))

非常感谢您的帮助。

关于, 维克拉姆

1 个答案:

答案 0 :(得分:1)

我能够使您的示例发挥作用,但这是一种更好的方法...

使用

的主要问题
.check(status.is(404).saveAs("NOT_FOUND"))

.doIf(session => session.attributes.contains("NOT_FOUND"))

要实现条件转换,就是您现在得到了一项检查,该检查将导致在check_company_profile确实不应该(例如,当您获得200)时失败。

一种更好的方法是使用检查转换将布尔值插入“ NOT_FOUND”变量。这样,当办公室存在时,您的check_company_profile操作仍然可以通过,并且doIf构造可以仅使用EL语法,并且更清楚其执行原因。

val check_company_profile: HttpRequestBuilder = http("Create Company Profile")
  .get(onboarding_url_perf + "/profile")
  .headers(basic_headers)
  .headers(auth_headers)
  .check(
    status.in(200, 404), //both statuses are valid for this request
    status.transform( status => 404.equals(status) ).saveAs("OFFICE_NOT_FOUND") //if the office does not exist, set a boolean flag in the session
  )

现在您有了一个布尔会话变量(“ OFFICE_NOT_FOUND”),就可以在doIf中使用它了。

.doIf("${OFFICE_NOT_FOUND}") {
   exec(CompanyProfileRequest.create_company_profile).exitHereIfFailed
}