之前試過(guò)將輸入數(shù)據(jù)參數(shù)化從cvs讀入,然后想到如果改為從數(shù)據(jù)庫(kù)讀數(shù)據(jù)呢,或者是連接數(shù)據(jù)庫(kù)進(jìn)行壓力測(cè)試應(yīng)該怎么做呢。
一般做服務(wù)器壓力測(cè)試時(shí)JMeter是直接在服務(wù)器下運(yùn)行,避免網(wǎng)絡(luò)環(huán)境對(duì)響應(yīng)時(shí)間測(cè)試結(jié)果的影響。考慮到我不能在服務(wù)器下亂來(lái)。。。所以在自己電腦上弄個(gè)數(shù)據(jù)庫(kù)來(lái)試下。這里使用SQLite,輕量級(jí),比較簡(jiǎn)單。
一、SQLite3創(chuàng)建數(shù)據(jù)庫(kù),創(chuàng)建表,及測(cè)試中需要用到的數(shù)據(jù)
mac下是自帶的,windows下應(yīng)該也是,在終端輸入sqlite3可以查看。輸入sqlite3+數(shù)據(jù)庫(kù)名字可直接進(jìn)入該數(shù)據(jù)庫(kù)。接著創(chuàng)建表,及等下需要用到的四組數(shù)據(jù)。
用select from查看數(shù)據(jù)時(shí),發(fā)現(xiàn)這樣顯示看的超級(jí)不方便。可以通過(guò)以下紅框中命令來(lái)更改下查看格式。
二、JMeter連接sqlite
首先要下載sqlite jdbc(Java Data Base Connectivity,java數(shù)據(jù)庫(kù)連接)jar包。網(wǎng)上好多jmeter連接數(shù)據(jù)庫(kù)的都是用的mysql....這個(gè)sqlite的最后終于被我找到了....鏈接如下:https://bitbucket.org/xerial/sqlite-jdbc/downloads/?
下載后放到j(luò)meter/lib目錄下就可以了。JMeter中測(cè)試計(jì)劃添加jar包路徑(應(yīng)該是,如果放到j(luò)meter/lib目錄下這里就不用添加了~)。
添加JDBC Connection Configuration,對(duì)數(shù)據(jù)庫(kù)連接進(jìn)行設(shè)置。Database URL那里相當(dāng)于告訴jmeter去連接哪個(gè)數(shù)據(jù)庫(kù)。
這里用sqlite創(chuàng)建的數(shù)據(jù)庫(kù)是沒(méi)有username和password的,所以留空。如果用mysql一般會(huì)設(shè)置一下,填入就好了。
然后添加JDBC Request。Variable Name與JDBC Connection Configuration中保持一致就好。
寫(xiě)下向數(shù)據(jù)庫(kù)請(qǐng)求數(shù)據(jù)的語(yǔ)句:select * from MEASURE。這里MEASURE是之前在數(shù)據(jù)庫(kù)test.db下創(chuàng)建的表名。
在Result variable name中設(shè)置,數(shù)據(jù)庫(kù)返回結(jié)果保存在這個(gè)對(duì)象中。
三、獲取數(shù)據(jù)庫(kù)返回結(jié)果并作為下一個(gè)接口的請(qǐng)求參數(shù)
這里用到后置處理器BeanShell,代碼將數(shù)據(jù)保存在參數(shù)中,見(jiàn)圖。
measureObj為上個(gè)圖中保存數(shù)據(jù)庫(kù)數(shù)據(jù)的對(duì)象。
接口中請(qǐng)求參數(shù)填寫(xiě)時(shí)使用${}格式。
可以看到JDBC請(qǐng)求的返回?cái)?shù)據(jù)的第一行數(shù)據(jù)如下。
再看下測(cè)試接口請(qǐng)求中的入?yún)ⅰ?shù)據(jù)一致!說(shuō)明成功的將數(shù)據(jù)庫(kù)獲取的數(shù)據(jù)參數(shù)化,并在下一個(gè)接口的入?yún)⒅杏玫健?/p>
四、遺留疑難雜癥
這里只將數(shù)據(jù)庫(kù)的一行數(shù)據(jù)參數(shù)化了。但是數(shù)據(jù)庫(kù)里有4行.......還沒(méi)弄明白怎么在每一次循環(huán)(即每一次測(cè)試該業(yè)務(wù)接口)時(shí),用到數(shù)據(jù)庫(kù)獲取的不同行的數(shù)據(jù)......先把這個(gè)問(wèn)題在這MARK下=。=
結(jié)束~
加油~