2016-11-16 94 views
0

我的目標是運行使用4臺Azure的服務器,負載生成器和1個Azure的服務器來啓動測試,並收集結果的負載測試。我有分佈式測試運行,並且我獲得了很好的數據。但是今天當我遠程啓動測試時,4個負載生成器中的3個發生故障,導致所有http事務錯誤。失敗的交易記錄以下錯誤:分佈式JMeter測試失敗,java的錯誤,但測試將從JMeter的UI運行(非分佈式)

Non HTTP response message: java.lang.ClassNotFoundException: org.apache.commons.logging.impl.Log4jFactory (Caused by java.lang.ClassNotFoundException: org.apache.commons.logging.impl.Log4jFactory)

我證實了共享記錄-1.2.jar在JMeter的\ lib文件夾中存在的每臺機器上。

要儘量縮小我一個Azure的服務器設置爲兩個問題引發的裝載和運行JMeter的服務器,但失敗了。但是,如果我從同一臺服務器上的JMeter UI開始測試,則測試運行正常。我認爲這排除了腳本中的問題或Azure機器彼此之間的問題。

我也簡化了我的測試計劃,它只運行一個簡單的http事務,但仍然失敗。

我已經經歷了所有的基礎知識:重新安裝jmeter,更新java到最新版本(1.8.0_111),更新了JAVA_HOME環境變量,並退出了服務器上最新的Microsoft安全更新。任何關於如何挑選這個問題的建議將不勝感激。

我使用JMeter的3.0r1743807和Java 1.8 Azure的服務器都運行Windows Server 2008 R2

回答

0

我確實得到了解決這一問題。事實證明,這是一個jar文件中的一些無關代碼和JMeter組件之間的衝突。這是「令人毛骨悚然的」,因爲某些東西影響了引用的jar文件和JMeter組件的加載順序。

我已經包括使用測試計劃「添加目錄或jar類路徑」功能在我的JMeter腳本一個jar文件。這個jar文件有一段我需要用於測試的代碼以及許多其他組件,其中一個組件可能是類似的日誌記錄功能,與JMeter中的日誌記錄功能衝突。問題很棘手;該測試運行良好數月,但在最不方便的時候開始失敗。通過創建一個非常簡單的JMeter測試,可以加載並運行得很好,從而發現問題。如果我在JMeter中打開簡單測試,然後不關閉JMeter,打開我的問題測試,我的問題測試不會失敗。如果我顛倒了順序,打開問題測試,然後進行簡單測試,那麼簡單測試也會失敗。鑑於問題遵循了裝入事件的順序,我開始查看jar文件並找到了我的嫌疑犯。

當我建我離開的jar文件獨自思考,我需要的功能可能依賴於瓶子內的其他作品的腳本。現在,事情已經破裂,我需要找出這是真的,幸好它不是。所以,要解決這個問題,我將我的jar文件的擴展名更改爲zip,然後使用7-zip編輯它。我刪除了除我需要的所有代碼。我將所有文件夾保存在我需要的代碼的路徑中,我這樣做有兩個原因:我沒有更新我的代碼,稱爲功能,當我試圖改變路徑的功能不起作用。

接下來我更改文件擴展名回到罐子,改變了JMeter的參考「添加目錄或jar類路徑」功能指向修訂罐子。自那以後我沒有看到失敗。

非常感謝看着這個的人們。我希望這個決議能夠幫助別人。