2016-10-07 46 views
1

TL識別變量JMeter的隨機變量元素不是從前面的步驟

  • 我的測試結構:
    • enter image description here
  • 我有可變my_test什麼是正則表達式提取裝箱
    • 請求:GET //echo.getpostman.com/get?test=123
    • 正則表達式:
    • enter image description here
  • 然後我想它使用最大值正則表達式提取
    • enter image description here
  • 所以最後我能要求:
    • //echo.getpostman.com/get?test=${rand}

不幸的是,我從鐳得到錯誤ndom可變
2016/10/07 07:52:41 ERROR - jmeter.config.RandomVariableConfig: maximum(${my_test}) must be > minimum1)

爲什麼my_test沒有評估?

我試圖${__javaScript(parseInt('${my_test}'))}但它看起來就像是我的變量初始化 2016/10/07 08:06:01 ERROR - jmeter.config.RandomVariableConfig: maximum(NaN) must be > minimum1)
之前,如果我在測試計劃初始化這個變量用戶定義的變量從設置值將被用來評估 - 不更新正則表達式。

我知道我能做到//echo.getpostman.com/get?test=${__Random(0,${my_test})}
我只是好奇,如何在正則表達式提取通過我的價值變量最大值

回答

2

隨機變量是一個配置元素它會在任何其他組件先執行之前執行。

4.9執行順序

  1. 配置元件
  2. 預處理器
  3. 定時器
  4. 採樣
  5. 後處理器(除非SampleResult爲null)
  6. 斷言(除非SampleResult爲null)
  7. 監聽器(除非SampleResult爲null)

如果存在於所述測試計劃兩個或更多個配置元素,那麼它們將被在它們出現在測試計劃的順序執行。

檢查的執行順序和範圍這裏: 參見4.9 7 4.10這裏Execution Order and Scope Rules

所以,第一隨機變量進行評估,然後再採樣器,然後正則表達式提取。

當你使用用戶定義的變量,這是另一種配置元素,而且很可能你把它隨機變量之前,所以它評估爲你已經爲「my_test」中定義的值的表達式。但它不會覆蓋您在正則表達式提取器中捕獲的值。

解決你的問題(一個可能的解決方案):

,你可以使用不同的線程組。在第一個線程組中,您捕獲值並在第二個線程組中使用該值。

  1. 連續運行線程組。
  2. 使用BeanShell Assertion通過setProperty捕獲值。 (在第一線程組)
  3. 使用價值使用__property()(以線程組)

https://www.blazemeter.com/blog/knit-one-pearl-two-how-use-variables-different-thread-groups

0

一種可能性是您可以使用Beanshell後處理器將RegEx值寫入變量名稱。 之後,您可以使用它作爲$ {variable_name}

注意:Beanshell函數vars.get可用於獲取正則表達式值,vars.put可用於將其放入您的變量。

0

看來,在需要像Random Variable元素不評估的變量,在JMeter Issue Tracker

也許值得創建一個問題,作爲一種變通方法,您可以直接與__Random()功能替代它:

  • ${__Random(1,${my_test},)} - 如果您立刻需要該值,請直接在您的網址中輸入:

    //echo.getpostman.com/get?test=${__Random(1,${my_test},)} 
    
  • ${__Random(1,${my_test},rand)} - 如果,如果你需要的值存儲到${rand}變量以及

參見: