前言:接口出參數(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ù)如下:
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包
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ě)后大致如下:
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é)果
執(zhí)行結(jié)果:
執(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ù)了
起重使用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。
這樣我們值的值既然賦值給一個(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)
獲取到此值后跟接口出參進(jìn)行一致性校驗(yàn)(因?yàn)榍懊嬉呀?jīng)vars.put進(jìn)去了~現(xiàn)直接使用即可)
到此結(jié)束~
另外講下JDBC其它方法的使用
step4:JDBC Request 參數(shù)化
方法(一)、定義變量,在sql query中使用變量:
1、在User Defined Variables或者TestPlan或者CSV Data Set Config 中定義一個(gè)變量:
2、sql query 中使用${變量名}的方式引用:
方法(二)、在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)行。
2、傳遞的參數(shù)值是變量,使用${變量名}的方式
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:
2、執(zhí)行結(jié)果:
解析:
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")
執(zhí)行結(jié)果:
http://www.cnblogs.com/nzg-noway/p/7049367.html