2013-02-28 177 views
6

我正在使用JMeter對JSF應用程序執行一些負載測試,並且無法沿着頁面傳遞ViewState。 ViewState變量根本不會被提取,也不會被傳遞到頁面上。使用JMeter測試JSF時提取ViewState

我錄我的測試步驟,一個代理服務器,這是它的樣子:

First GET Request

我已經添加了正則表達式提取第一GET請求。測試了正則表達式,它是正確的。

First POST Request

在每一個POST請求我與我的變量替換硬連線查看標識。

而我所得到的,當我發送請求如下:

Request sent

的POST參數是不正確的,因爲它發出的變量的名稱。

POST數據:

登錄表單%3ArequestToken = &登錄表單%3Ausername =海勒&登錄表單%3Apassword =%21QAYxsw2%A7EDC &登錄表單%3AloginButton =登陸& com.sun.faces.VIEW =%24 %7BjsfViewState%7D &登錄表單=登錄表單

你能告訴我在做什麼錯在這裏?
謝謝!

回答

2

發現我的問題:正則表達式是錯誤的,所以它在響應中找不到任何東西。我不得不改變正則表達式。在添加默認值「未找到」後注意到它。

2

ViewState參數是一個編碼值(Base64,我相信?),並且可能包含在通過url傳遞GET請求時不合適的值。通常對URL參數進行編碼,以便在請求到達服務器時可以表示和解碼特殊值(例如空格 - >%20)。

這裏的問題是,以下請求是POST,這意味着參數不需要進行URL編碼。

com.sun.faces.VIEW =%24%7BjsfViewState%7D &登錄表單=登錄表單

由上述可知,JMeter的或一些其它過程是在這是不正確的請求編碼的ViewState URL 。 ViewState的值應該照原樣發送。

+0

POST請求以urlencoded形式發送,這是真的。但我認爲問題是,提取的值根本不會在請求中設置,因爲我將變量的名稱看作com.sun.faces.VIEW的值,而不是從響應中提取的某個實際值先前的請求。 – 2013-02-28 15:22:17