2015-04-02 43 views
0

我有以下響應從請求的JMeter聚集一定的響應值在下次請求使用

[ 
{ 
    "id": 3767, 
    "sellerName": "abc", 
    "siteActivity": [ 
     { 
      "siteId": -1, 
      "siteName": "example.com", 
      "categories": [ 
       { 
        "categoryId": 79654, 
        "parentId": null, 
        "name": "Photo & Picture Frames", 
        "siteName": null, 
        "channelType": null 
       }, 
       { 
        "categoryId": 114397, 
        "parentId": null, 
        "name": "Chests of Drawers", 
        "siteName": null, 
        "channelType": null 
       }, 
       { 
        "categoryId": 11707, 
        "parentId": null, 
        "name": "Jewellery Boxes", 
        "siteName": null, 
        "channelType": null 
       }, 
       { 
        "categoryId": 45505, 
        "parentId": null, 
        "name": "Serving Trays", 
        "siteName": null, 
        "channelType": null 
       } 
      ] 
     } 
    ] 
}, 
{ 
    "id": 118156, 
    "sellerName": "xyz", 
    "siteActivity": [ 
     { 
      "categoryId": 45505, 
      "parentId": null, 
      "name": "Serving Trays", 
      "siteName": null, 
      "channelType": null 
     } 
    ] 
} 
] 

現在來了,我需要提取「ID」的價值觀和「的categoryId」值,並將它們作爲在下一個請求主體中列出。

目前,我正在使用JSON路徑抽出與表達

$.[*].id 

讓所有的ID我的手,

$.[*].siteActivity.[categoryId] 

的類別ID。 接下來,我想使用上面的值並將它們作爲請求主體中的參數發送。 目前,我能夠與

$.[0].id 

,然後將其分配給變量「ID」和使用只提取一個ID在請求主體

{"ids":[{"id":"${id}"}]} 

以下,但我希望能夠發送

{"ids":[{"id":"${id}"},{"id":"${id2}"}....]} 

有許多IDS哪有沒有限制,所以我不能硬編碼,需要動態的東西做的聚集。什麼樣的處理器可以幫助我?如果可以,請添加一些示例。

回答

1

我相信你應該能夠使用Beanshell PostProcessor來構建請求。

鑑於您的樣本數據的$.[*].id JSONPath表達式應該返回以下值:

id=[3767,118156] 
id_1=3767 
id_2=118156 

所以基本上你需要:

  1. 確定 「ID」 算
  2. 填充動態JSON對象發送
  3. 將其存儲到JMeter變量供以後使用

爲了做到這一點後 JSONPath提取添加的BeanShell PostProcessor中,把下面的代碼到它的「腳本」區域

import net.sf.json.JSONArray; 
import net.sf.json.JSONObject; // necessary imports 

JSONObject data2Send = new JSONObject(); 
JSONArray array = new JSONArray(); // instantiate JSON-related classes 

int idCount = vars.get("id").split(",").length; // get "id" variables count 

for (int i = 1; i <= idCount; i++) { // for each "id" variable 
    JSONObject id = new JSONObject(); // construct a new JSON Object 
    id.put("id", vars.get("id_" + i));// with name "id" and value id_X 
    array.add(id); // add object to array 
} 

data2Send.put("ids",array); // add array to "ids" JSON Object 
vars.put("myJSON", data2Send.toString()); // store value as "myJSON" variable 

您可以參考您的{"ids":[{"id":"3767"},{"id":"118156"}]}數據${myJSON}在需要。

該方法將適用於任何數量的「id」變量。

參考文獻:

相關問題