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

使用Gatling Feeder中为同一用户的后续请求的Feeder中的一个请求生成的值

巩光誉
2023-03-14

我正在使用Gatling测试一个系统,该系统需要2个连续的Post请求,例如R1和R2。这些Post请求有不同的Json请求体,但有一个公共密钥“ID”。因此,一个用户应该按顺序执行R1-R2,并且每个用户应该生成一个新的随机ID。在R1中生成的这个ID应该传递给R2,因此作为ID密钥的值添加到其请求体中。

根据R1请求,在馈线内部生成随机ID:

val R1Id = Iterator.continually(Map("randId1" -> R1_requestBody.replace("0000000000", randomTokenGenerator.generateTokenID())))

val r1 = 
scenario("R1Scenarios").feed(R1Id)
.exec(http("POST R1")
.....
.body(StringBody(session => """${randId1}""")).asJSON                        

现在,在R2中,我想输入的是R1的输入端内部生成的ID值。

val R2Id = Iterator.continually(Map("randId2" -> R2_requestBody.replace("0000000000", ***Token generated in the first request***)))

 val R2= {
scenario("R2 Scenarios")
.exec(R1.r1) 

//calls the first scenario as R2 should be executed after R1
.feed(R2Id )
.exec(http("POST R2")
....
.body(StringBody(session => """${randId2}""")).asJSON

最后执行模拟:

val jsonScenario = R2.r2.inject(constantUsersPerSec(2) during (1 second))

setUp(jsonScenario)
.protocols(httpConf)

共有1个答案

微生博简
2023-03-14

不要在feeder中生成整个身体,你只能生成那个随机id,让我们调用它userToken

val tokenFeeder = Iterator.continually(Map(
  "userToken" -> randomTokenGenerator.generateTokenID()
))

并在构建请求体时替换它:

.body(
    StringBody(session => R1_requestBody.replace(
      "0000000000",
      session("userToken").as[String]
    ))
).asJSON

或者甚至更干净、更好-使用Gatling将每个包含占位符的字符串(如${sesionAttie teName})替换为该会话属性字符串值,而不是在您的正文模板中使用"0000000000"使用${userToken}占位符fe:

val bodyTemplate ="""{
  |"userName": "John Doe",
  |"userToken": "${userToken}"
  |}""".stripMargin

然后只需使用身体和盖特林表达语言的模板就可以实现神奇的效果:

.body(StringBody(bodyTemplate)).asJSON
 类似资料:
  • 我一直在使用响应模板来提供动态响应,因为所有请求和查询参数都与该请求本身相关联。但是,我想使用多个参数发出 POST 请求,然后通过使用响应模板在存根 GET 方法的正文响应中使用这些参数。这在电线中可以做些什么吗?任何输入都非常感谢,谢谢!

  • 我需要使用gRPC从不同类型但语义相关的服务器获取一些数据。你可以把它看作是一个数据类型,可以有a、B和C。我在想,将这些数据传输到客户机的正确方法是什么。我个人可以想出三种不同的方法: 使用带有的单个消息: 在这个方法中,我只定义了一条消息,如下所示: 现在我只添加了一个rpc方法,它可以获取不同类型的数据。这种方法的问题是可扩展性。我将无法通过向此处所述的添加新的消息类型来更新我的消息(或者至

  • 我正在尝试发送一个经过身份验证的请求,只需点击邮递员。 所以,我有一个名为“Oauth”的请求,我正在使用测试将令牌存储在局部变量中。 我现在要做的是,对于需要承载令牌的任何其他请求,自动运行Oauth请求(从预请求脚本)。 有没有一种方法可以通过单击邮递员按钮来获取访问令牌并发送经过身份验证的请求?

  • 我正在构建一个小型聊天应用程序,以了解一些有关jquery和Ajax的知识。它工作得很好,但目前chatbox正在以以下代码在一个间隔内抓取log.HTML的HTML: 现在,如果用户试图复制一行,它将退出,因为html每隔几秒钟就会刷新一次。因此,我希望构建一个检查来记住最后一条已知消息,并将其与日志中的最后一条消息进行比较。如果它们不匹配(出现了一条新消息),只有这样浏览器才会刷新聊天框中的h

  • 在上面的代码示例中,试图为每个请求生成唯一的txn-id。但是,观察到它正在重复使用相同的数字导致重复。我还尝试使用以下方法根据当前时间生成,当在1秒内触发超过1个请求时,它仍然会导致重复。 任何替代解决方案来为每个请求生成唯一ID,而不管并发情况如何? 提前感谢。

  • 问题内容: 如果我需要按顺序调用3 http API,那么以下代码将是更好的选择: 问题答案: 使用像这样的延期。 如果您需要传递范围,则只需执行以下操作