2014-04-17 44 views
0

我在JMeter中創建了一個簡單的測試用例。JMeter「忘記」通過Regular Expressioin Extractor定義的變量值

打開的形式和它的所有內容(CSS,圖像等):

  • GET/
  • GET /css/site.css
  • GET /favicon.ico
  • GET /字體/特定fonts.woff
  • GET /images/banner.png

等待李ttle ...
後的值

  • POST/

收到 「謝謝」 頁面。 - GET /謝謝

在第一個GET的響應是一個隱藏的輸入字段,其中包含一個令牌。這個令牌也需要包含在POST中。 現在我使用JMeter的「正則表達式提取器」從響應中獲取令牌。到現在爲止還挺好。 然後,在使用token參數值字段中的RegExp-Extractor中的變量名稱創建POST消息之後,將所有其他內容進行檢索。 但是......當執行測試用例時,它會填充給定的默認值而不是令牌的實際值。

所以......調試此問題的第一步是在獲取令牌後直接添加一個dummy-HTTP-GET請求。在這個GET請求中,我還添加了令牌變量作爲值的token參數,但是現在我可以通過查看我的web服務器上的訪問日誌來輕鬆檢查參數。 在這種情況下...該URL看起來很有前途。它包含GET中的實際標記值,但它仍然使用POST中的默認值。

調試的第二步是使用「調試採樣器」和「查看結果樹」。 通過在不同步驟之間移動Debug Sampler,我發現令牌變量的值在我收到CSS後回到默認值。

所以......現在最大的問題是...... 如何讓JMeter記住我的變量值直到我的測試腳本結束?

+0

找到一種解決方法:-) ... 我沒有把第一個GET和正則表達式提取器放在一個簡單的控制器內。其餘的(除了計時器「等一下......」)仍然在主流中。 這解決了這個問題。 – user3472174

回答

0

JMeter不會「忘記」變量。但是,變量作用域僅限於當前的線程組。您可以轉換JMeter的變量JMeter的房產具有「全球性」的,即使用Beanshell Post Processor用下面的代碼範圍:

props.put("myVar", vars.get("myVar")); 

或使用__setProperty()功能。詳情請參閱How to Use Variables in Different Thread Groups指南。

+0

我不認爲在這種情況下使用屬性是一件好事,因爲令牌只能在單個線程中共享,否? –

1

正如您發現它的問題來自對jmeter的範圍規則的誤解。

在你的情況,只是把那會給你包含子節點的響應請求的後處理器。 另外我想你不需要與其他線程共享這個令牌,所以不要使用替代答案中提出的屬性。