使用数据库进行参数化

参数化性能脚本的另一种方法是通过 JDBC 使用数据库数据。JDBC 是一个应用程序编程接口,用于定义客户端如何访问数据库。

首先,将 JDBC 驱动程序下载到你的数据库(请参阅数据库供应商)。例如,可以在这里找到 mysql 驱动程序。然后,你可以通过使用以下表单将 .jar 文件添加到测试计划中来添加它:

StackOverflow 文档

但最好在 lib 文件夹中添加 Jar 文件并重启 JMeter。

之后,使用“JDBC 连接配置”元素配置数据库连接。像这样: 右键单击 Thread Group - > Add - > Config Element - > JDBC Connection Configuration

StackOverflow 文档

‘JDBC 连接配置’参数:

  • 名称 - 将在线程组树中显示的连接配置的名称
  • 变量名称 - 将用作数据库连接的唯一标识符的名称(可以使用多个连接,每个连接将绑定到不同的名称)
  • 最大连接数 - 连接池中允许的最大连接数。在 0 的情况下,每个线程将获得其自己的池,其中包含单个连接
  • Max Wait(ms) - 如果在 db 连接期间超过指定的超时,则池会引发错误
  • Eviction Runs 之间的时间(毫秒) - 从数据库中驱逐未使用的连接的线程运行之间暂停的毫秒数
  • 自动提交 - 是为相关数据库连接打开自动提交
  • 空闲时测试 - 在检测到有效请求之前检查空闲连接。更多细节:BasicDataSource.html#getTestWhileIdle
  • Soft Min Evictable Idle Time(ms) - 指定连接在数据库池中空闲之前可以被驱逐的时间段。更多细节:BasicDataSource.html#getSoftMinEvictableIdleTimeMillis
  • 验证查询 - 将用于验证数据库是否仍在响应的运行状况检查查询
  • 数据库 URL - 数据库的 JDBC 连接字符串。请看这里的例子
  • JDBC 驱动程序类 - 适当的驱动程序类名称(特定于每个数据库)。例如,MySql db 的’com.mysql.jdbc.Driver’
  • 用户名 - 数据库用户名
  • 密码 - 数据库密码(将在测试计划中未加密存储)

在我们的例子中,我们只需要设置必填字段:

  • 变量名绑定到池。
  • 数据库 URL
  • JDBC 驱动程序类
  • 用户名
  • 密码

屏幕中的其余字段可以保留为默认值: StackOverflow 文档

我们假设我们将测试用户凭据存储在数据库中: StackOverflow 文档

现在,当配置数据库连接时,我们可以添加 JDBC 请求本身并使用其查询从数据库获取所有凭据: 右键单击 Thread Group - > Add - > Sample - > JDBC Request

通过使用’Select Statement’查询和’Variable Names’,我们可以解析对自定义变量的响应。

StackOverflow 文档

我们现在将拥有可在后续请求中进一步使用的 JMeter 变量。将使用增量后缀(email_1,email_2,email_3 ……)创建指定的变量。

要在登录请求中使用这些变量,我们需要添加一个计数器,用于从 JDBC 查询响应中访问正确的值。要在 JMeter 中添加’Counter’元素: 右键单击 Thread Group - > Add - > Config Element - > Counter

StackOverflow 文档

之后,我们可以使用__V 函数更新登录请求。这将返回计算变量名称表达式的结果,并可用于计算嵌套变量引用:

StackOverflow 文档

指定的配置足以使用数据库值跨不同用户运行脚本: StackOverflow 文档 StackOverflow 文档