JMeter は、応答データで指定された id=xxx の propList フィールドの id 値を抽出し、変数として設定します。

最近、自動テストでフィールドを抽出する問題に遭遇しました。これは初めてかもしれません。さまざまな検索を行った結果、目的の結果が見つかりませんでした。最終的に、ChatGPT を使用して問題を実現しました。次の解決策プロセス。


質問: 抽出したレスポンスのデータ構造が以下の場合、指定したid=25153のpropListフィールドのid値を抽出して変数として設定し、jmeterで実装してください。


{
    "resultCode": "0",
    "resultMsg": "success",
    "data": [
        {
            "id": 25152,
            "categoryId": 48529,
            "name": "标关键",
            "source": 3,
            "propList": [
                {
                    "id": 81529,
                    "propId": 25152,
                    "name": "关键值1",
                    "type": 3,
                    "updateTime": 1683773006584
                },
                {
                    "id": 81530,
                    "propId": 25152,
                    "name": "关键值2",
                    "type": 3,
                    "updateTime": 1683773006593
                }
            ],

            "isSelect": 1,
            "type": 3,

            "projectId": null
        },
        {
            "id": 25153,
            "categoryId": 48529,
            "name": "标否定",

            "source": 3,
            "propList": [
                {
                    "id": 81531,
                    "propId": 25153,
                    "name": "固定1",
                    "type": 3
                },
                {
                    "id": 81532,
                    "propId": 25153,
                    "name": "固定2",
                    "type": 3

                }
            ],
            "type": 3,
            "projectId": null
        }
    ]
}

ChatGPT は次のように答えます。

方法 1:

JMeter で指定された ID 値の propList フィールドの ID 値を抽出するには、JSON エクストラクターを使用できます。まず、HTTP リクエストを追加し、応答データを変数に保存する必要があります。次に、次のように構成された JSON エクストラクターを追加できます。

・変数名:propId
・JSONパス式:$.data[?(@.id==25153)].propList[*].id
・デフォルト値:見つかりません

これにより、ID 25153 のアイテムの propList フィールド内のすべての ID 値が取得され、propId という名前の変数に格納されます。


方法 2:

わかりました。JMeter で BeanShell スクリプトを使用して、必要な値を抽出できます。まず、応答から JSON データを抽出するための正規表現エクストラクターを追加する必要があります。次に、次の BeanShell スクリプトを使用して、必要な値を抽出します。

```
import org.json.JSONArray;
import org.json.JSONObject;

String responseData = vars.get("responseData"); // 获取响应数据
JSONObject jsonObject = new JSONObject(responseData); // 将响应数据转换为 JSON 对象
JSONArray dataArray = jsonObject.getJSONArray("data"); // 获取 data 数组
JSONObject targetObject = null;
for (int i = 0; i < dataArray.length(); i++) {
    JSONObject dataObject = dataArray.getJSONObject(i);
    int id = dataObject.getInt("id"); // 获取 ID 值
    if (id == 25153) { // 如果 ID 值匹配
        targetObject = dataObject;
        break;
    }
}
JSONArray propListArray = targetObject.getJSONArray("propList"); // 获取 propList 数组
JSONArray idArray = new JSONArray(); // 创建一个空的 JSON 数组
for (int i = 0; i < propListArray.length(); i++) {
    JSONObject propObject = propListArray.getJSONObject(i);
    int id = propObject.getInt("id"); // 获取 ID 值
    idArray.put(id); // 将 ID 值添加到 JSON 数组中
}
vars.put("propId", idArray.toString()); // 将 JSON 数组转换为字符串,并将其存储在变量中
```

これにより、応答データから JSON データが抽出され、ID 値が 25153 の項目が検索され、その propList 配列内のすべての ID 値が抽出されます。最終的に、これらの ID 値は propId という名前の変数に保存されます。

 

上記の方法で私のニーズは実現しましたが、さまざまな検索で結果が得られず、私の検索に問題がある可能性があります。ディスカッションのためのメッセージを残すことを歓迎します。 


PS: データ構造の参照を与えずに直接質問する場合、正規表現を使用して回答することしかできず、さまざまな検索を通じて、回答するための正規表現も使用されます。実際のテスト結果の使用は失敗したため、その方が良いです。コードを知っているか、JSON 抽出ルールに精通している必要があります。

正規表現エクストラクターを使用する手順は次のとおりです。

  1. HTTP リクエストと正規表現エクストラクターをテスト計画に追加します。
  2. HTTPリクエストに設定される応答データの変数名はresponseです。
  3. 正規表現エクストラクターで次のプロパティを設定します。
  • 変数名: propId
  • 正規表現: "propList":[{"id":(\d+)
  • テンプレート: $1$
  • 一致番号: -1
  1. ${propId}この変数は後続のテストで参照できます。

—終わり—
将来的には、良い方法で更新できるようになる予定です。皆さんもコミュニケーションを取り、お互いに助け合うことを歓迎します。
参考になればぜひ注目してください!
 

おすすめ

転載: blog.csdn.net/github_35856054/article/details/130927771