在Jmeter

时间:2016-04-25 17:24:17

标签: java jdbc jmeter beanshell

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

Production 
host1
dbuser1
dbpassword1
dburl
Tablename : studentinfo

Development
dbuser2
dbpassword2
dburl2
Tablename : studentinfo

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

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

以下是我的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中设置值,并尝试从DB Configuration变量中获取信息。但我无法在DB配置中获取值。

有人可以解释一下吗?出了什么问题或者获得连接的方法是什么?

2 个答案:

答案 0 :(得分:3)

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

考虑使用JMeter Properties而不是JMeter Variables,即将JDBC Connection Configuration中的${dburl}更改为${__P(dburl,)}。对凭证变量执行相同操作。

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

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

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

    dburl=jdbc://somedb:port/etc
    user=foo
    password=bar
    
  3. 参考文献:

答案 1 :(得分:2)

您不需要Beanshell PreProcessor。

对于以下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)} //返回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.

属性读取器文件路径为/path/to/${env}.properties 使用${__P(db_url)}${__P(db_user)}

访问所有变量