BeanShellのプロフィール
BeanShellのは、Java構文スクリプト言語のセットのようなのJMeterの様々な構成要素、でBeanShellの図形を有する使用することです:?
- タイマー:BeanShellのタイマー
- プリプロセッサ:BeanShellのプリプロセッサ
- サンプラー:BeanShellのサンプラー
- ポストプロセッサ:BeanShellのポストプロセッサ
- アサーション:BeanShellのアサート
- リスナー:BeanShellのリスナー
あなたはBeanShellのを介してデータ、環境変数、または応答データ処理と、より柔軟な判断を要求することができます。
組み込み変数やメソッドいくつかのデフォルトを持っているBeanShellのは、ユーザーがこれらの変数によって、JMeterのと対話することができ、例えば:
- 印刷:印刷情報(stdoutに出力情報)を非GUIモード
- ログ:ログに出力した情報(ファイル)
- log.debu( "デバッグ情報")
- log.info( "応答ステータスコード" +にResponseCode)
- log.warn( "警告")
- log.error( "エラーメッセージ")
- ResponseCode:レスポンスのステータスコード(文字列タイプ)
- ResponseHeaders:レスポンスヘッダ(文字列型)
- 前:現在のリクエストの結果を取得します。
- prew.getResponseDataAsString():フェッチ応答データ本体(文字列タイプ)
- prew.getResponseCodeは():ステータスコードを取得し(にResponseCodeと、文字列型)
- varsは:動作して変数のJMeter
- 文字列VAR1 = vars.get(「変数名」):変数の値を取得します(String型とします)
- vars.put(「変数名」変数の値):変数の値を設定します
- 小道具:Operation属性のJMeter
- props.get(文字列、文字列)の属性を取得することができるJMeterの生成されました
- props.put(文字列、文字列)のJMeterを作成し、更新することができますプロパティ
- CTX:(すべての情報が利用可能)現在のスレッドのコンテキストデータを取得します。
- ctx.getVariables(「変数名」):変数の値を取得します(vars.getで())
- ctx.setVariables( "変数名"、 "変数値"):変数を設定します((vars.putで))
- ctx.getProperties( "プロパティ名"):プロパティの値を取得します(props.getで())
- ctx.setProperties( "属性名"、 "プロパティ値"):設定したプロパティ(同じprops.put())
- ctx.getPreviousResult():現在の要求を取得し、同じ結果(PREV)
- ctx.getCurrentSampler():現在のサンプラーを取得します。
- ctx.getPreviousSampler():GET Aサンプラー前
- ctx.getThreadNum():スレッド数を取得します。
- ctx.getThreadGroup():スレッドグループを取得します。
- 。CtxのgetThread():現在のスレッドを取得します
- ctx.getEngineは():エンジンを取得します。
- ctx.isSamplingStarted():サンプラーを有効にするかどうかを判断します
- ctx.isRecording():レコードを開くかどうかを判断します
- ctx.getSamplerContextは():山下サンプラーテキストデータを取得します。
詳細なAPIのCTXを参照してください:JMeterのコンテキストを
BeanShellのアサーション
結合可変失敗= FALSEまたは障害によって決定された場合BeanShellのアサーションは、それぞれ場合、真のかどうかをアサートによって設定されている=、にResponseCode、ResponseHeadersボリュームデータに対する応答ステータスコードのpre.getResponseDataAsString()は、文字列形式、応答ヘッダ、によって得ることができますセット障害が= trueの場合、あなたはまた、障害の原因を設定するFailureMessageを設定することができます。
ステータスコードアサート
//状态码断言
log.info("状态码:" + ResponseCode);
if(ResponseCode.equals("200")){
Failure=false;
}
else{
Failure=true;
FailureMessage="响应状态码非200"; //指定失败原因
}
注:唯一の二重引用符文字列を使用するには、文字列の使用に等しい「」.equals(「」)
特定の文字備えることに応答して
//获取响应数据
String response = prev.getResponseDataAsString();
log.info("响应体:" + response);
//响应数据包含
if(response.contains("登录成功")){
Failure=false;
}
else{
Failure=true;
FailureMessage="响应数据不包含登录成功";
}
抽出とJSONレスポンスアサート本体フィールド
StringオブジェクトとJSONの操作へのレスポンスボディは、次のアドレスをダウンロードし、追加のjarパッケージを必要とする、またはGSON org.json使用することができます。
例えばjson.jarに、次のJMeter / libディレクトリににそれをダウンロードした後、JMeterを再起動し、次のように、BeanShellのアサートを追加します。
//JSON响应断言
import org.json.*; //导入org.json包
String response = prev.getResponseDataAsString(); //获取响应数据
JSONObject responseJson = new JSONObject(response); //转为JSON对象
String message = responseJson.getString("message");
log.info("响应message字段:" + message);
if(message.equals("成功")){
Failure=false;
}
else{
Failure=true;
FailureMessage="响应message字段非成功";
}
オブジェクトJSONObjectのgetString()メソッド、また支持体に加え
- getBoolean(「フィールド名」):ブールフィールドの値を取得します。
- getInt(「フィールド名」):int型フィールドの値を取得します。
- GetLong(「フィールド名」):長整数フィールドの値を取得します。
- GetDoubleを(「フィールド名」)O:倍精度タイプのフィールド値を取得します。
- getJSONObject( "フィールド名"):ネストされたオブジェクトのTypeフィールドの値を取得し、JSONObjectタイプ
- getJSONArray(「フィールド名」):、ネストされた配列の型を取得しJSONArrayタイプ
レスポンスヘッダ解析で
文字列型元々応答ヘッダは、応答ヘッダを分割してトラバースタイプマップ抽出項目に組み立てることができます
import java.util.HashMap;
import java.util.Map;
//将字符串用换行符 截取为adc数组
String [] headersList = ResponseHeaders.split("\n");
Map headersMap = new HashMap(); //创建HashMap来从新组装headers
for(int i=1;i<headersList.length;i++){
String [] itemList=headersList[i].split(": "); // 将每一条Headerr项按冒号分割
headersMap.put((itemList[0]), itemList[1]); // 分键值放入HashMap
}
String contentType = headersMap.get("Content-Type"); // 提取相应项
log.info("响应Content-Type:" + contentType)