JMeter測試JDBC應用的實例
一
項目基本背景
某遊樂園為應對春節入園高峰,需對入園的閘機檢票系統進行針對性的性能測試,然後依據測試結果對系統的軟硬體等進行相應的調整。
此閘機檢票系統是由國外開發團隊基於Dephil開發並運行在Windows系統中的一個系統,有關於業務流程和業務邏輯並沒有相應的文檔進行說明。由於比較清楚此閘機系統是與資料庫直連,所有的操作都是直接對資料庫進行讀寫等操作,所以最終確定對該系統的性能測試主要就是對資料庫的性能測試
測試基本流程
二
工具的選取
01
目前針對JDBC應用進行性能測試的工具比較多,LoadRunner作為一款比較成功的商業軟體,能通過VirtualUser Generator生成代理和虛擬用戶來模擬業務流程和真正用戶的操作行為,而且後期的數據處理和報表生成功能十分強大。JMeter作為一款開源軟體,安裝簡單,不依賴於界面,腳本維護方便,作為性能測試工具功能比較完善。
就軟體功能的優缺點而言,LoadRunner自然是最好的選擇,但是LoadRunner免費版的只提供50個Virtual User,無法滿足客戶需求,所以性能測試執行的工具還是選擇了開源免費的JMeter。不過LoadRunner依舊可以作為我們腳本製作的輔助工具,比如抓取系統操作過程中調用的SQL語句。
此閘機檢票系統有一個比較突出的特點是會跟一些外接硬體進行交互,在交互過程中也會執行一些SQL語句。由於LoadRunner自身的缺陷,導致系統與硬體交互時調用的SQL語句無法被抓取,此時必須使用DB Trace將LoadRunner未抓取部分的SQL語句找到,填充到我們編輯的腳本中。
基本思路確定後,接下來就是將思路付諸行動
抓取並提取SQL語句
02
打開LoadRunner創建一個COM/DCOM協議的腳本
在LoadRunner的錄製功能中完成配置
開始錄製後在檢票系統中完成所有實際需要進行的操作,結束錄製並等待記錄生成
通過LoadRunner中的搜索功能搜索出所有的SQL語句,提取後按照先後順序進行排列
然後通過DB Trace抓取LoadRunner未能抓取部分的SQL語句,將其整理到LoadRunner獲得的SQL語句列表中去。至此我們已經獲得了全部我們想要的SQL語句。
完成腳本的編寫及調試
03
前期已經已經確定了具體執行性能測試的工具是JMeter,接下來就是進行一系列的配置及將得到的SQL語句移植到JMeter腳本中。
首先添加資料庫的配置文件並修改相應的參數
然後創建線程組,將得到的SQL語句按照先後順序放到JDBC Request中
最後提供相應的數據並運行,進行必要的調試
JMeter腳本的一些情況說明
04
Q:腳本中有大量的JDBC Request,為什麼不是將所有的SQL語句放到同一個Request中?
A:由於下邊的SQL語句可能需要從上邊的SQL語句中獲取相應的值,所以需要分開並將上邊SQL語句中得到的某些欄位結果進行參數化處理。
Q:如何實現腳本中欄位的參數化處理及傳遞?
A:首先在Variable names中對獲得的不同的數據分別進行定義並命名,然後在後續的JDBC Request中使用
Q:進行參數化調用時為何需要加上「_1」?
A:同一條SQL語句可能會搜索出多條記錄,那麼參數化後的欄位名稱會代表多個值,加上「_1」表示取這些值中的第一個。
Q:Timer加在JDBC Request內和外有什麼區別?
A:Timer加在JDBC Request外表示對所有的Request都起作用,每執行一個JDBC Request都會首先執行一次Timer。Timer加在JDBC Request內表示只對當前Request起作用,執行當前的request時會首先執行一次Timer,不會對其他的Request有任何的影響。
三
典型問題及解決辦法
1.問題:系統調取硬體執行指令部分的操作無法被LoadRunner捕獲。
解決辦法:嘗試過使用軟體來替代硬體的方式,仍舊無法解決。最後使用DB Trace獲取相應的SQL語句來補全LoadRunner所缺失的那部分。
2.問題:JMeter腳本完成後無法成功運行並報錯。
解決辦法:根據報錯的具體情況進行處理,很大的可能性是因為沒有將sqlserver的jar包放到JMeter文件夾的lib目錄下。
3.問題:JMeter 腳本中只有一條SQL語句時是可以成功運行的,但是多條SQL語句就無法正常運行。
解決辦法:在配置JDBC Connection Configuration文件時,Database URL中應當添加上「allowMultiQueries=true」。
4.問題:當一個JDBC Request中只有select語句時可以成功運行,但是含有其他類型的SQL語句時就無法成功運行。
解決辦法:將JDBC Request中的Query Type修改為「Callable Statement」
四
心得體會
1. 並不是所有的不清楚詳細業務邏輯的系統都是不可以進行性能測試的,性能測試對於業務邏輯的知情度要求會低一點。
2. 性能測試不是功能測試,在進行性能測試時要進行思維的轉變,它不要像功能測試那樣要求面面俱到。在進行性能測試時有些不重要的點是可以捨棄的。
更多關於測試方面的文章,請前往51Testing軟體測試網學習哦~
※關於PWA-Progressive Web App的一些測試思考
※一次精疲力盡的改Bug經歷
TAG:51軟體測試網 |