当前位置: 首页 > 知识库问答 >
问题:

如何在gatling中获取虚拟用户id/详细信息?

司寇阳曦
2023-03-14

我是加特林和斯卡拉的新手,我需要你的建议。我想获得n用户的负载测试。每个用户都必须发送创建不同帐户的请求。这是通过发送带有适当对象数组的json文件(在本例中为“条目”)获得的。每个用户必须发送不同的登录名,因为我们的后端系统正在检查用户名是否唯一。不知何故,我们必须确保gatling为每个虚拟用户以及每个条目发送不同的数据。我们注意到有一个会话元素,它代表虚拟用户的状态。问题是,下面显示的代码将无法工作,因为表达式函数使用的Exec结构不会发送任何请求。有一个部分可以工作,但我不知道如何确定第三个参数来区分虚拟用户id。请在下面找到用于此测试的简单json文件结构

{
"entries": [
              {
                "userName": "some user name",
                "password": "some password"
              }
}

scala代码加上我的评论

import io.gatling.core.Predef._
import io.gatling.http.Predef._

class UserCreationTest extends Simulation {

  val profilesNumber = 2
  val virtualUsers = 2

  val httpConf = http
        .baseURL("some url")
        .acceptHeader("application/json")
        .basicAuth("username", "password")

  // This method will multiply 'entries' section in JSON 'entriesNumber' times
  def createJsonUserEntries(entriesNumber: Int, users: List[String], userId : Long): String = {
    val header = """{"entries": ["""
    val footer = """]}"""
    val builder = StringBuilder.newBuilder

    for (i <- 0 until entriesNumber) {
      val userIndex = (userId.toInt - 1) * entriesNumber + i
      val userName = users(userIndex).get

      val apiString =
        s"""{
              "userName": "${userName}"
              "password": "password"
           }"""

      builder.append(apiString)

      if (i != entriesNumber) {
        builder.append(",")
      }
    }
    header + builder.toString() + footer
  }

  // We do have method for generating user names based on profilesNumber and virtualUsers variables
  // but for sake of this example lets hardcode 4 (profilesNumber * virtualUsers) user names
  val usersList = List("user-1", "user-2", "user-3", "user-4")

  //This will throw exception as no request was send. According to documentation function block is used to debugging/editing session
  val scn = scenario("Create WiFi User Profile")
    .exec(session => {
      http("CreateUserProfile")
        .post("/userProfiles/create/")
        .body(StringBody(
          createJsonUserEntries(profilesNumber, userslList, session.userId).toString
          )
        ).asJSON
      session})

  // This exec block will send a request but I do not know how to determine third param that should be virtual user Id
  // To run this section please comment previous whole scenario block
  /*
  val scn = scenario("")
      .exec(http("CreateUserProfile")
              .post("/userProfiles/create/")
              .body(StringBody(
                createJsonUserEntries(profilesNumber, emailList, ???).toString
                )
              ).asJSON
      )
  */

  setUp(scn.inject(atOnceUsers(virtualUsers)).protocols(httpConf))

}

你能帮我吗?在加特林还有其他方法吗?提前非常感谢你

共有1个答案

柳浩大
2023-03-14

所以您正在尝试让每个用户都有一个唯一的userId?

你可以创建一个馈线来实现这一点

var userIdFeeder = (1 to 999999).toStream.map(i => Map("userId" -> i)).toIterator

val scn = scenario("")
      .feed(userIdFeeder)
      .exec(http("CreateUserProfile")
              .post("/userProfiles/create/")
              .body(StringBody(
                createJsonUserEntries(profilesNumber, emailList, "${userId}").toString
                )
              ).asJSON
      )
 类似资料:
  • 嗨,我尝试用InMemoryDao获取userDetailsService。但是我得不到,我试过@Autowired,@ Inject(userdailsservice,InMemoryDaoImpl,InMemoryManager...)但是我不能让它工作。 有公共类安全扩展WebSecurityC 只尝试了WebSecurityCon

  • 问题内容: 我想获取Python3中Exception的详细信息 例如…在foo.py中 和标准输出是… 我想从实例“ err”中获得有关此内置异常类的更多信息, 如 文件:foo.py 行:4 讯息:“ dict”对象没有属性“ encode” 就像这段代码的标准输出 这个 问题答案: 使用该模块可打印当前位置或给定异常的回溯。 您没有说明期望的输出,但是无论哪种模块,该模块很可能都能产生最适合

  • 我在我的nodejs应用程序中为注册用户在keybeat上实现了keybeat,我使用的登录API是: 如果用户名和密码正确,则返回登录用户的令牌, 现在我需要传递这个令牌(通过上面的API返回),并检查这个令牌是否正确,如果令牌正确,我需要用户详细信息,是否有用于此的API。 提前谢谢

  • 问题内容: 在WooCommerce中,从以下代码行: 如何从订单ID获取WooCommerce订单详细信息? 问题答案: 3.0版以上的WOOCOMMERCE订单 自Woocommerce大型主要更新3.0+以来,事情已经发生了很多变化: 对于 对象,无法像以前一样直接访问属性,并且会引发一些错误。 现在,对象实例需要使用new 以及 getter和setter方法。 此外,还有一些用于订购商品

  • 问题内容: 我要获取exe / dll / sys文件的“文件描述”和“版权”,如右键单击文件并选择属性时,在“详细信息”选项卡中所示。 问题答案: 使用Windows API,您可以调用VerQueryValue以获取该信息。JNA有一个用于访问此API的类,称为Version。 这另一个问题有一些代码示例可以帮助您入门: 获取.exe的版本信息 这是一个读取产品名称的C代码示例,您可以将其转换