如何在 SQL Query 中参数化 IN 子句以在 JMETER 中使用

How to parameterize IN clause in SQL Query to use in JMETER

提问人:JimmyVal3984 提问时间:3/2/2022 更新时间:3/2/2022 访问量:370

问:

我需要参数化要在 JMETER 中使用的 SQL 查询,以便每次触发时,都会从要在 IN 子句中使用的值列表中随机选取一个值。

家长查询 - 从员工中选择 *,其中Emp_Id在 ( 3,9,11,12,13) 和 Dept_Name 在('HR',IT','Admin','Audit')

当我通过JDBC触发查询请求时,发布参数化,请求运行不同用户需要进行随机选择。 前任: 查询 1 应类似于 - 从 Employee 中选择 *,其中 Emp_Id 在 ( 3,9) 和 Dept_Name 在 ('HR',IT') 中

查询 2 应类似于 - 从员工中选择 *,其中 Emp_Id 在 ( 11,12,13) 和 Dept_Name 在 ('HR',IT','Admin')

我正在尝试使用CSV数据集配置,但无法实现上述输出。

sql jmeter 参数传递 预备语句

评论


答:

0赞 Dmitri T 3/2/2022 #1

首先,我建议重新考虑您的整个方法,因为测试需要是可重复的,如果您需要检查 emp 和 dept ID 的所有可能组合 - 进行成对测试,将生成的查询存储在 CSV 文件中,并使用 CSV 数据集配置参数化查询。

如果您仍然想让参数的数量绝对随机,您可以采用以下方法:

  1. 用户定义的变量添加到测试计划中,并在其中定义以下变量:

    Emp_Id=3,9,11,12,13
    Dept_Name=HR,IT,Admin
    
  2. 修改查询以包含 JMeter 的 __groovy() 函数,如下所示:

    Select * from Employee where Emp_Id in (${__groovy(def values = vars.get('Emp_Id').split('\,').collect(); values.shuffle(); values.take(org.apache.commons.lang3.RandomUtils.nextInt(1\,values.size())).join('\,'),)}) and Dept_Name in(${__groovy(def values = vars.get('Dept_Name').split('\,').collect{value -> "'" + value + "'"}; values.shuffle(); values.take(org.apache.commons.lang3.RandomUtils.nextInt(1\,values.size())).join('\,'),)})
    

演示:

enter image description here