此文已由做者夏鵬受權網易雲社區發佈。
java
歡迎訪問網易雲社區,瞭解更多網易技術產品運營經驗。apache
Apache Jmeter是基於Java開發的性能測試工具,支持多種協議的測試,包括:Web(HTTP/HTTPS)、SOAP、FTP、Database(JDBC)、LDAP、Mail(POP3/IMAP)、JAVA;還提供了多種性能數據統計報表,使用簡單方便簡直是性能測試中居家旅行殺人越貨之必備;可是~本次性能測試需求是Thrift服務接口,並不在Jmeter支持的協議範圍內,繼續用鐘意的Jmeter完成Thrift服務的接口壓測就須要進行二次開發來實現,如下簡單介紹一下經過Jmeter進行擴展協議二次開發以支持Thrift服務接口的壓測需求的過程。編程
Thrift是一個軟件框架,用來進行可擴展且跨語言的服務的開發。它結合了功能強大的軟件堆棧和代碼生成引擎,以構建在 C++, Java, Go,Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 這些編程語言間無縫結合的、高效的服務。api
Thrift也支持Java就好辦了~服務器
1.Java測試代碼編寫框架
1-1測試項目編程語言
rec包是Thrift服務類工具
ThriftClientTest是測試類性能
1-2引入依賴測試
1-3測試代碼
測試類須要繼承Jmeter的AbstractJavaSamplerClient類,而後重寫如下方法:
①public void setupTest(JavaSamplerContext context);初始化方法,用於初始化性能測試的每一個線程,每一個線程前都會執行一次。
初始化Thrift客戶端
②public Arguments getDefaultParameters();設置入參,已設置的參數會顯示在jmeter GUI的參數列表中。
設置本次測試接口須要參數化的參數user_id
③public SampleResult runTest(JavaSamplerContext context);性能測試的線程運行體,測試執行主體,從context中獲取參數,並調用被測方法,完成與服務器的交互。該方法是java Sampler實現的重點,執行次數取決於線程數和循環次數。
設置請求屬性以及具體的調用邏輯
sampleStart()開始統計響應時間標記、sampleEnd()結束統計響應時間標記,兩個時間戳之差就是一次java請求的響應時間,單位是ms。
System.out輸出會顯示在啓動JMeter時的命令窗口內,有助於監控結果但過多的輸出會影響性能的準確性。
④public void teardownTest(JavaSamplerContext context);測試結束時調用,每一個線程執行一次。setupTest和teardownTest方法不須要時能夠不寫。
關閉相關的資源
全部重寫方法執行的前後順序爲:
getDefaultParameters() --> setupTest(JavaSamplerContext context) --> runTest(JavaSamplerContext context) --> teardownTest(JavaSamplerContext context)
1-4集成到Jmeter
com.netease.rec包和ThriftClientTest測試類分別打成jar、Thrift中的jar包 libthrift-0.9.3.jar, slf4j-api-1.7.12.jar放到apache-jmeter-2.13/lib/ext下
2.Jmeter創建測試計劃
2-1從新啓動Jmeter。新建Thread Group, 在Thread Group下,Thread Group -> Add -> Sampler -> Java Request,在Classname下選擇新作的plugin的類名。
2-2最後,配置相應的線程數,循環次數,添加聚合報告就能夠進行Thrift服務接口的壓力測試了
網易雲免費體驗館,0成本體驗20+款雲產品!
更多網易技術、產品、運營經驗分享請點擊。
相關文章:
【推薦】 Android事件分發機制淺析(3)