如何更高效的進行數據庫壓力測試

SQL 腳本語言 Java 文章 ONE新聞 2017-05-07

版權聲明:本文為原創文章,轉載請先聯繫並標明出處

故事發生在2013年,long long ago,公司有個項目在針對數據庫選型的時候曾經做過一次POC性能測試,那次主要是比較在公司的業務場景下,hana和Oracle的處理能力,那個時候還在使用LoadRunner,當時為了屏蔽應用本身對結果的影響,特意列選了業務系統幾個典型的sql,直接在兩個數據庫上進行壓力測試。

當時真是痛苦的經歷啊,反覆斟酌再三決定使用LoadRunner的java vuser協議,直接通過JDBC連接數據庫,然後執行特定的幾條SQL。

首先是LoadRunner是32 bit版本,所以JDK也只能選擇32 bit版本;

然後建立數據連接,訪問數據庫,執行SQL,所有這些都要自己編碼。當年就是因為不喜歡編碼,才選擇的測試崗啊,為什麼最後還是要來寫代碼(內牛滿面.jpg)。

後來又想到頻繁建立和銷燬數據庫連接簡直是性能殺手,又不得不在LoadRunner裡維護了一個數據庫連接池。(我特麼是在寫一個應用Demo嗎?一副懵逼臉.jpg)

前前後後折騰了半個多月,才終於把編碼簡陋且粗糙的腳本正式跑起來。

經歷過這次之後,再有直接壓測數據庫的事情,我都是能躲就躲,因為我是真的特別特別討厭寫代碼啊,儘管後來因為意志不堅定而又做了一次達夢和Oracle的POC性能測試。

時間再拉回到現在,前段時間公司有個項目做性能測試,因為其中某個核心的業務邏輯是寫在存儲過程的,所以在做性能測試方案的時候,這個存儲過程也入選了測試對象中,儘管我依然還是不願意做針對數據庫的壓力測試,但也沒辦法,誰讓人家頂著“核心”這兩個字的主角光環呢,這個時候我們已經全面使用HyperPacer來進行日常的各種測試工作了。

下面就再來說一說用HyperPacer數據庫壓力測試的過程。

按照國際慣例,還是先show一下完成後的腳本,如下:

如何更高效的進行數據庫壓力測試

是不是很簡單明瞭?在這個腳本里依次使用到了如下幾個元件:配置元件裡的JDBC連接配置、參數化管理器,取樣器裡的JDBC取樣器。

首先在我們的工程裡添加JDBC連接配置,在連接配置填寫信息如下:

如何更高效的進行數據庫壓力測試

都是常規的信息填寫,沒太多可說的。

然後在場景併發測試下添加JDBC取樣器,如下所示:

如何更高效的進行數據庫壓力測試

這裡各個編輯控件和下拉控件的使用及每個選項的說明,只要在HyperPacer的工具欄上點擊幫助就可以看到,已經寫的很清晰了,我們這裡不再重新寫一遍辣麼嚴肅的話了。

在綁定變量賦值的編輯區域裡,我們看到在前兩個變量賦值這裡做了參數化,關於參數化和數據池使用的詳細解釋可以參考社區的其它文章:

《如何在性能測試中實現腳本參數化》這裡需要注意的是:此處綁定變量賦值的順序和個數需要和存儲過程中定義的參數保持完全一致。

在綁定變量類型的編輯區域,這裡的類型只可以是在java.sql.Types中定義的類型,並且要保證和我們調用的存儲過程中的參數類型保持一致。

我們這裡說的類型保持一致要分為兩方面來看:

一方面要保證用於傳參的變量類型保持一致,即這裡寫的JDBC類型要和SQL類型保持一致,關於保持類型一致的轉換映射關係可以查看JDK的官方文檔,針對每一種類型都有很詳細的說明:



這裡注意要根據自己HyperPacer配置使用的JDK版本確定相應的官方文檔,我這裡列出的是1.5版本的一個官方文檔。
另一方面要保證此處填寫的類型與存儲過程的參數類型保持一致,我們知道存儲過程的參數類型有輸入參數IN、輸出參數OUT以及輸入輸出參數IN OUT類型,因此在綁定變量類型這裡也要加上相應的參數類型前綴 。如果沒有加上類型前綴的話,工具默認認為參數類型為IN。比如在咱們的例子中存儲過程最後面的4個參數為輸出參數,則在綁定變量類型這裡填寫類型的時候就需要加上OUT作為前綴。

返回變量列表不要求必須填寫,如果在後面的測試步驟裡需要用到該存儲過程的返回值,就必須要寫,否則可以不寫。在咱們的例子裡,因為這裡返回的“transaction_id”在下一個JDBC取樣器裡要作為調用存儲過程的輸入,所以可以看到咱們填寫了返回變量列表,並且和存儲過程的輸出參數保持一致。

按照上面的講解,再依次將其它要串行執行的存儲過程也如此添加JDBC取樣器並設置好,我們的測試腳本就算是完成了。

如此操作下來,使用HyperPacer進行數據庫壓力測試的腳本設計完成,總共耗時不到5分鐘。然後再回頭想一想前面文章開頭我們說的用LoadRunner來實現數據庫性能測試腳本的工作量。不言而喻,在針對數據庫進行性能測試這件事上,HyperPacer明顯要方便快捷的多。

當然,這樣說絕對沒有詆譭LoadRunner不好的意思,作為一個市場佔有量最大的商業性能測試工具,LoadRunner的功能在每個性能測試從業者心中無疑都是很強大的。只是在細節方面,HyperPacerJmeter作為... 等等,Jmeter?13年的時候我為什麼沒想到用Jmeter去做HANA和Oracle的對比測試?

啊~~~,多麼痛的領悟。

參考文章:

LoadRunner壓力測試實例
原文出處

相關推薦

推薦中...