ハマったところの忘備録と、意外と上から下まで説明した記事がなかったのでまとめ。
目的
JMeterで、負荷テストを行う。
1秒10アクセス。
https://hogehoge.jp/abc を対象とする
ベーシック認証付き
nuxt.js、API通信でバックエンドはLaravel
JMeterはMacで実施。
JMeterインストール
何はともあれJMeterをインストール。
brewで行います。brewがない場合はbrewをインストールしてね。
JMeterを使うには、本体とJavaが必要です。
brew install jmeter
brew tap homebrew/cask-versions
brew cask install java
javaはこれ書いている時点でバージョン14がインストールされましたが普通に使えました。
JMeterの実行
コンソールから実行します。
jmeter
するとGUIツールが開きます。この画面を使ってテスト計画(テストの内容)を作ります。
日本語化
日本語にするにはメニューから以下を選択します。
Options > ChooseLanguage > Japanese
テスト計画の作成
左カラム設定
左カラムの「TestPlan」を右クリックで
追加 > Threads(Users) > スレッドグループ
を選択し、スレッドグループを作ります。
次に上記で出来た「スレッドグループ」を右クリックで
追加 > サンプラー > HTTPリクエスト
追加 > リスナー > 統計レポート
追加 > リスナー > 結果を表で表示
追加 > リスナー > 応答をファイルへ保存
追加 > リスナー > グラフ表示
を選択し、それぞれを作成します。
※結果を表で表示 より下3つは無くてもいいですが、結果が見やすいのであったほうが良いです。
するとこんな感じになります。
スレッドグループの設定
テストを何秒おきに何回実行するかを決めます。
スレッド数:10
Ramp-UP期間(秒):1
ループ数:1
を設定します。
上記は10リクエストを1秒の間に実行するという意味になります。
HTTPリクエストの設定
左カラムのHTTPリクエストを選択し、情報を入力します。
設定項目 | 設定値 |
---|---|
プロトコル | https |
サーバ名またはIP | hogehoge.jp |
HTTP リクエスト | GET |
パス | /abc |
ベーシック認証がある場合
HTTPリクエストで右クリックし
追加 > 設定エレメント > HTTP認証マネージャ
を選択し、作成します。
設定項目 | 設定値 |
---|---|
基底URL | https://hogehoge.jp/ |
ユーザ名 | ベーシック認証のユーザ名 |
パスワード | ベーシック認証のパスワード |
Mechanism | BASIC |
保存
TestPlanを選択してCtrl+sで保存します。
この後このファイルは使うのでわかりやすいところに保存します。
テスト
とりあえず動くかをテストします。
GUI上部の緑の△を押して実行します。
実行後、「結果を表で表示」を選択し、Statusが緑だったら成功です。
JMeter実施
実施は、GUIではなくCUIで行います。
以下コマンドで実施。
jmeter -n -t ~/src/jmeter/test_plan.jmx -l ~/src/jmeter/log.jtl
# パスは保存したファイルの場所を設定して下さい。ログも適当な場所を指定して下さい。
ログの確認
ログの中身はこの様になっています。
cat ~/src/jmeter/log.jtl
timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,URL,Latency,IdleTime,Connect
1591777603078,21372,HTTP リクエスト,429,Too Many Requests,スレッドグループ 1-9,text,false,,347449,208,10,10,https://hogehoge.jp/abc,16242,0,238
1591777603178,21915,HTTP リクエスト,429,Too Many Requests,スレッドグループ 1-10,text,false,,353217,208,9,9,https://hogehoge.jp/abc,16151,0,220
1591777602975,24513,HTTP リクエスト,429,Too Many Requests,スレッドグループ 1-8,text,false,,358302,208,8,8,https://hogehoge.jp/abc,16689,0,211
1591777602877,25325,HTTP リクエスト,429,Too Many Requests,スレッドグループ 1-7,text,false,,346781,208,7,7,https://hogehoge.jp/abc,16539,0,175
1591777602578,29420,HTTP リクエスト,429,Too Many Requests,スレッドグループ 1-4,text,false,,623792,208,6,6,https://hogehoge.jp/abc,18709,0,308
1591777602353,30684,HTTP リクエスト,429,Too Many Requests,スレッドグループ 1-1,text,false,,623792,208,5,5,https://hogehoge.jp/abc,18968,0,533
1591777602676,30529,HTTP リクエスト,429,Too Many Requests,スレッドグループ 1-5,text,false,,623792,208,4,4,https://hogehoge.jp/abc,18419,0,210
1591777602378,30834,HTTP リクエスト,429,Too Many Requests,スレッドグループ 1-2,text,false,,623792,208,3,3,https://hogehoge.jp/abc,19032,0,508
1591777602776,30459,HTTP リクエスト,429,Too Many Requests,スレッドグループ 1-6,text,false,,623792,208,2,2,https://hogehoge.jp/abc,18681,0,168
1591777602477,30900,HTTP リクエスト,429,Too Many Requests,スレッドグループ 1-3,text,false,,623792,208,1,1,https://hogehoge.jp/abc,18591,0,409
ぐぬぬ・・これはlaravelのリクエスト数制限のせいですね。
この辺りの記事を参考に同時アクセス数を調整しましょう。
https://qiita.com/HorikawaTokiya/items/c04e410e4ed76d3dddc2
おしまい。ちゃんちゃん。