懷化市建設(shè)局網(wǎng)站足球世界排名前十
背景
1、想要一款既要能壓數(shù)到mysql,又要能壓數(shù)到postGre,還要能壓數(shù)到oracle的自動化工具
2、能夠很容易編寫insert sql(因為需要指定表和指定字段類型壓數(shù)據(jù)),然后點擊運行按鈕后,就能直接運行;不要寫應(yīng)用代碼,因為我比較懶
3、可以指定測試時間,或者TPS等執(zhí)行時行為。因為壓數(shù)有數(shù)量級要求
4、sql插入的值,最好能動態(tài)生成;
目前選擇了JMeter,初步的用起來還比較的可愛和絲滑。使用步驟和遇到的問題如下:
Q1 JMeter能同時測試 Mysql,postGreSql,oracle 數(shù)據(jù)庫嗎?
能支持的,JMeter 是用java寫的,添加對應(yīng)的JDBC驅(qū)動后,理論上任何數(shù)據(jù)庫都可以進行測試。
這貨還能測試常用的HTTP接口,TCP,FTP等,支持的種類還挺多。
在得到肯定回答后,開始了正式動手
Q2 JMeter 如何下載,安裝和配置了?
兩種下載方式
官網(wǎng),非常慢:下載地址:https://jmeter.apache.org/
百度網(wǎng)盤下載地址: https://pan.baidu.com/s/1Ymoqk9besbSGSVha7OhW3Q 提取碼:altb
和官網(wǎng)源文件 SHA512對比過,沒有更改,請放十二個心使用。
安裝
由于下載的是zip包,解壓到本地目錄即可。入下圖:
配置
系統(tǒng)環(huán)境變量里增加
JMETER_HOME 解壓包目錄
Path %JMETER_HOME%\bin
ClassPath %JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib/logkit-2.0.jar;
啟動
JMeter由于是java開發(fā),運行依賴jvm。具體java安裝配置,不詳講
進入bin目錄。點擊jmeter.bat。
啟動后大概長這樣
Q3 JMeter 如何配置 mysql 連接信息?
把Mysql 驅(qū)動加入到測試計劃里,否則執(zhí)行的時候會找不到對應(yīng)驅(qū)動。在配置頁面—>browse里加入mysql驅(qū)動位置
新建一個ThreadGroup,默認配置就好。
(見名知意,編程術(shù)語里叫線程組,測試術(shù)語里叫做用戶數(shù),可以指定測試的時候,模擬多少個用戶,其實是多少個線程)
在ThreadGroup下新建JDBC鏈接信息。
路徑Add===>Config Element===>JDBC Connection Configuration
配置JDBC鏈接信息。比如數(shù)據(jù)庫url,用戶名,密碼,驅(qū)動名字等。入下圖
Q4 JMeter 如何配置測試的insert sql
在新建的ThreadGroup下新建JDBC Request。路徑 Add—>Sampler---->JDBC Request
簡單的三步配置,即可執(zhí)行sql:
- 指定數(shù)據(jù)源
- 選擇Update Statement
- 填寫Sql
一般到這里,就可以調(diào)試性的執(zhí)行了;如果要查看sql執(zhí)行結(jié)果請看Q9;如果執(zhí)行錯誤,需要排查問題請看Q9和Q8
Q5 Jmeter 在測試 insert 語句時,能動態(tài)生成插入字段的值嗎?
可以的。目前有三種方式支持動態(tài)插入值。
第一種:用戶變量定義
定義用戶變量: 測試計劃里,用戶定義變量設(shè)置
在Sql里,用${變量名}的方式進行使用;
INSERT INTO `orders`(`order_id`,`sku_id`, `pay_type`, `pay_amount`, `pay_time`, `remark`) VALUES (${order_id},1, 1, 12.03, '2023-08-14 14:34:23', '第一個測試');
第二種:從excel文件中指定,不詳述;比第一種值的來源更靈活
第三種:使用JmeterBean shell。非常的靈活,對寫java代碼的同學(xué)無門檻
用法:新建BeanShell PreProcessor :路徑add===》Pre Processor===>eanShell PreProcessor
BeanShell 語法,基本上是java語法。
在sql里使用 ${order_id_shell} 對變量進行引用。這個腳本里,我用時間戳作為訂單ID;注意這個值只支持String
Q6 jmeter 里如何設(shè)置,測試總次數(shù)或者測試持續(xù)時間
想要壓測一定的數(shù)據(jù)量到庫里,不可能只執(zhí)行一次就完了吧??梢栽O(shè)置sql執(zhí)行總次數(shù)或者持續(xù)執(zhí)行sql的時間來解決。
注意 測試總次數(shù)和測試持續(xù)時間,兩者選其一;
測試 總次數(shù)=圖里的線程數(shù)*循環(huán)次數(shù)
測試持續(xù)時間,以秒為單位
Q7 數(shù)據(jù)庫里的自增,在JMeter里能實現(xiàn)嗎?
可以實現(xiàn)的,JMeter里有計數(shù)器,再加上變量引用,能解決自增的問題。并且還能保證在多個線程并發(fā)情況下,保證自增ID的唯一。
新建Counter:路徑 在Add=config Element=>Counter里
填寫;初始值,增量值;申明外部使用的變量名即可;使用也是通過${order_id_auto_incr}方式;這個變量在Bean shell腳本里也可以使用;大大增強了編碼的靈活性
Q8 JMeter里能看到執(zhí)行的錯誤日志嗎?
如果不小心編寫的腳本有問題,執(zhí)行的時候,報錯了,需要去排查,可以看JMeter本身的執(zhí)行日志,在安裝目錄下的\bin\jmeter.log里
Q9 JMeter 能看到SQL執(zhí)行結(jié)果嗎?
想看看SQL執(zhí)行結(jié)果,或者類似的HTTP執(zhí)行返回后的結(jié)果 可在View Results Tree里查看。路徑 Add===>Listener===>View Results Tree
之前沒配置mysql 驅(qū)動jar包,返回報錯了
Q10 JMeter如何查看測試報告
預(yù)測試已通過,正式壓測后,想看看測試接口執(zhí)行總次數(shù)(Samples),TPS(Throught),平均相應(yīng)時間(Average),最大響應(yīng)時間(Max),最小響應(yīng)時間(Min),接口正確率(Std.Dev),錯誤率(Error)等指標(biāo),需要添加 Summary Report。路徑 Add===>Listener======Summary Report
總結(jié)
天天寫CRUD接口,到底寫的這些接口性能咋樣了?敢拿出來遛遛嗎?JMeter可以讓我們用數(shù)據(jù)來說話;我寫的接口性能非常好,延遲小,吞吐量大。每個程序員都值得試試