技術共有

技術的な問題: SpringBoot が Jmeter 開発をどのように統合するかを考える

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

技術的な問題: SpringBoot が Jmeter 開発をどのように統合するかを考える

要件の概要

自動ストレス テストを実行するには、Spring Boot フレームワークを通じて JMeter を呼び出す必要がある、高性能ストレス テスト プラットフォームを構築します。

解決策 1: Runtime クラスを使用して外部プロセスを呼び出す

技術概要

Java の Runtime クラスは、オペレーティング システムと対話するためのインターフェイスを提供し、Java アプリケーションがシステム コマンドを実行し、外部アプリケーションまたはスクリプトを起動し、それらと対話できるようにします。このシナリオでの Runtime クラスのアプリケーションは次のとおりです。

  1. プロセスの開始と管理: Runtime クラスの exec() メソッドを使用して、ストレス テスト用の JMeter コマンド ライン ツールを起動します。
  2. システムリソースにアクセスする: totalMemory() や freeMemory() などの Runtime クラスのメソッドを通じて Java 仮想マシンのメモリ使用量を監視します。
  3. 特定のアクションを実行する: Runtime クラスが提供する exit() メソッドを使用してアプリケーションを安全に終了し、nanoTime() および currentTimeMillis() を使用して正確な時刻情報を取得します。

ランタイムクラス

Runtimeクラスは、Java ランタイム環境と対話するためのメソッドを提供する Java のコア クラスです。

これはオペレーティング システムと対話するためのインターフェイスを提供し、Java アプリケーションがシステム コマンドを実行し、システム リソースにアクセスし、特定の操作を実行できるようにします。

主な用途には次のような側面が含まれます。

  • プロセスの開始と管理

    • Runtimeこのクラスは、次のようないくつかのメソッドを提供します。exec()、外部プロセスの開始と管理に使用されます。

    • これにより、Java アプリケーションはシステム コマンドを実行し、他のアプリケーションやスクリプトを起動し、外部プロセスと対話できるようになります。

  • システムリソースにアクセスする

    • Runtimeこのクラスは、次のようないくつかのメソッドを提供します。totalMemory()そしてfreeMemory()、Java 仮想マシンのメモリ情報を取得するために使用されます。

    • こちらも利用可能getSystemResource()クラスパスやライブラリパスなどのシステムリソースパスを取得するメソッド。

  • 特定のアクションを実行する

    • Runtimeこのクラスは、次のようないくつかのメソッドも提供します。exit()、Java アプリケーションを終了するために使用されます。

    • こちらも利用可能nanoTime()現在のナノ秒時間を取得し、使用するメソッドcurrentTimeMillis()現在のミリ秒時間を取得するメソッド。

JMeter コマンドラインストレステストの詳細な説明

JMeter bin ディレクトリを入力します。

コマンドラインパラメータを使用してJMeterを起動します

./jmeter -n -t /Users/xdclass/Desktop/report.jmx -l /Users/xdclass/Desktop/temp/jtl/result.jtl -e -o /Users/xdclass/Desktop/temp/result

含む:

  • -n:JMeter を非 GUI モードで実行します。
  • -t <jmx文件路径>: JMeter テスト スクリプトへのパスを指定します。
  • -l <结果日志路径>: テスト結果ログの保存先フォルダが存在し、ファイル名が重複しないように指定してください。
  • -e: テスト スクリプトの実行後、HTML 形式でテスト レポートを生成します。
  • -o <报告目录路径>: HTML レポートが保存されているディレクトリを指定します。フォルダーが存在することを確認してください。

コーディングの練習

  1. public class JMeterIntegration {
  2. public static void main(String[] args) {
  3. try {
  4. // 构建JMeter命令行调用
  5. String command = "/path/to/jmeter/bin/jmeter -n -t /path/to/test.jmx -l results.log -e -o /path/to/result";
  6. Process process = Runtime.getRuntime().exec(command);
  7. // 读取JMeter输出
  8. new BufferedReader(new InputStreamReader(process.getInputStream())).lines()
  9. .forEach(System.out::println);
  10. // 等待JMeter进程结束并获取退出码
  11. int exitCode = process.waitFor();
  12. System.out.println("JMeter process exited with code: " + exitCode);
  13. } catch (IOException | InterruptedException e) {
  14. e.printStackTrace();
  15. }
  16. }
  17. }

問題点

  • 可読性、メンテナンス性、拡張性が低く、プラットフォーム化が難しく、既存の知識が保持される