无法在同一请求的formParam中传递已保存的值

时间:2016-11-18 09:43:46

标签: scala performance-testing gatling

我已保存'current_account_id''current_workspace_id'

在下面的代码中。想要在下一个请求中使用这些ID,因为我必须将其设置为动态,因此我将“505520”替换为"${accountID}",将“505519”替换为"${workspaceID}" ,但它不起作用并抛出“没有命名属性'accountID'定义为“

然而,它适用于“退出”请求。任何人都可以告诉如何解决此问题?

.exec(http("Login")
   .post("/j_security_check")
   .headers(headers_9)
   .formParam("j_username", username + ThreadLocalRandom.current.nextInt(endNum))
   .formParam("j_password", password)
   .resources(
    http("Fetch_IDs")
   .get("/desktop/side_nav.jsp")
   .check(regex("""current_account_id=(\d+)""").saveAs("accountID"))
   .check(regex("""current_workspace_id=(\d+)""").saveAs("workspaceID"))
   .headers(headers_5),
    http("request_11")
   .get("/desktop/dashboard/index.jsp")
   .headers(headers_5),
    http("request_12")
   .get("/global_nav.jsp")
   .headers(headers_5),
    http("request_13")
   .post("/eventDataController")
   .headers(headers_9)
   .formParam("action", "viewevents")
   .formParam("objectId", "")
   .formParam("type", "Desktop")
   .formParam("dashboardType", "desktop_events")
   .formParam("forceReplace", "true")
        // Doesnt work 
   .formParam("current_account_id", "${accountID}")
   .formParam("current_workspace_id", "${workspaceID}")
   .formParam("skipAccountCheck", "")
   .formParam("skipWorkspaceCheck", ""),
    http("request_14")
   .post("/savedsearchdatacontroller")
   .headers(headers_9)
   .formParam("action", "dashboard_view")
   .formParam("dashboardType", "Desktop")
   .formParam("current_account_id", "505520")
   .formParam("current_workspace_id", "505519"),
    http("request_15")
   .post("/wizardDataController")
   .headers(headers_9)
   .formParam("action", "view")
   .formParam("current_account_id", "505520")
   .formParam("current_workspace_id", "505519")))

 .exec(http("Logout")
   .post("/logoutcontroller")
   .headers(headers_9)
   .formParam("action", "logout")
   .formParam("undefined", "")
                //Here it works and fetches value
   .formParam("current_account_id", "${accountID}")
   .formParam("current_workspace_id", "${workspaceID}")
  )

感谢。

2 个答案:

答案 0 :(得分:1)

在您的情况下,您无法使用会话中的“accountID”,因为它尚未设置。

从资源块获取的请求是并行执行的。这意味着如果两个请求都位于同一资源块中,则无法将请求中保存的变量重用到其他请求中。

此外,用户名对每个用户始终具有相同的随机数。

.formParam("j_username", username + ThreadLocalRandom.current.nextInt(endNum))

如果你想为每个用户提供一个不同的随机数,你需要将一个函数传递给formParam,如下所示:

.formParam("j_username", _ => username + ThreadLocalRandom.current.nextInt(endNum))

答案 1 :(得分:0)

您将需要使用会话来实现这样:

  1. 声明一个全局变量:

    if (sValue[i] & 128) {
        ... // MSB is set
    }
    
  2. 按以下方式创建另一个exec:

    var accountIDString = "";
    var workspaceIDString = "";
    
  3. 它会起作用。