簡體   English   中英

使用JMeter的JSF ViewState錯誤

[英]JSF ViewState errors using JMeter

使用JMeter我需要提取JSF視圖狀態值。 我能夠提取價值。

以下是viewstate表單響應:

   <input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id4" />

我的正則表達式提取器如下:

<input\s+type="hidden"\s+name="javax\.faces\.ViewState"\s+id="javax\.faces\.ViewState"\s+value="([^"]+)".*/>

這很好。 我正確地獲得j_id4值並放置。

但是我最大的問題是每個API調用的值都會改變。 第一個API調用的視圖狀態值為j_id4 ,但是下一個API調用的視圖狀態將為j_id5

我該如何處理?

  1. 用正則表達式解析HTML不是最好的主意 ,我建議改為使用CSS / JQuery Extractor ,相關的配置將非常簡單:

    • 參考名稱:任何有意義的內容,即viewstate
    • CSS / JQuery表達式: input[name=javax.faces.ViewState]
    • 屬性: value
  2. 如果您的測試假設2(或更多)的HTTP請求取樣器,你要么需要應用CSS / JQuery的提取到他們每個人的ViewState的每一次調用改變,所以你需要每次都提取出來。 或者,您可以將CSS / JQuery提取器與HTTP請求采樣器置於同一級別,JMeter的后處理器遵循范圍規則,因此單個提取器將應用於其范圍內的所有采樣器。 就像是:

    JMeter CSS JQuery提取器

您可以添加2個正則表達式提取器,其中一個將提取j_id ,表達式將如下所示:

  • 正則表達式: value =“(。*?)\\ d”

第二個將提取數字4 ,表達式如下:

  • 正則表達式: value =“。+(\\ d)”

現在,使用以下代碼為每個API添加一個beanshell后處理器:

String j_id = vars.get("j_id");// j_id is the reference name of the first regular expression extractor
int num = Integer.parseInt(vars.get("num"));// num is the reference name for the second regular expression extractor
num = num + 1;
vars.put("num",String.valueOf(num));
vars.put("JSF", j_id + num);

對於第一個API,您可以使用相同的正則表達式,將上述beanshell后處理器添加到需要從中提取JSF視圖狀態值的所有API中之后,請使用$ {JSf},它將保存值j_id5用於第二個API, j_id6用於第三個API,依此類推。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM