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

使用动态where子句Gatling JDBC

马坚
2023-03-14

我将Gatling与JDBC feeder一起使用,并希望根据之前请求的响应动态地向JDBC feeder的where子句添加一个参数。这里是我的例子,我试图做一个帖子,创建一个用户,然后让提要使用create user请求返回的userId获取用户生成的UUID,然后用UUID发布一些数据。

val dbConnectionString = "jdbc:mysql://localhost:3306/user"
val sqlQuery = "SELECT user_uuid FROM users where user_id = '${userId}'"
val sqlUserName = "dbUser"
val sqlPassword = "dbPassword"
val sqlQueryFeeder = jdbcFeeder(dbConnectionString, sqlUserName, sqlPassword, sqlQuery)
val uuidPayload = """{"userUUID":"${user_uuid}"}"""

val MyScenario = scenario("MyScenario").exec(
(pause(1, 2))
.exec(http("SubmitFormThatCreatesUserData")
  .post(USER_CREATE_URL)
  .body(StringBody("""{"username":"test@test.com"}""")).asJson
  .header("Accept", "application/json")
  .check(status.is(200))
  .check(jsonPath("$..data.userId").exists.saveAs("userId")))
.feed(sqlQueryFeeder) 
.exec(http("SubmitStuffWithUUID")
  .post(myUUIDPostURL)
  .body(uuidPayload).asJson
  .header("Accept", "application/json")
  .check(status.is(200)))
)

我已经核实了以下内容:

1)用户数据确实在表单帖子上正确插入数据库2)用户ID从表单帖子返回3)用户ID正确保存为Gatling会话变量4)如果我硬编码用户ID变量,SQL查询将正确执行

我遇到的问题是,当我在JDBC提要子句上有Gatling${userId}参数时,它出现userId变量未使用,我收到一个错误,说java.lang.IllegalArgumentException:要求失败:提要不得为空。当我用硬编码的userId替换${userId}时,一切都按预期工作。我只想知道如何在我的JDBC提要子句中使用userId会话参数。

共有1个答案

雷国兴
2023-03-14

调用jdbcFeeder(dbConnectionString,sqlUserName,sqlPassword,sqlQuery)来创建一个jdbcFeeder,它只将字符串作为参数,而不是gatling表达式(比如${userId})。

在您发布的场景中,您并没有真正按照预期使用馈线——它们通常用于让不同的用户从值池中拾取不同的值,而您有一个静态用户名,并且只获取从db返回的第一个值。通常情况下,在场景的中间提取外部数据不是一个好主意,因为这会使计时变得不可预测。

你能查一下并硬编码用户ID吗?最好的方法是获取所有用户数据,并在模拟的块之前在中查找UUID之类的内容。然而,你不能在那里使用加特林DSL。

您还可以使用scala变量来存储用户_uuid并定义一个内联的feeder,但是如果您确实需要支持多个用户,这将变得很麻烦

 类似资料:
  • 问题内容: 我试图建立一个查询,其中基于用户选择从客户端发送一些字段。我计划根据用户的选择创建一个动态查询。尽管我可以简单地用一些Java代码来完成它,并且让hibernate为我激发该查询并返回结果。 我的问题是,我可以使用内置hibernate机制来做同样的事情。例如我会得到一张地图说 唯一的区别是地图可以包含的值的数量,并基于此我想创建一个查询 提前致谢 问题答案: 通过使用条件,这应该不成

  • 问题 你希望创建一个字典来构造动态的where子句并且希望能够在查询语句中使用。 解决 >>> import web >>> db = web.database(dbn='postgres', db='mydb', user='postgres') >>> where_dict = {'col1': 1, col2: 'sometext'} >>> db.delete('mytable', whe

  • 由于在抽象中解释我要做什么有点困难,所以我克隆了spring-boot-sample-data-jpa项目,并对其进行了修改,以展示我正在尝试做什么的示例。 我有这些模型类,您将注意到和扩展了实体。 我正在尝试编写一个查询,返回包含或的所有城市,其主要运动是给定类型的。 我编写了一个JPQL版本的查询,它有点难看(我不喜欢部分来表示它是一家水疗酒店),但似乎返回了我想要的。 但该查询的QueryD

  • 问题内容: 我有一个包含多个搜索条件的搜索页面 员工姓名 员工ID 入职日期 部门 等等 用户可以提供一个或多个搜索条件。我需要查询数据库以获取搜索结果。 使用纯JDBC,有两种方法可以实现此目的。 通过附加用户提供的搜索条件来准备SQL查询。 例如: 使用 例如: 此答案说明,像上面的ex 1一样,可以修改ex2,如下所示 然后仔细地(牢记参数索引)将输入设置为准备好的语句。听起来这不是一个非常

  • 根据给定的表数据,第三行中的非空字段是“field1”和“field3”。因此WHERE子句将是: 我如何编写一个具有动态WHERE子句的通用SQL来满足这个需求?