您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源性能測(cè)試工具 > Jmeter
jmeter資源監(jiān)控器開發(fā)??進(jìn)入jmeter的源碼世界
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/3/15 14:51:24 ] 推薦標(biāo)簽:

現(xiàn)在越來(lái)越多人使用了。面對(duì)LoadRunner高昂的價(jià)格,免費(fèi)的jmeter真的是讓我們很是感動(dòng)啊。眼淚嘩嘩地。

于是乎現(xiàn)在關(guān)于jmeter應(yīng)用的各種入門教程啊,手冊(cè)翻譯啊,技巧集錦什么的,也越來(lái)越多了。不過(guò)大家可能感受想要而又要不到的是資源監(jiān)控,比如windows、linux的cpu,memory等。其實(shí)有些高手已經(jīng)自己開發(fā)了jmeter的plugin用于監(jiān)控了,但是似乎目前還沒(méi)有人share出來(lái),這些高手呢,相信不會(huì)是本文的主要讀者了。
日前接受了任務(wù),希望能用jmeter來(lái)做一些性能測(cè)試。少不得要面對(duì)jmeter缺乏資源監(jiān)控的問(wèn)題:有個(gè)監(jiān)視器,但只能利用tomcat的status頁(yè)監(jiān)視jvm的內(nèi)存和線程情況,功能單薄得像霓裳仙子的那件衣服,馬上要露點(diǎn)了。
看了一下jmeter監(jiān)視器的實(shí)現(xiàn)思路,是解析tomcat的manage上status的xml文件來(lái)獲得數(shù)據(jù),再展現(xiàn)到j(luò)meter的面板上。于是想到,如果通過(guò)修改監(jiān)視器代碼來(lái)解析和展現(xiàn)自己想要的內(nèi)容,再實(shí)現(xiàn)動(dòng)態(tài)的更新服務(wù)器上的xml文件——獲取到資源數(shù)據(jù)寫進(jìn)去,這樣jmeter不可以做到監(jiān)控各種服務(wù)器了么?
好,那么先下手分析jmeter的監(jiān)控器代碼。查了jmeter的開發(fā)手冊(cè),監(jiān)視器代碼沒(méi)有跟其它組件一起,而是單獨(dú)的monitor代碼。源碼分析簡(jiǎn)述如下:

監(jiān)控器代碼srcmonitorcomponentsorgapachejmeter
文件:
monitorutil
       MemoryBenchmark.java
       Stats.java
visualizers
       MonitorAclearcase/" target="_blank" >ccumModel.java
       MonitorGraph.java
       MonitorGuiListener.java
       MonitorHealthPanel.java
       MonitorHealthVisualizer.java
       MonitorListener.java
       MonitorModel.java
       MonitorPerformancePanel.java
       MonitorStats.java
       MonitorTabPane.java
       ServerPanel.java

Stats.java:計(jì)算解析得到的參數(shù)
public static int calculateLoad(Status stat)
public static int calculateStatus(Status stat)
public static int calculateMemoryLoad(Status stat)
public static int calculateThreadLoad(Status stat)

MonitorPerformancePanel.java:監(jiān)視器面板上的信息

MonitorStats.java:監(jiān)視器輸入數(shù)據(jù)
       private static final String HEALTH = "stats.health";
       private static final String LOAD = "stats.load";
       private static final String CPULOAD = "stats.cpuload";
       private static final String MEMLOAD = "stats.memload";
       private static final String THREADLOAD = "stats.threadload";
斜體字部分是jmeter棄置不用的了,原因也寫在MonitorGraph.java的注釋里:”TODO is this needed? It's never read“老外是tmd能扯啊~

MonitorModel.java:生成數(shù)據(jù)模型,繼承自MonitorStats

MonitorGraph.java:圖像繪制
private void drawSample(int x, MonitorModel model, Graphics g, MonitorModel last)

MemoryBenchmark.java:數(shù)據(jù)基準(zhǔn)
                            MonitorStats mstats = new MonitorStats(Stats.calculateStatus(st), Stats.calculateLoad(st), Stats.calculateCpuLoad(st), Stats
                                          .calculateMemoryLoad(st), Stats.calculateThreadLoad(st), "localhost", "8080", "http", System
                                          .currentTimeMillis());
                            MonitorModel monmodel = new MonitorModel(mstats);
                            objs.add(monmodel);

MonitorAccumModel.java:監(jiān)視器數(shù)據(jù)操作相關(guān)


圖片:srccoreorgapachejmeterimages
資源文件(多語(yǔ)言):srccoreorgapachejmeter esources

軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd