JMeter-BeanShell プリプロセッサと BeanShell ポストプロセッサのアプリケーション

1. BeanShell とは何ですか?

BeanShell は Java で書かれており、小型で無料でダウンロード可能な組み込み Java ソース コードインタープリタです。JMeter パフォーマンス テスト ツールも BeanShell インタープリタを完全に採用し、構成可能な BeanShell プリプロセッサとポストプロセッサにカプセル化しています。

BeanShell プリプロセッサ (BeanShell プリプロセッサ) と BeanShell ポストプロセッサ (BeanShell ポストプロセッサ) は、コードを記述することで、インターフェイスのパフォーマンス テストにおけるリクエストの事前パラメータとデータ取得後の処理をより適切に処理できます。JMeter 内の元の BeanShell 設定の場所は次のとおりです。

BeanShell プリプロセッサ (BeanShell プリプロセッサ)

ここに画像の説明を挿入します

BeanShell ポストプロセッサ (BeanShell ポストプロセッサ)

ここに画像の説明を挿入します

2. BeanShell Preprocessorの基本的な使い方(BeanShellプリプロセッサ)

インターフェイスのパフォーマンス テストを実施する場合、各 API リクエストの入力パラメーターが変更されるというシナリオが一般的に使用されます。

たとえば、一部のインターフェイス リクエスト パラメーターにはタイムスタンプが付いています。また、多くの場合、インターフェイス リクエストのセキュリティを確保するために、バックエンドはリクエストに署名パラメーターを含める必要があります。あるいは、署名は暗号化アルゴリズムを通じて取得される場合もあります。言い換えれば、このようなインターフェイスでは基本的に、各リクエストの前に異なる入力パラメータ データを構築する必要があります。したがって、このようなインターフェースの同時テストを行う場合、パラメータ化されたリクエスト入力パラメータが必要になりますが、BeanShell Preprocessor (BeanShell プリプロセッサ) などのプリプロセッサを使用すると、パラメータ化された入力パラメータを簡単に構築できます。次の例を見てください。タイムスタンプと署名はパラメータ化できます。

BeanShell Preprocessor プリプロセッサを追加し、スクリプト編集ボックスで次のコードを編集します。

// 导入MD5加密需要用到的jar包。
import org.apache.commons.codec.digest.DigestUtils;
 
// 声明你需要拼接的字符串
//String requestTime = "1680089472000"; //生成时间戳
String requestTime = "${__time(,)}"; //生成时间戳
log.info("=====请求时间戳:=====>>"+requestTime);
 
String yan = "N[8HXx!57Ivy%)#R";
//拼接需要加密的字符串
String str = yan + requestTime;
// 加密已拼接的字符串
String sign = DigestUtils.md5Hex(str);
log.info("=====sign签名:=====>>"+sign);
 
vars.put("sign",sign); //设置变量,将md5加密后的值传递给变量sign
 
vars.put("requestTime", requestTime); //将时间传递给变量requestTime

上記の BeanShell スクリプトでは、requestTime とsign という 2 つの文字列が定義されており、その値が設定されています。requestTime の値は ${__time(,)} です。この関数は現在時刻に従ってタイムスタンプを生成できます。 Sign の値は md5 暗号化の後、32 ビットの小文字文字列が生成され、その値は後続のインターフェイス リクエストのパラメータ化のために変数 requestTime と Sign に渡されます。その後、ログの出力もスクリプトに追加されます。インターフェイス リクエストの後、出力パラメータのログ情報でログを確認できます。

効果は次のとおりです。

ここに画像の説明を挿入します

これで BeanShell 前処理スクリプトの作成が完了しました。次に、次に示すように、スクリプト内の requestTime パラメーターと signed パラメーターをインターフェース要求に導入します。

ここに画像の説明を挿入します

最後に、BeanShell 前処理スクリプトとリクエストのパラメータ化を設定した後、JMeter を実行してリクエストの効果とログの出力を確認し、インターフェイスを 2 回リクエストします。

ここに画像の説明を挿入します

各リクエストのタイムスタンプと符号の値が異なり、リクエストの応答結果がすべて正しく返されていることがわかります。これにより、リクエストの入力パラメータが異なるたびに、jmeter 同時リクエストが完了します。

3. BeanShell Postprocessorの基本的な応用例(BeanShellポストプロセッサ)

BeanShell ポストプロセッサ (BeanShell ポストプロセッサ) は、実際にはスクリプトを通じて応答関連のデータを取得します。

これは、他のインターフェースと対話するいくつかのシナリオを実行するために使用されます。たとえば、インターフェース A の応答結果の特定のフィールドがインターフェース B の入力パラメーターとして使用される場合、BeanShell ポストプロセッサー (BeanShell ポストプロセッサー) を介してインターフェース A から抽出できます。 ). 応答結果のデータはパラメータ化されてインターフェイス B に渡されるか、抽出されたデータがファイルなどに書き込まれます。もちろん、JMeter は、応答データや要求データを抽出するための正規表現エクストラクターや JSON エクストラクターなどの後処理コンポーネントも提供します。スクリプトを通じて必要なデータをカスタマイズするには、BeanShell ポストプロセッサー (BeanShell ポストプロセッサー) の方が便利な場合があります。

後処理プロセッサである BeanShell Postprocessor を追加することで、リクエスト後のレスポンスステータスコードやレスポンスヘッダ、レスポンスボディなどのデータを取得することが可能です。以下に示すように、スクリプト編集ボックスでスクリプトを編集します。

ここに画像の説明を挿入します

このようにして、応答ステータス コード、応答本文、応答ヘッダー、およびインターフェイス応答アサーションなどの後続のテスト検証用のその他のデータを取得できます。

ここに画像の説明を挿入します

上記は BeanShell ポストプロセッサの基本的なアプリケーションですが、もちろん、テストのニーズに合わせて、よりテスト シナリオに適したスクリプトやロジックを記述することもできます。

最後に、私の記事を注意深く読んでくださった皆さんに感謝します。互恵性は常に必要です。それほど価値のあるものではありませんが、使用できる場合は、直接受け取ることができます。

ここに画像の説明を挿入します

この情報は、[ソフトウェア テスト] の友人にとって最も包括的かつ完全な準備倉庫となるはずです。この倉庫は、最も困難な旅を乗り越える何万人ものテスト エンジニアにも同行してきました。また、皆さんのお役に立てれば幸いです。 

おすすめ

転載: blog.csdn.net/2301_78276982/article/details/132856816