前言:接口出參數(shù)據(jù)與DB數(shù)據(jù)結(jié)合校驗(yàn),使校驗(yàn)力度更準(zhǔn)確~

jmeter自帶插件JDBC Request Sampler

這個(gè)Sampler可以向數(shù)據(jù)庫(kù)發(fā)送一個(gè)jdbc請(qǐng)求(sql語(yǔ)句),并獲取返回的數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行操作。它經(jīng)常需要和JDBC Connection Configuration配置原件(配置數(shù)據(jù)庫(kù)連接的相關(guān)屬性,如連接名、密碼等)一起使用。

 

setp1:準(zhǔn)備工作

1.本文使用的是sqlserver數(shù)據(jù)庫(kù)進(jìn)行測(cè)試,數(shù)據(jù)庫(kù)的用戶名為sa(你自己的用戶名),用戶名密碼為*********(你自己的密碼)

2.數(shù)據(jù)庫(kù)實(shí)例名:如———TMSS_DB2,庫(kù)名:seg6654,表名:configuration,表數(shù)據(jù)如下:

萬(wàn)碼學(xué)堂,電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開(kāi)發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

3、添加需要的驅(qū)動(dòng)jar包

使用不同的數(shù)據(jù)庫(kù),我們需要引入不同的jar包。

方式1:直接將jar包復(fù)制到j(luò)meter的lib\ext目錄下

  • mysql數(shù)據(jù)庫(kù):無(wú)需引入其他數(shù)據(jù)庫(kù)驅(qū)動(dòng)jar包。

  • sql server 數(shù)據(jù)庫(kù):下載sqljdbc42.jar 放到 jmeter根目錄的lib目錄下(驅(qū)動(dòng)下載地址http://www.microsoft.com/zh-CN/download/details.aspx?id=11774

  • oracle數(shù)據(jù)庫(kù):將oracle數(shù)據(jù)的安裝目錄下面的\product\10.2.0\db_1\jdbc\lib\ojdbc14.jar 放到j(luò)meter根目錄下的lib目錄下

方式2:通過(guò)Test Plan

  假如我們不使用將jar復(fù)制到j(luò)meter的lib目錄的方式,我們還可以使用Jmeter的Test Plan引入相應(yīng)的jar包,如下面引入sqlserver數(shù)據(jù)的jar包

萬(wàn)碼學(xué)堂,電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開(kāi)發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

step2:配置JDBC Connection Configuration

重要參數(shù)說(shuō)明:

  • Variable Name:數(shù)據(jù)庫(kù)連接池的名稱(chēng),我們可以有多個(gè)jdbc connection configuration,每個(gè)可以起個(gè)不同的名稱(chēng),在jdbc request中可以通過(guò)這個(gè)名稱(chēng)選擇合適的連接池進(jìn)行使用。

  • Database URL:數(shù)據(jù)庫(kù)url,jdbc:mysql://主機(jī)ip或者機(jī)器名稱(chēng):mysql監(jiān)聽(tīng)的端口號(hào)/數(shù)據(jù)庫(kù)名稱(chēng), 如:jdbc:mysql://localhost:3306/test

  • JDBC Driver class:JDBC驅(qū)動(dòng)

  • username:數(shù)據(jù)庫(kù)登陸的用戶名

  • passwrod:數(shù)據(jù)庫(kù)登陸的密碼

  不同數(shù)據(jù)庫(kù)具體的填寫(xiě)方式,可以參考下面的表格:

Datebase

Driver class

Database URL

MySQL

com.mysql.jdbc.Driver

jdbc:mysql://host:port/{dbname}

PostgreSQL

org.postgresql.Driver

jdbc:postgresql:{dbname}

Oracle

oracle.jdbc.driver.OracleDriver

jdbc:oracle:thin:user/pass@//host:port/service

Ingres (2006)

ingres.jdbc.IngresDriver

jdbc:ingres://host:port/db[;attr=value]

MSSQL

com.microsoft.sqlserver.jdbc.SQLServerDriver

或者

net.sourceforge.jtds.jdbc.Driver

jdbc:sqlserver://IP:1433;databaseName=DBname

或者

jdbc:jtds:sqlserver://localhost:1433/"+"library"

 

 

 

 

 

 

 

 

 

 

 

 

 

填寫(xiě)后大致如下:

萬(wàn)碼學(xué)堂,電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開(kāi)發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

step3:配置JDBC Request

重要的參數(shù)說(shuō)明:

  • Variable Name:數(shù)據(jù)庫(kù)連接池的名字,需要與JDBC Connection Configuration的Variable Name Bound Pool名字保持一致

  • Query:填寫(xiě)的sql語(yǔ)句未尾不要加“;”

  • Parameter valus:參數(shù)值

  • Parameter types:參數(shù)類(lèi)型,可參考:Javadoc for java.sql.Types

  • Variable names:保存sql語(yǔ)句返回結(jié)果的變量名

  • Result variable name:創(chuàng)建一個(gè)對(duì)象變量,保存所有返回的結(jié)果

  • Query timeout:查詢超時(shí)時(shí)間

  • Handle result set:定義如何處理由callable statements語(yǔ)句返回的結(jié)果

萬(wàn)碼學(xué)堂,電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開(kāi)發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

執(zhí)行結(jié)果:

萬(wàn)碼學(xué)堂,電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開(kāi)發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

執(zhí)行到這里,我們已經(jīng)將數(shù)據(jù)從數(shù)據(jù)庫(kù)中原樣的查出來(lái)了,但具體如何之取出我們需要的數(shù)據(jù)呢,顯然,假如我們查詢的sql返回的只是一個(gè)數(shù)據(jù),上面的方式已經(jīng)可以滿足我們的需求的,但是如果我們只要public_adresskey的數(shù)據(jù),我們?nèi)绾稳ト∧兀?/p>

 這時(shí)候我們就需要JDBC Request中使用上述說(shuō)的參數(shù)了

萬(wàn)碼學(xué)堂,電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開(kāi)發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

起重使用Variable names和Result variable name均可以,但取值時(shí)key不一樣,比如我們現(xiàn)在就如上面,加一個(gè)Debug sampler

Variable names 對(duì)應(yīng)返回結(jié)果的key為count_1,Result variable name對(duì)應(yīng)返回結(jié)果的key就為result。

萬(wàn)碼學(xué)堂,電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開(kāi)發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

這樣我們值的值既然賦值給一個(gè)key了,那么我們?nèi)绾潍@取result中的public_adress呢?

由于結(jié)果為一個(gè)json數(shù)據(jù)格式,因此先獲取json數(shù)據(jù),之后通過(guò)jsonpath讀取

我們?cè)黾右粋€(gè)Beanshell PostProcessor,通過(guò)vars.getObject(variable).get(index).get(field)函數(shù)獲取

重要的參數(shù)說(shuō)明:

  • Variable :為Variable names或Result variable name設(shè)置的變量名稱(chēng)

  • index:表示在查詢結(jié)果的位置(由于我前面sql語(yǔ)句只限制查詢content,因此為0)

  • field:為查詢字段名稱(chēng)

萬(wàn)碼學(xué)堂,電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開(kāi)發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

 

 

 

 獲取到此值后跟接口出參進(jìn)行一致性校驗(yàn)(因?yàn)榍懊嬉呀?jīng)vars.put進(jìn)去了~現(xiàn)直接使用即可)

萬(wàn)碼學(xué)堂,電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開(kāi)發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

到此結(jié)束~

另外講下JDBC其它方法的使用

step4:JDBC Request 參數(shù)化

方法(一)、定義變量,在sql query中使用變量:

1、在User Defined Variables或者TestPlan或者CSV Data Set Config 中定義一個(gè)變量:

萬(wàn)碼學(xué)堂,電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開(kāi)發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

 

2、sql query 中使用${變量名}的方式引用:

萬(wàn)碼學(xué)堂,電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開(kāi)發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

 

 方法(二)、在sql query中使用”?“作為占位符,并傳遞參數(shù)值和參數(shù)類(lèi)型,如下圖所示:

 1、傳遞的參數(shù)值是常量,如圖傳遞2個(gè)變量,多個(gè)變量使用” , “ 分隔。這里假如你有數(shù)據(jù)是int類(lèi)型的,也要在Parameter types 那里標(biāo)示為varchar類(lèi)型,否則無(wú)法運(yùn)行。

 萬(wàn)碼學(xué)堂,電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開(kāi)發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

2、傳遞的參數(shù)值是變量,使用${變量名}的方式

 萬(wàn)碼學(xué)堂,電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開(kāi)發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

step5:Variables names 參數(shù)使用方法:

jmeter官網(wǎng)給的解釋是:如果給這個(gè)參數(shù)設(shè)置了值,它會(huì)保存sql語(yǔ)句返回的數(shù)據(jù)和返回?cái)?shù)據(jù)的總行數(shù)。假如,sql語(yǔ)句返回2行,3列,且variables names設(shè)置為A,,C,那么如下變量會(huì)被設(shè)置為:

  A_#=2 (總行數(shù))
  A_1=第1列, 第1行
  A_2=第1列, 第2行 
  C_#=2 (總行數(shù)) 
  C_1=第3列, 第1行
  C_2=第3列, 第2行

  • 如果返回結(jié)果為0,那么A_#和C_#會(huì)被設(shè)置為0,其它變量不會(huì)設(shè)置值。

  • 如果第一次返回6行數(shù)據(jù),第二次只返回3行數(shù)據(jù),那么第一次那多的3行數(shù)據(jù)變量會(huì)被清除。

  • 可以使用${A_#}、${A_1}...來(lái)獲取相應(yīng)的值

示例:

  我們還是用上面的數(shù)據(jù)庫(kù),把所有數(shù)據(jù)查出來(lái),test表有有3個(gè)字段,5條記錄(忘記了的可以回到第一步那里查看)

1、添加一個(gè)jdbc request名為”參數(shù)4“,添加一個(gè)”Debug Sampler“用來(lái)查看輸出的結(jié)果,設(shè)置 variables name為column1,column2,column3:

萬(wàn)碼學(xué)堂,電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開(kāi)發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

2、執(zhí)行結(jié)果:

萬(wàn)碼學(xué)堂,電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開(kāi)發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

解析:

  column1代表第一列所有的數(shù)據(jù),column1_#可以獲取到第一列的行數(shù)

  column1_n:獲得第一列第n行的數(shù)據(jù)。

  column2和column3的功能類(lèi)似, 假如我們只需要第一列和第三列的數(shù)據(jù),可以寫(xiě)成column1,,column3,中間的","不可以省略。

step6:Result variable name 參數(shù)使用方法:

如果給這個(gè)參數(shù)設(shè)置值,它會(huì)創(chuàng)建一個(gè)對(duì)象變量,保存所有返回的結(jié)果,獲取具體值的方法:columnValue = vars.getObject("resultObject").get(0).get("Column Name")

萬(wàn)碼學(xué)堂,電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開(kāi)發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

執(zhí)行結(jié)果:

萬(wàn)碼學(xué)堂,電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開(kāi)發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

http://www.cnblogs.com/nzg-noway/p/7049367.html