版權聲明:本文爲原創文章,轉載請先聯繫並標明出處
故事發生在2013年,long long ago,公司有個項目在針對數據庫選型的時候曾經作過一次POC性能測試,那次主要是比較在公司的業務場景下,hana和Oracle的處理能力,那個時候還在使用LoadRunner,當時爲了屏蔽應用自己對結果的影響,特地列選了業務系統幾個典型的sql,直接在兩個數據庫上進行壓力測試。html
當時真是痛苦的經歷啊,反覆斟酌再三決定使用LoadRunner的java vuser協議,直接經過JDBC鏈接數據庫,而後執行特定的幾條SQL。java
首先是LoadRunner是32 bit版本,因此JDK也只能選擇32 bit版本;sql
而後創建數據鏈接,訪問數據庫,執行SQL,全部這些都要本身編碼。當年就是由於不喜歡編碼,才選擇的測試崗啊,爲何最後仍是要來寫代碼(內牛滿面.jpg)。數據庫
後來又想到頻繁創建和銷燬數據庫鏈接簡直是性能殺手,又不得不在LoadRunner裏維護了一個數據庫鏈接池。(我特麼是在寫一個應用Demo嗎?一副懵逼臉.jpg)併發
前先後後折騰了半個多月,才終於把編碼簡陋且粗糙的腳本正式跑起來。oracle
經歷過此次以後,再有直接壓測數據庫的事情,我都是能躲就躲,由於我是真的特別特別討厭寫代碼啊,儘管後來由於意志不堅決而又作了一次達夢和Oracle的POC性能測試。app
時間再拉回到如今,前段時間公司有個項目作性能測試,由於其中某個核心的業務邏輯是寫在存儲過程的,因此在作性能測試方案的時候,這個存儲過程也入選了測試對象中,儘管我依然仍是不肯意作針對數據庫的壓力測試,但也沒辦法,誰讓人家頂着「核心」這兩個字的主角光環呢,這個時候咱們已經全面使用HyperPacer來進行平常的各類測試工做了。ide
下面就再來講一說用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的功能在每一個性能測試從業者心中無疑都是很強大的。只是在細節方面,HyperPacer和Jmeter做爲... 等等,Jmeter?13年的時候我爲何沒想到用Jmeter去作HANA和Oracle的對比測試?
啊~~~,多麼痛的領悟。
參考文章: LoadRunner壓力測試實例 原文出處