CBenchmark-一款開源的純C實現的通用性能測試框架

Code Base on https://github.com/charlescui/CBenchmark

 

這是我實現的一款性能測試工具,之前在工作中常用LoadRunner之類的工具來完成性能測試,但受限於LR極其昂貴的Lisence以及難以定製的SDK,於是我用C/C++實現了這個工具,並藉助Linux系統對線程和進程的良好調度,可以實現極高的併發壓力.

 

使用的用例有待補全,請大家持續關注官方主頁或者github項目主頁.

 

----------

 

http://cuiz.me/cbenchmark/2011/07/cbenchmarkjieshao/

介紹:

CBenchmark—-CharlesCui’s Benchmark

本產品是爲了解決性能測試壓力生成的問題.

系統|Platform

在對服務端系統進行性能測試時,目前成熟的解決方案是使用windows系統下LoadRunner等系列產品,而無法找到功能強大的Linux系統下的產品。
本程序目前支持Linux系統,並且理論可以實現跨平臺編譯(作者並沒有實驗過,但本產品並沒有依賴特定系統的庫或者函數).

特點|Feature

  • 本程序和當前性能測試解決方案相比,
    1. 可以實現極高的定製化:開放所有API,用戶可以基於這些API實現自己的性能測試工具.
    2. 無限制:本產品完全免費,不會像現有成熟解決方案一樣基於併發數,或者基於使用協議的Lisense限制。
    3. 高性能高併發:可提供比現有產品高出很多的併發能力,本程序使用C語言實現所有的代碼。
    4. 通用性:由於本產品測試用例的業務實現是由客戶完成,所以本產品的作用不限於某種測試協議,所以本產品是一個通用的性能測試工具.
    5. 執行過程可控:測試執行過程中用戶可以通過Ctrl+C來控制本產品的執行。
    6. 特有的測試用例加載模式:對測試用例加載的模式和市面上的性能測試產品都不一樣,用戶可以將CBenchmark當做第三方庫編碼進入測試代碼,也可以將CBenchmark當做工具,在執行的時候動態加載測試代碼以產生壓力.

本產品理論支持所有的服務端性能測試。
對於非標準協議的性能測試,我推薦您使用本產品。

安裝過程


./configure --prefix=/opt/cbenchmark
make
make install

安裝後產生文件

  • 本程序內容如下:
    1. bin/cbenchmark
    2. include/*.h

TODO

報表

  • 目前本產品提供的測試結果有兩種:
    1. 執行完畢後的文字提示
    2. 執行完畢後的日誌
      作者在未來會提供報表生成工具,
      但不會集成在本產品中,這是爲了保證本產品的乾淨,高效。
      並且在沒有桌面的linux端使用本產品執行性能測試,
      測試結果的顯示手段有限,所以我不建議集成在本工具裏。
      而是最好用其他工具實現,這樣也可以完成分佈式性能測試的圖表結果展現。

使用方法|Usage

請執行bin/cbenchmark -?


[zheng.cuizh@localhost cbenchmark]$ /usr/local/cbenchmark/bin/cbenchmark -?
        CharlesCui's Benchmark
                help you do performance test nice.
-o ["Shell command"]
-f [Output result path]
-F [Dynamic lib path.]
-n [Each thread iterations times]
-c [Concurrence NUM]
-l [Syslog level]
-g [Syslog name,less than 128 char]
-v [Show -o stdoutput]
-t [Selftest]
-x [Scenario id]
-T [Timmer(seconds)].
-s [Select a scenario from list]

作者|Author

gtalk/gmail [email protected]

用例|Example

./features目錄下面是測試插件,目前還沒有完善,現在只實現了ice的測試demo.因爲我一直用cbenchmark測試私有協議以及一部分ice協議,私有協議的測試demo不方便公開,而ice協議的測試demo完全可以給大家借鑑.

ICE測試

如果大家不瞭解ice,可以在這裏學習一下:http://www.zeroc.com/
demo位於./features/ice下,幾乎所有的ice協議測試都可以用這個框架改一改就行.

  • ice測試用例的組成
    1. main.c 該文件爲ice測試用例庫的入口程序,根據cbenchmark加載測試用例庫的約定,該文件實現了一個initialize函數,該函數可以調度測試的執行,比如提供選擇要執行的測試場景等功能,可由用戶定製.
    2. main.h 該文件包含了cbenchmark的頭文件,以及若干工具文件,同時聲明瞭main.c中的函數定義.
    3. mos_perf_test.cpp 該文件包含了mos模塊ice接口的測試代碼,通過將mos_init函數中實現的ice實例:mos傳遞給pVuser→verb指針,從而可以讓真正實現壓力請求的函數:mos_getUserStatus,mos_getUserCount得到該對象的引用,以訪問checkcast後得到的MOSInterfacePrx對象.注意new的使用.
    4. mos_perf_test.h 該文件包含了mos_perf_test.cpp實現的ice連接建立/釋放函數(mos_init(),mos_end()),以及測試方法(mos_getUserStatus,mos_getUserCount).

關於main.c


                                pmw->script.init = mos_init;
                                pmw->script.act = mos_getUserCount;
                                pmw->script.end = mos_end;

這是測試mos_getUserCount函數的場景.
  • 基本的測試思路是:
    1. mos_init函數實現初始化,比如ice協議就是建立連接,並將代理類放到堆中並將指針傳遞給pVuser→verb或者它指向的某個結構,
    2. mos_getUserCount函數實現迭代的測試,也就是在測試過程中,CBenchmark會不斷執行該函數已產生業務上的請求,
    3. mos_end函數實現釋放鏈接操作.

不管怎樣的協議的性能測試,思路如出一轍,你只需按照上面的三條完成業務代碼的編寫,CBenchmark就會幫助你把這個業務邏輯變成高併發高頻率的請求,這樣會瞬間給服務端帶來極大的壓力,從而測試服務器的抗壓性.

TODO

這個用例是我在測試工作中積累的數十個測試場景裏挑選出來的,已經非常的簡單了,但要了解cbenchmark的工作原理,還是需要再閱讀更多的關於cbenchmark的文檔,我會陸續放出.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章