在 Jmeter 中动态更改 JDBC 配置

Vas*_*nth 2 java jdbc jmeter beanshell

我需要根据环境确定表是否有数据,例如我有两个两个数据库,一个是开发,另一个是生产,如下所示。

Production 
host1
dbuser1
dbpassword1
dburl
Tablename : studentinfo

Development
dbuser2
dbpassword2
dburl2
Tablename : studentinfo
Run Code Online (Sandbox Code Playgroud)

仅供参考: studentinfo 在两种环境中具有相同的结构。

在Jmeter,用户定义变量(UDV)中,我配置了两组数据库信息。使用 BeanShell 处理器我试图更改数据库连接信息,有没有办法动态更改数据库配置?

下面给出的是我的 Jmeter UDV

env : prod
prod_db_url: dburl
prod_db_user:usr
prod_db_password:password

dev_db_url: dburl
dev_db_user:usr
dev_db_password:password
Run Code Online (Sandbox Code Playgroud)

在我的 Beanshell 预处理器中

String env=vars.get("env");
if(env.equlas("prod")){
   // Load the Prod db into vars
} else if (env.equals("dev")){
   // Load the Dev db into vars
}
Run Code Online (Sandbox Code Playgroud)

在这里,我在 vars 中设置值,并尝试从 DB Configuration 变量中获取信息。但我无法在 DB 配置中获取值。

谁能解释一下?出了什么问题或获得连接的方法是什么?

Dmi*_*i T 5

JDBC 连接配置在用户定义变量之后但任何预处理器之前初始化 ,这就是您看不到值更改的原因。

考虑使用 JMeter 属性而不是 JMeter 变量,${dburl}即将 JDBC 连接配置更改为${__P(dburl,)}. 对凭据变量执行相同操作。

根据您运行测试的方式,您可以设置属性值:

  1. 通过-J命令行参数,如:

    jmeter -Jdburl=jdbc://somedb:port/etc -Juser=foo -Jpassword=bar 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将其放入user.properties文件(位于 JMeter 的“bin”文件夹中),如

    dburl=jdbc://somedb:port/etc
    user=foo
    password=bar
    
    Run Code Online (Sandbox Code Playgroud)

参考: