2017-05-03 49 views
0

我與處理申請的提交和處理的應用程序的工作,我試圖進行負載測試,其中不同的用戶針對不同的申請和執行取決於不同的操作申請狀態。該信息存在於從服務器發送的令人難以置信的長JSON響應中,該響應還包含所有文件的所有信息。但是,我感興趣的領域彼此之間的距離足以讓它們相互關聯,這一點特別方便。JMeter的正則表達式包含下劃線,工作異常

我要這樣做的方式如下:我需要提取每個文件的ID號碼才能定位它,並且我需要能夠隨機定位與特定狀態關聯的文件ID。響應的,我關心的結構如下:

{ 
    "responseObject":{ 
     "baseFilingRequests":{ 
      "^Value":[ 
      {"fields":"[values]"}, 
      {"fields":"[values]"}, 
      { 
       "fields":"values", 
       "referencedListings":"[value]", 
       "id":"[value]", 
       "referenceId":"[value]", 
       "status":"[value]", 
       "filingName":"[value]", 
       "fields":"values", 
      }, 
      {"fields":"[values]"}, 
      {"fields":"[values]"} 
      ] 
     } 
    } 
} 

所以我想我可能只是堅持在正則表達式這個表達式和修改狀態字段爲每個線程組,這樣每個將針對具有不同的地位申請(STATUS_APPROVED,STATUS_REJECTED,等等),然後只需提取它找到的每個申請的ID,使用這樣的表達式:

\"referencedListings\":null,\"id\":\"(.+?)\",\"referenceId\":\"\d\d\d\d\d\d\d\」,\"status\":\"STATUS[_]RECEIVED\", 

然而,試圖提取申請的ID時,下劃線是給我找麻煩與我指定的狀態。有時,它捕捉不同的狀態(捕獲對應於具有STATUS_CANCELLED狀態的提交者ID,而不是我指定的STATUS_LOCKED),有時它捕獲的ID,但它不會停止提取存在;它會盡可能多地提取響應,然後將這個龐大的字符串插入變量中,然後嘗試在稍後的請求中將它用作歸檔ID,從而生成空指針異常。這種行爲是不穩定的,看起來是隨機的,我對如何解決這個問題感到不知所措。

我試圖逃避使用反斜槓字符,和幾乎所有其他的語法,我已經能夠想到的,但這種行爲仍然存在。毫無疑問,這是下劃線,因爲無論何時我僅使用下劃線之前的所有內容來表達表達式,RegEx的表現一致且可預測。但我不能只是忽略它,因爲它是我需要來檢測這樣我就可以據此篩選申報,更何況像STATUS_PENDING_UNLOCK狀態包含兩個下劃線,我需要能夠檢測兩個狀態語法的一部分。

在這個問題上的任何有識之士將不勝感激。

+0

你能執行相關請使用JSON提取器?語法是'$ .. id',它將檢索'id'的所有實例。你可以在隨後的請求中使用它。 myvar_1,myvar_2等'JSON PostProcessor使您能夠使用JSON-PATH語法從JSON響應中提取數據。此後處理器與正則表達式提取器非常相似。它必須作爲HTTP採樣器或其他任何具有響應的採樣器的孩子放置。它可以讓你在一個非常簡單的方法文本內容提取,看到JSON路徑語法.'欲瞭解更多詳細信息,請http://jmeter.apache.org/usermanual/component_reference.html#JSON_Extractor –

+0

這聽起來是非常有用的。但是,如果在包含所有文件的響應中存在稱爲id的其他字段,這些字段與我旨在提取的提交ID不具體對應,是否會自行工作?更重要的是,我需要設置什麼樣的條件,以便只提取同時存在的狀態字段和我正在查找的特定狀態值的id字段? – Don

+0

'id'將根據您在'JSON Extractor'中提到的語法來檢索。例如。 '$ .. id'將只檢索JSON結構中的所有'id'。如果'id'位於JSON結構的某處,它將不會提取。請發佈完整的JSON,我將能夠爲您提供確切的語法。謝謝! –

回答