最近、自動テストでフィールドを抽出する問題に遭遇しました。これは初めてかもしれません。さまざまな検索を行った結果、目的の結果が見つかりませんでした。最終的に、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 抽出ルールに精通している必要があります。
正規表現エクストラクターを使用する手順は次のとおりです。
- HTTP リクエストと正規表現エクストラクターをテスト計画に追加します。
- HTTPリクエストに設定される応答データの変数名はresponseです。
- 正規表現エクストラクターで次のプロパティを設定します。
- 変数名: propId
- 正規表現: "propList":[{"id":(\d+)
- テンプレート: $1$
- 一致番号: -1
${propId}
この変数は後続のテストで参照できます。
—終わり—
将来的には、良い方法で更新できるようになる予定です。皆さんもコミュニケーションを取り、お互いに助け合うことを歓迎します。
参考になればぜひ注目してください!