最近筆者的一位老朋友諮詢了一個問題:在自定義的Java請求中如何編寫多個請求?老朋友反應他們發送請求只能基於這種Java請求形式(代碼調需用三方封裝的jar包)。這個問題恰巧不久前在筆者所在的飛測QQ羣中有人諮詢過,當時只回答了用SubResult.html
本次的目的就是深挖下:JMeter的JavaRequest請求如何編寫過個SamplerResult(筆者本想網上找找資料,一看全是比較常規的JavaRequest請求編寫,沒有相關SubResult的使用方法,只能靠本身)spa
筆者在以前已經屢次寫過Java請求腳本,本次如何搭建腳本編寫環境就及Java請求中有哪些約定好結構本文不贅述,你們自行百度下。其實主要仍是講思路,包括之後筆者寫文章大都主要是講解決問題的思路。翻譯
而後就開始擼代碼:xml
恩,感受很完美!然而在執行後:htm
從上圖看出,拋出了:sampleEnd called twice 異常,筆者將代碼作了微調:blog
恩,感受應該沒問題了,再次執行下:ci
我擦,咋又報錯了。。。此次報了setEndTime must be called after setStartTime ,筆者因而看了JMeter底層代碼,看看哪裏拋出的這個異常。以下圖:文檔
恩? startTime值爲零纔會拋出這個異常,感受愈來愈有意思了。帶着這個疑問筆者去查看了JMeter的API文檔,這才發現致使此現象的真兇。get
當回翻譯官:源碼
addRawSubResult(SampleResult subResult) | 向集合中添加子結果,而不更新任何父字段。 |
addSubResult(SampleResult subResult) | 添加子結果並調整父字節計數和結束時間。 |
addSubResult(SampleResult subResult, boolean renameSubResults) | 添加子結果並調整父字節計數和結束時間。 |
咱們代碼中用的是addSubResult(SampleResult subResult, boolean renameSubResults),筆者又調整了代碼:
執行結果:
ok,執行成功(出現Log4j2異常是由於筆者沒有配置log4j2.xml,不要在乎這個細節),但總感受仍是缺點什麼?爲了更真實筆者有微改了下代碼:
OKay,打包到JMeter運行以下:
筆者在看聚合報告時,又遇到問題了。。。
恩?只顯示父請求聚合數據,咋不顯示子請求數據呢?筆者目前發現解決辦法是:執行的時候先保存JTL結果見文件,場景結束後再次用聚合報告打開此JTL結果文件。
okay,最終問題解決。。。若是你們發現更好的解決方式,請不吝賜教!