背景
大家在使用jmeter的工作中,可能經常會遇到想把一些結果寫到execl表格中。因為,很多人都習慣用execl表格寫測試用例,就想着讀取表格中的數據,然后再把運行的結果寫到表格中。訴求很簡單,但是,使用jmeter的人都會告訴你,要實現這樣的訴求,去寫java代碼。但是,對於java小白,不懂java代碼的人來說,這就是自己的攔路虎,一時半會搞不定。 那么還有沒有其他辦法呢?
今天,我就教大家一個,不寫代碼,把jmeter運行過程中,想要的信息寫入到execl表格中的辦法。小白,只要仔細看了,跟着操作,也是可以做到的噢。
思路
我們都知道,數據庫,是我們用來存儲數據的軟件服務。而且大多時候,大家用的都是關系型數據庫,就是那種看起來就像execl表格的數據庫。我們把jmeter運行過程中,我們需要的各種數據,用參數接收,然后再把這些數據寫到數據庫中,然后再從數據庫中把這些數據導出到execl表格中,是不是就可以了呢?
你是不是,看了這個思路,立馬就明白了。就想着趕緊動手,干起來呢?
行動
好了,思路有了,我們先來擼一擼,看下怎么動手。
首先:我們想要用數據庫來寫數據,是不是我們應該先在jmeter中配置好jdbc相關配置請求。哪包括哪些呢?JDBC Connection Configuration 肯定是不能少的對吧,然后是用一個JDBC Request 來創建存儲的表對吧,再用一個JDBC Request 寫入我們要存儲的數據對吧,最后,再用一個JDBC Request來導出我們的數據到execl表格對吧。有的同學,可能會說,數據庫有數據了,我直接用數據庫客戶端導出。也行!所以,前面三個,是必不可少的。
接下來:我們應該要准備測試數據,這個測試數據准備,是不是很簡單,我們就用‘csv 數據文件設置’ 是不是,就可以搞定。
然后:我們就是各種接口請求,在接口請求之后,再加上提取器,把我們想要的數據用變量接收。對吧!
看,這些步驟中,我們有說到要寫java代碼嗎?沒有!那,對你來說,有難度嗎?
不過,我還是建議大家,繼續往下看,因為往下看,你還會有意向不到的收獲哦!
先看下,我寫好的代碼結構:

首先,我們要配置數據庫的連接信息,我們可以添加setup線程組,里面放上 JDBC Connection Configuration在這個里面,我們配置上我們用的數據庫信息

然后,我們再在setup線程組中,添加一個JDBC Request,用於創建表。因為,我們創建表只需要執行一次,並不需要執行多次,所有也可以放在setup線程組中。當然,此時的‘僅一次控制器’,你可加可不加。

CREATE TABLE IF NOT EXISTS runresult( user varchar(16), pwd varchar(12), code varchar(10), msg varchar(32), data varchar(128) )ENGINE=InnoDB DEFAULT CHARSET=utf8;
接下來我們就要去掉接口了,添加一個線程組,線程組下,掛你需要的接口,如圖,模擬你的真實接口請求:

這個接口,我們使用一個參數,這些參數來源與我們的測試用例,或者其他的數據文檔,所以,我們可以在前面再加一個 ‘csv 數據文件設置’

發起了一個接口請求,我們跟期望的是接口請求的響應信息中我們需要的部分信息能被截取保存,對吧,所以,我們再接口請求下面增加一個后置處理器,我這個接口返回的是json格式,所以我用json提取器即可,如果你返回的不是json格式,可以選擇自己熟悉的,或者正則提取器這個萬能的,也行。

注意:json提取器,一次提取多個,中間用分號,同時matchNo和DefaultValue值; 還有,一次提取整個Response的json全部信息,單獨用個$即可。
那么,接下來,就是把我們響應的信息,寫到數據庫中了。

insert into runresult values('${mobile}','${passwd}','${code}','${msg}','${response}');
注意: sql語句,不建議大家用占位符的寫法,因為json串的 { 在腳本種,會導致異常,需要特殊處理。因腳本中沒有寫表字段,所以要與創建表時,位置對應,否則,數據就會插錯字段。
好了,到這里,很多人就認為已經完成了,數據的導出,變成人工從數據庫客戶端中導出,這也是可以的。我們為了讓大家一次成行,再添加一個導出功能,省去人工的導出。
我們再添加一個JDBC Request請求,做導出數據。因為,這個我們也只需要執行一次,不需要方法執行,所以,我們可以添加一個teardown線程組

select * from runresult into outfile "/var/lib/mysql-files/resul.xlsx" FIELDS TERMINATED BY "\t" ENCLOSED BY '"';
支持,我們的整個腳本全部寫完了。我們run一下,看下


你這樣操作后,都成功了嗎?
我知道,很多同學,前面都會成功,就是最后一步,導出可能會失敗。這個嘛,與你的數據庫有關。
首先,數據庫必須是mysql數據庫,如果不是,最后一步導出,做不了。 然后,mysql數據庫賬戶要有創建表的權限,沒有創建表的權限,第一步創建表就會失敗. 然后,就是在數據庫中執行 show global variables like '%secure%'; 這一句,返回的secure_file_priv 要為空,不是空,你最后一步也會報錯。
如果最后一步,失敗,你也不想去糾結,哪就把最后的導出,變成手工去數據庫客戶端中導出吧。
總結
這種方法,思路很簡單,只需要知道jmeter如何調用jdbc接口,就能懂,完全不用寫java代碼。對於小白來說,還是很有吸引力的,對吧。
好了,通過這篇文章的學習,你get到其中的思路了嗎?