0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JMeterで直前のサンプラーが成功したか確認する方法

Last updated at Posted at 2025-12-15

はじめに

CYBIRD Advent Calendar 2025 の16日目担当の@cy-naullと申します。

15日目は@suzu_ayaさんの「去年より詳細にPHPで画像ファイルの色の分類をしてみた」でした。
画像から代表色を抽出することで撮影した写真などまとめてみたりなど、さまざまな応用方法がありそうです:art:

概要

JMeterを使用して負荷試験のシナリオを作成する際、直前のサンプラー(リクエスト)が成功したとき/失敗したときにだけ行いたい処理などがあるかと思います。

ちなみに

JMeterは同一のスレッド内では、順番通り同期的に処理が行われます。
そのため、単にサンプラーAが終わった後にサンプラーBを実行したい場合は、処理したい順番にスレッド内へ収めるだけでOKです。

サンプラーA(実行)
  ↓ ※レスポンスを必ず受信してから次へ
サンプラーB(実行)
  ↓
サンプラーC(実行)

本記事では、Aのレスポンスの結果によって処理を分岐させたいときに活用できる方法を共有します。

環境情報

今回、使用した環境情報は以下になります。

❯ sw_vers
ProductName:		macOS
ProductVersion:		13.6.3
BuildVersion:		22G436


❯ jmeter --version
    _    ____   _    ____ _   _ _____       _ __  __ _____ _____ _____ ____
   / \  |  _ \ / \  / ___| | | | ____|     | |  \/  | ____|_   _| ____|  _ \
  / _ \ | |_) / _ \| |   | |_| |  _|    _  | | |\/| |  _|   | | |  _| | |_) |
 / ___ \|  __/ ___ \ |___|  _  | |___  | |_| | |  | | |___  | | | |___|  _ <
/_/   \_\_| /_/   \_\____|_| |_|_____|  \___/|_|  |_|_____| |_| |_____|_| \_\ 5.6.3

Copyright (c) 1999-2024 The Apache Software Foundation


❯ java -version
openjdk version "24.0.1" 2025-04-15
OpenJDK Runtime Environment Temurin-24.0.1+9 (build 24.0.1+9)
OpenJDK 64-Bit Server VM Temurin-24.0.1+9 (build 24.0.1+9, mixed mode)

${JMeterThread.last_sample_ok}

${JMeterThread.last_sample_ok}は、直前に実行されたサンプラーが成功したかどうかを判定したいときに使用するJMeterの組み込み変数です。こちらを利用することで実現が可能になります。

変数の中身について

last_sample_ok は直前のサンプル結果が成功なら "true"、失敗なら "false" を返します。

状態 返り値
サンプラーが成功(ステータス200、Assertion OK など) true
サンプラーが失敗(エラー、Assertion Fail、Timeout など) false

使用例

If Controller と組み合わせて、以下のような条件分岐で使うことが多いです。

  • 成功時だけ次の処理を実行したいとき
  • 失敗した場合にリトライしたいとき

つかってみた

今回は成功時のみに実行したい場合について、実践してみます。

  1. 対象のスレッドグループを右クリックし、 Add > Logic Controller > If Controller を選択します。追加された If Controller をレスポンス結果が知りたいサンプラーの直後に配置します
  2. Expressionの中身に${JMeterThread.last_sample_ok}を記載します
  3. 下の方にある、Interpret Condition as Variable Expressionにチェックをいれます
  4. 最後に、成功した場合に実行したいサンプラーをIf Controllerへ入れ子にしてあげれば完了です

上記が完了しましたら、普段通り実行すると直前のサンプラーの結果次第で条件分岐させることが可能になります。

エラー時のみ実行したい場合は、反転させるだけでOKです

!${JMeterThread.last_sample_ok}

スクリーンショット 2025-12-09 14.29.52.png

:speech_balloon:(補足)Interpret Condition as Variable Expression って?

この項目をONにした場合、JMeterは「JavaScriptのコード」としてではなく、 「結果が true または false になる文字列(または関数)」 として単純に判定するようになります。

JavaScriptエンジンを起動しないため、処理が圧倒的に速く、メモリ消費も少なくすることができます。そのため、負荷テストにおいてパフォーマンスへの悪影響がなく、ONにすることがおすすめされています。

最後に

JMeterではさまざまな機能が実装されているため、便利ですね。
さて、CYBIRD Advent Calendar 2025 の17日目は@cy_yusuke_itoさんの「LightSail + CloudFrontでWordPressを構築し、高速かつセキュアな環境を目指す」です。お楽しみに!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?