2012-03-06 61 views
0

我評估我的傳輸庫的性能,這將是有益的,如果我得到了以下建議:JMeter的:一個HTTP POST之後是HTTP的負載測試GET

我使用Junit的採樣執行以下:

HTTP POST測試:我發送HTTP POST請求:這將導致數據庫寫入。我必須從整體上評估POST + DB_WRITE操作的所有參數(吞吐量,平均響應時間)。作爲對這個POST請求的迴應,我得到一個唯一的ID。所以如果我發送1000個成功的POST請求,我將有1000個唯一的ID。

現在我的問題是如何使用這些獨特的ID爲我的下一個測試用例,執行每個創建的唯一ID HTTP GET。

我可以解析HTTP POST響應並將唯一ID寫入文件,並嘗試將該文件用於我的HTTP GET測試。但問題是如果我創建了一個由10個不同線程組成的線程組,那麼在寫入文件時就會出現同步問題。

有沒有我可以用來在文件系統中記錄結果的PostProcessor?

回答

0

同步不會有任何問題(它們由文件系統解決)。在每一個線程(這是POST-ing)你應該打開你的文件寫入並追加一個新的行。再次,不要擔心同步,操作系統會照顧它。

3

至於我看起來像你可以避免使用文件來存儲,然後讀取生成的ID。

邏輯如下:

  1. 執行您的POST請求;
  2. 從POST返回的解析響應 - 使用正則表達式提取器或附加到請求的任何其他post-processor - 提取您的ID;
  3. 將提取的ID存儲在用戶唯一/線程唯一變量中 - 在同一個後處理器中;
    如何爲正則表達式提取器執行此操作,請參閱下面的內容:${__javaScript('${username}'+'UnicID')}爲每個用戶/線程生成一個唯一變量,以避免多用戶案例中的干擾;
    似乎也可以使用threadNum函數而不是$ {username}變量;
  4. 如果POST請求成功完成,ID提取並存儲在變量中 - 執行你的GET請求被提取ID用作參數;
    使用${__V(${username}UnicID)}結構取回以前保存的ID。

您也可以添加Debug PostProcessor POST請求採樣器 - 監視生成的變量及其值。

似乎就是這樣。

 
Thread Group 
Number of Threads = X 
Loop Count = N 
    . . . 
    HTTP Request POST 
     checkingReturnCode // Response Assertion 
     extractUniqueID  // Regular Expression Extractor (e.g.) 
      Reference Name = ${__javaScript('${username}'+'UnicID')} 
      Regular Expression = ... 
      Template = $1$ 
      Match No. = 1 
      Default Value = NOTFOUND 
    IF Controller   // execute GET only if POST was successful 
    Condition = ${JMeterThread.last_sample_ok} // you may change this to verify that variable with extracted ID is not empty 
     HTTP Request GET 
     param = ${__V(${username}UnicID)} 
    . . . 

希望這會有所幫助。

+0

感謝您的詳細回覆。但是還有一個問題,如果我理解你說的正確,單個測試會執行一個HTTP POST,然後立即進行HTTP GET,對吧?但是我想分別測量一堆POST和一堆GET,或者我是否明白你說的不正確? – Prasanna 2012-03-07 01:54:48

+0

@ Prasanna。所有的統計數據和特性都將被測量,以執行POST和GET請求,而不管你在同一個線程組或不同線程組中逐一運行它們,甚至在不同的jmx文件中運行它們。因此,如果您將偵聽器附加到您的腳本以獲取請求特徵,則即使它們在同一個線程組中逐個執行,您也將分別看到POST和GET的測量結果,如上例所示。 – 2012-03-07 09:56:29

+1

在這種情況下,如果您一定要分開POST和GET請求執行,您可以使用與上面相同的機制,但使用2個線程組:在第1個POST中將被執行並提取ID並將其存儲在變量中, ID爲param。 唯一的一點是,在2個線程組的情況下,您可能必須將提取的ID存儲在屬性中而不是變量中,然後從屬性讀取值 - 以在線程組之間存儲值。 – 2012-03-07 11:09:40