JMeter UI組件使用的一個問題

概述

本文介紹在利用JMeter進行擴展插件,利用JMeter提供的組件的時候碰到的問題狡逢,讀者如果碰到有類似的問題拼卵,通過閱讀此篇文章腋腮,避免在使用JMeter提供的UI組件的時候浪費寶貴的時間。

問題描述

xmeter君最近在擴展JMeter插件的時候徊哑,需要有一個界面允許測試人員來開發(fā)測試腳本聪富,而通過JMeter來擴展界面的時候,使用JMeter提供的一些組件能讓開發(fā)人員提高效率窒盐,減少重復(fù)造輪子的時間蟹漓。JMeter提供的一些內(nèi)置的可重用的UI組件一般都在*.gui包中源内,比如用于布局的各種layout在core目錄的/org/apache/jmeter/gui/util包,比如HorizontalPanel嗽交,允許加入該Panel的組件以水平布局的方式加到界面中颂斜;又比如說JLabeledTextField,該控件主要用于顯示一個Label和TextField的組合盒让,使用該組件可以減少生成UI過程中的代碼量(如果讀者想設(shè)置JMeter的開發(fā)環(huán)境,可以參考xmeter君寫的這篇文章 )姨蝴。

如下圖所示左医,xmeter君要開發(fā)的這個插件的需求如下同木。編輯腳本的人員在選擇“Functions”下拉列表框的時候,綠色部分的組件是動態(tài)變化的:如果當前選擇的是add秕硝,那么下面出現(xiàn)的帶有兩個輸入?yún)?shù)的控件組合斩萌;如果當前的選擇變成了另外的屏轰,那么綠色部分的組件就會發(fā)生變化颊郎。其中綠色部分的是一個Panel,每個參數(shù)(下圖為num1和num2)會單獨生成一個Panel霎苗,并加入綠色的Panel中姆吭。

那今天要說的這個控件的名字就是上文提到的綠色的Panel,使用的是由JMeter提供的HorizontalPanel唁盏。在用戶選擇的Functions有變化之后内狸,代碼的大概邏輯如下,

1)監(jiān)聽到用戶選擇的Functions有變化

2)刪除綠色Panel下的所有控件

3)根據(jù)新選擇的Function厘擂,生成新的針對參數(shù)的Panel昆淡,并加到綠色的Panel中

4)重繪綠色Panel

但是實際上使用JMeter提供的HorizontalPanel后效果如下,可以看到在每次用戶更改了一次選擇之后刽严,都會“遺留”下一部分內(nèi)容(下圖藍色和紅色是對Panel的border進行著色,這樣更易于理解)舞萄≌2梗看起來是調(diào)用HorizontalPanel的刪除子組件的方法不能完全刪除干凈引起的。

查看HorizontalPanel的源代碼倒脓,在add方法中發(fā)現(xiàn)了問題所在撑螺,特別是注釋中寫的:“這個方法在調(diào)用remove的時候會有坑,但是目前這個坑還暫時碰不到崎弃,所以先不管它了”甘晤『耍可是在xmeter君使用該控件的時候,很不幸踩到了這個坑安皱。由于調(diào)用HorizontalPanel的刪除組件的方法并不會清除在該組件中定義的另外一個容器組件(subPanel)调鬓,因此導致在調(diào)用刪除子組件方法的時候不斷有東西被遺留下來。

/**

* {@inheritDoc}

*/

@Override

public Component add(Component c) {

????// This won't work right if we remove components. But we don't, so I'm

????// not going to worry about it right now.

????if (hgap > 0 && subPanel.getComponentCount() > 0) {

????????subPanel.add(Box.createHorizontalStrut(hgap));

????}

????if (c instanceof JComponent) {

????????((JComponent) c).setAlignmentY(verticalAlign);

????}

????return subPanel.add(c);

}

解決方法

找到問題的根源之后酌伊,解決起來就比較簡單了腾窝。自己定義一個新的類CustomHorizontalPanel,其它的方法參考JMeter中HorizontalPanel提供的實現(xiàn)居砖,再新增一個方法用于刪除容器組件(subPanel)的子組件虹脯。在刪除上文所說的綠色Panel中的子組件的時候,調(diào)用removeSubs方法奏候,這樣避免了調(diào)用父類繼承的remove方法帶來的上述問題循集。

public void removeSubs() {

????subPanel.removeAll();

}

參考資料

JMeter擴展插件實現(xiàn)對自定義協(xié)議進行支持 ,該文章描述了自定義JMeter插件的基本流程蔗草,包括UI和模型(Sampler的實現(xiàn))等咒彤。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市咒精,隨后出現(xiàn)的幾起案子镶柱,更是在濱河造成了極大的恐慌,老刑警劉巖模叙,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件歇拆,死亡現(xiàn)場離奇詭異,居然都是意外死亡范咨,警方通過查閱死者的電腦和手機故觅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來渠啊,“玉大人输吏,你說我怎么就攤上這事√骝龋” “怎么了评也?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長灭返。 經(jīng)常有香客問我盗迟,道長,這世上最難降的妖魔是什么熙含? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任罚缕,我火速辦了婚禮,結(jié)果婚禮上怎静,老公的妹妹穿的比我還像新娘邮弹。我一直安慰自己黔衡,他們只是感情好,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布腌乡。 她就那樣靜靜地躺著盟劫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪与纽。 梳的紋絲不亂的頭發(fā)上侣签,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機與錄音急迂,去河邊找鬼影所。 笑死,一個胖子當著我的面吹牛僚碎,可吹牛的內(nèi)容都是我干的猴娩。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼勺阐,長吁一口氣:“原來是場噩夢啊……” “哼卷中!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起渊抽,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤蟆豫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后腰吟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體无埃,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡徙瓶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年毛雇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侦镇。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡灵疮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出壳繁,到底是詐尸還是另有隱情震捣,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布闹炉,位于F島的核電站蒿赢,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏渣触。R本人自食惡果不足惜羡棵,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嗅钻。 院中可真熱鬧皂冰,春花似錦店展、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至舶胀,卻和暖如春概说,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背峻贮。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工席怪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人纤控。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓挂捻,卻偏偏與公主長得像,于是被迫代替她去往敵國和親船万。 傳聞我的和親對象是個殘疾皇子刻撒,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,796評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)耿导,斷路器声怔,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件舱呻、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評論 4 62
  • “一顧惜朝誤終身醋火,不顧惜朝終身誤∠渎溃”這是在千萬顧迷中廣為流傳的一句話芥驳,恰如其分地道出顧君的無窮魅力。當然這里所說的...
    熱眼旁觀真心人閱讀 189評論 10 3
  • 當我真正開始驕傲起來的時候茬高,我才真正開始謙虛兆旬。 金花vs粉花。歲華自流轉(zhuǎn)怎栽,金粉亦清歡丽猬。 嗨 原來一切不過是一個“舍...
    柴子恒閱讀 223評論 0 0