2021年、ひさしぶりの JMeter

負荷テストをやろうとして Vegeta を使おうと思いましたが、multipart/form(つまり、ファイルアップロードをともなう)のリクエストがどうもうまくいきませんでした。 今っぽくないですが、昔からよく知ってる JMeter を使ってみました。

JMeterMac にインストール

homebrew で一発でした。いい時代だ。

brew install jmeter

f:id:hideoku:20210705180426p:plain
昔ながらの UI

実行ファイルの調整

なにか操作をしてみると、挙動がおかしい…コンソールに以下の例外が出力されています。

Uncaught Exception java.lang.IllegalAccessError: class com.github.weisj.darklaf.ui.filechooser.DarkFilePaneUIBridge$DetailsTableModel (in unnamed module @0x157632c9) cannot access class sun.awt.shell.ShellFolder (in module java.desktop) because module java.desktop does not export sun.awt.shell to unnamed module @0x157632c9 in thread Thread[AWT-EventQueue-0,6,main]. See log file for details.

jmeter の実行ファイルに調整を入れます。わたしの環境だと、以下のファイルでした。

/usr/local/Cellar/jmeter/5.4.1/libexec/bin/jmeter

このファイルの途中に JAVA9_OPTS=.... という行で —add-opens=xxx という形で列挙されているので、それに続くように末尾に --add-opens=java.desktop/sun.awt.shell=ALL-UNNAMED を追加します。

参考: https://stackoverflow.com/questions/67615212/why-am-i-not-able-to-click-on-open-icon-in-jmeter

注意点:負荷テスト実施するときは CLI から

JMeter を起動する際に以下のような Warning がでてます。

WARNING: package sun.awt.X11 not in java.desktop
================================================================================
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use CLI Mode (was NON GUI):
   jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
   Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
================================================================================

Don't use GUI mode for load testing ! とあるように GUI から負荷かけるのはだめな模様。 GUI でテストを流してみるとわかりますが、JMeter が固まったりします。テストケースを作って、サンプル的に実施試してみてよさそうなら CLI で実行しましょうということですね。

さいごに

数年ぶりに JMeter を使いましたが、ほとんど変わってなかったですね。 ファイルアップロードをともなうリクエストも簡単に送れました。