在 Jmeter 中动态更改 JDBC 配置
Dynamically change JDBC config in Jmeter
我需要确定 table 是否有数据,基于环境,例如我有两个数据库,一个是开发另一个是生产,如下所示。
Production
host1
dbuser1
dbpassword1
dburl
Tablename : studentinfo
Development
dbuser2
dbpassword2
dburl2
Tablename : studentinfo
仅供参考:学生信息在两种环境中具有相同的结构。
在Jmeter User Defined Variable(UDV)中,我配置了两套数据库信息。使用 BeanShell 处理器,我试图更改数据库连接信息,有什么方法可以动态更改 Db Config 吗?
下面是我的 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
在我的 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
}
在这里,我在 vars 中设置值,并尝试从数据库配置变量中获取信息。但我无法在数据库配置中获取值。
谁能解释一下?出了什么问题或获得连接的方法是什么?
为此您不需要 Beanshell 预处理器。
对于以下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
只需更改 env 的值,您就可以使用
访问所有变量值
${__V(${env}_db_url)}
// return prod 或 dev db url 取决于 env 的值。
另一个不错的解决方案:
你能拥有相同的变量并将它们存储在 2 个不同的 属性 文件中吗?
prod.proeprties
db_url=dburl
db_user=usr
db_password=password
dev.properties
db_url=dburl
db_user=usr
db_password=password
您可以使用 JMeter - Property File Reader.
属性 reader 文件路径为 /path/to/${env}.properties
使用 ${__P(db_url)}
、${__P(db_user)}
访问所有变量
JDBC 连接配置在用户定义变量之后初始化,但 在 任何预处理器之前初始化,这就是您看不到值更改的原因。
考虑使用 JMeter 属性而不是 JMeter 变量,即将 JDBC 连接配置中的 ${dburl}
更改为 ${__P(dburl,)}
。对凭据变量执行相同的操作。
根据您 运行 测试的方式,您可以设置属性值:
通过 -J
命令行参数,例如:
jmeter -Jdburl=jdbc://somedb:port/etc -Juser=foo -Jpassword=bar
放入user.properties文件(位于JMeter的"bin"文件夹中)like
dburl=jdbc://somedb:port/etc
user=foo
password=bar
参考文献:
我需要确定 table 是否有数据,基于环境,例如我有两个数据库,一个是开发另一个是生产,如下所示。
Production
host1
dbuser1
dbpassword1
dburl
Tablename : studentinfo
Development
dbuser2
dbpassword2
dburl2
Tablename : studentinfo
仅供参考:学生信息在两种环境中具有相同的结构。
在Jmeter User Defined Variable(UDV)中,我配置了两套数据库信息。使用 BeanShell 处理器,我试图更改数据库连接信息,有什么方法可以动态更改 Db Config 吗?
下面是我的 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
在我的 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
}
在这里,我在 vars 中设置值,并尝试从数据库配置变量中获取信息。但我无法在数据库配置中获取值。
谁能解释一下?出了什么问题或获得连接的方法是什么?
为此您不需要 Beanshell 预处理器。
对于以下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
只需更改 env 的值,您就可以使用
访问所有变量值${__V(${env}_db_url)}
// return prod 或 dev db url 取决于 env 的值。
另一个不错的解决方案:
你能拥有相同的变量并将它们存储在 2 个不同的 属性 文件中吗?
prod.proeprties
db_url=dburl
db_user=usr
db_password=password
dev.properties
db_url=dburl
db_user=usr
db_password=password
您可以使用 JMeter - Property File Reader.
属性 reader 文件路径为 /path/to/${env}.properties
使用 ${__P(db_url)}
、${__P(db_user)}
JDBC 连接配置在用户定义变量之后初始化,但 在 任何预处理器之前初始化,这就是您看不到值更改的原因。
考虑使用 JMeter 属性而不是 JMeter 变量,即将 JDBC 连接配置中的 ${dburl}
更改为 ${__P(dburl,)}
。对凭据变量执行相同的操作。
根据您 运行 测试的方式,您可以设置属性值:
通过
-J
命令行参数,例如:jmeter -Jdburl=jdbc://somedb:port/etc -Juser=foo -Jpassword=bar
放入user.properties文件(位于JMeter的"bin"文件夹中)like
dburl=jdbc://somedb:port/etc user=foo password=bar
参考文献: