2016-04-25 91 views
1

我需要確定,無論表是否有數據,基於環境,比如說我有兩個兩個數據庫,一個是開發另一個是下面給出的產品。動態更改Jmeter中的JDBC配置

Production 
host1 
dbuser1 
dbpassword1 
dburl 
Tablename : studentinfo 

Development 
dbuser2 
dbpassword2 
dburl2 
Tablename : studentinfo 

FYI:studentinfo在兩種環境下都具有相同的結構。

在Jmeter中,用戶定義變量(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 
} 

在這裏,我在瓦爾設定值,並試圖從數據庫配置變量的信息。但我無法在數據庫配置中獲取值。

任何人都可以解釋一下嗎?出了什麼問題或者連接的方式是什麼?

+0

類似的問題,HTTP://stackoverflow.com/questions/36779835/manipulating-jmeter-jdbc-connection-fields-in-java -beanshell-code?rq = 1 –

回答

2

您不需要一個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)} //返回督促或開發數據庫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 訪問所有的v使用${__P(db_url)}${__P(db_user)}

+0

這是完美的。 –

+0

我無法使用$ {env} .properties加載.properties文件,我得到null。 –

+0

@VasanthDha,env應該是UDV。它不能在屬性文件本身 – vins

3

JDBC連接配置ariables之後用戶定義的變量初始化,但以前中的預處理程序,這就是爲什麼你看不到價值的變化。

考慮使用JMeter屬性而不是JMeter變量,即將JDBC連接配置中的${dburl}更改爲${__P(dburl,)}。對憑證變量執行相同操作。

取決於您如何運行你的測試,你可以設置屬性值:

  1. 通過-J命令行參數,如:

    jmeter -Jdburl=jdbc://somedb:port/etc -Juser=foo -Jpassword=bar 
    
  2. 把它放進user.properties文件(位於JMeter的「bin」文件夾中)like

    dburl=jdbc://somedb:port/etc 
    user=foo 
    password=bar 
    

參考文獻:

+0

這是隱藏在jmeter文檔中的東西 你能指出我在哪裏在JMeter文檔中JDBC配置初始化之前的任何PreProcessor? 謝謝! – user63898