jmeter 获取 _VIEWSTATE 和 __EVENTVALIDATION 参数时出现问题
jmeter Problems getting the _VIEWSTATE and __EVENTVALIDATION parameters
我在获取 __VIEWSTATE 和 __EVENTVALIDATION 参数时遇到一些问题。
我正在使用 post 处理器正则表达式提取器并将它们配置如下:
参考名称:aspViewstate
正则表达式:name="__VIEWSTATE" id="__VIEWSTATE" value="(.+?)"
模板:$1$
匹配数(0为随机):1
默认值:ERROR_VIEWSTATE
参考名称:aspEventValidation
正则表达式:name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="(.+?)"
模板:$1$
匹配数(0为随机):1
默认值:ERROR_EventValidation
然后,我将在 http 请求中分别替换 ${aspViewstate} 和 ${aspEventValidation} 的每个参数值。
我将正则表达式提取器放在 GET 请求下方和 POST 请求之前。
我包括一个调试采样器,我正在获取 "error result":
aspEventValidation=ERROR_EventValidation
aspViewstate=ERROR_VIEWSTATE
任何人都可以帮助我了解我所缺少的东西....
更新:
我正在使用 CSS/JQuery 提取器获取 __VIEWSTATE,如下所示并且正在工作:
CSS/JQuery Extractor Implementation:JSOUP
Reference Name: aspViewstate
CSS/JQuery Expression: input[id=__VIEWSTATE]
Attribute: value
Template: $
Match No. (0 for Random): 0
Default value: ERROR
但对于 __EVENTVALIDATION 不起作用,我使用相同的语法:
CSS/JQuery Extractor Implementation:JSOUP
Reference Name: aspEventValidation
CSS/JQuery Expression: input[id=__EVENTVALIDATION]
Attribute: value
Template: $
Match No. (0 for Random): 0
Default value: ERROR
我不知道发生了什么...
关于 VIEWSTATE 我已经获得了值,但系统向我发送以下错误,就像没有发送 VIEWSTATE...
错误:
<code><pre>
[FormatException: The input is not a valid Base64 string that contains a character that is not Base 64, more than two filler characters or an invalid character among the padding characters . ]
System.Convert.FromBase64_Decode(Char* startInputPtr, Int32 inputLength, Byte* startDestPtr, Int32 destLength) +14115992
System.Convert.FromBase64CharPtr(Char* inputPtr, Int32 inputLength) +162
System.Convert.FromBase64String(String s) +56
System.Web.UI.ObjectStateFormatter.Deserialize(String inputString, Purpose purpose) +102
System.Web.UI.Util.DeserializeWithAssert(IStateFormatter2 formatter, String serializedState, Purpose purpose) +67
System.Web.UI.HiddenFieldPageStatePersister.Load() +200
[ViewStateException: View state invalid
Client IP:
Port:
Referer: http://Art/WebLogiPortal/wfmLoginD.aspx?ReturnUrl=%2fArt%2fWebLogiPortal%2fwfmDefault.aspx
Path: /Art/WebLogiPortal/wfmLoginD.aspx
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
ViewState: ${aspViewstate}]
[HttpException (0x80004005): The state information is invalid for this page and might be corrupted.]
System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError) +157
System.Web.UI.HiddenFieldPageStatePersister.Load() +12060517
System.Web.UI.Page.LoadPageStateFromPersistenceMedium() +12315765
System.Web.UI.Page.LoadAllState() +51
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +12308619
System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +12308137
System.Web.UI.Page.ProcessRequest() +119
System.Web.UI.Page.ProcessRequest(HttpContext context) +99
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +913
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +165
</pre></code>
我添加了一个 Debug Post 处理器,我意识到发送到服务器的值只是变量的字符(即 ${viewstate}),而不是值,甚至不是默认值(错误)。
可能会发生什么?
这是调试 Post 处理器的响应日期:
HTTPSampler.response_timeout=
HTTPSampler.use_keepalive=true
HTTPsampler.Arguments=wucLoginPortal_ScriptManager1_HiddenField=&__EVENTTARGET=&__EVENTARGUMENT=&__LASTFOCUS=&__VIEWSTATE=${aspViewstate}&__VIEWSTATEGENERATOR=${viewstateGenerator}&__EVENTVALIDATION=${aspEventValidation}&wucLoginPortal$__LBLHDN__=&wucLoginPortal$txtLoginAD=user1&wucLoginPortal$txtPasswordAD=user1&wucLoginPortal$txtDominioAD=art.com&wucLoginPortal$btnAceptarAD=Aceptar
TestElement.enabled=true
TestElement.gui_class=org.apache.jmeter.protocol.http.control.gui.HttpTestSampleGui
TestElement.name=4 /Art/WebLogiPortal/wfmLoginD.aspx?ReturnUrl=%2fArt%2fWebLogiPortal%2fwfmDefault.aspx
TestElement.test_class=org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy
TestPlan.comments=Detected the start of a redirect chain
我不建议使用正则表达式提取器来获取视图状态和事件验证值,因为在更改属性位置、多行或具有额外 space 的情况下可能会导致您的正则表达式失败。
JMeter 提供了 2 个测试元素,旨在从 HTML 页面中提取值,它们是:
示例 XPath 定位器如下所示:
//input[@id='__VIEWSTATE']/@value
示例 CSS 选择器将是
input[id=__VIEWSTATE]
在"Attribute"输入中指定value
有关详细信息和建议,请参阅 ASP.NET Login Testing with JMeter 指南。
我在获取 __VIEWSTATE 和 __EVENTVALIDATION 参数时遇到一些问题。 我正在使用 post 处理器正则表达式提取器并将它们配置如下:
参考名称:aspViewstate
正则表达式:name="__VIEWSTATE" id="__VIEWSTATE" value="(.+?)"
模板:$1$
匹配数(0为随机):1
默认值:ERROR_VIEWSTATE
参考名称:aspEventValidation
正则表达式:name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="(.+?)"
模板:$1$
匹配数(0为随机):1
默认值:ERROR_EventValidation
然后,我将在 http 请求中分别替换 ${aspViewstate} 和 ${aspEventValidation} 的每个参数值。
我将正则表达式提取器放在 GET 请求下方和 POST 请求之前。
我包括一个调试采样器,我正在获取 "error result":
aspEventValidation=ERROR_EventValidation
aspViewstate=ERROR_VIEWSTATE
任何人都可以帮助我了解我所缺少的东西....
更新: 我正在使用 CSS/JQuery 提取器获取 __VIEWSTATE,如下所示并且正在工作:
CSS/JQuery Extractor Implementation:JSOUP
Reference Name: aspViewstate
CSS/JQuery Expression: input[id=__VIEWSTATE]
Attribute: value
Template: $
Match No. (0 for Random): 0
Default value: ERROR
但对于 __EVENTVALIDATION 不起作用,我使用相同的语法:
CSS/JQuery Extractor Implementation:JSOUP
Reference Name: aspEventValidation
CSS/JQuery Expression: input[id=__EVENTVALIDATION]
Attribute: value
Template: $
Match No. (0 for Random): 0
Default value: ERROR
我不知道发生了什么...
关于 VIEWSTATE 我已经获得了值,但系统向我发送以下错误,就像没有发送 VIEWSTATE...
错误:
<code><pre>
[FormatException: The input is not a valid Base64 string that contains a character that is not Base 64, more than two filler characters or an invalid character among the padding characters . ]
System.Convert.FromBase64_Decode(Char* startInputPtr, Int32 inputLength, Byte* startDestPtr, Int32 destLength) +14115992
System.Convert.FromBase64CharPtr(Char* inputPtr, Int32 inputLength) +162
System.Convert.FromBase64String(String s) +56
System.Web.UI.ObjectStateFormatter.Deserialize(String inputString, Purpose purpose) +102
System.Web.UI.Util.DeserializeWithAssert(IStateFormatter2 formatter, String serializedState, Purpose purpose) +67
System.Web.UI.HiddenFieldPageStatePersister.Load() +200
[ViewStateException: View state invalid
Client IP:
Port:
Referer: http://Art/WebLogiPortal/wfmLoginD.aspx?ReturnUrl=%2fArt%2fWebLogiPortal%2fwfmDefault.aspx
Path: /Art/WebLogiPortal/wfmLoginD.aspx
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
ViewState: ${aspViewstate}]
[HttpException (0x80004005): The state information is invalid for this page and might be corrupted.]
System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError) +157
System.Web.UI.HiddenFieldPageStatePersister.Load() +12060517
System.Web.UI.Page.LoadPageStateFromPersistenceMedium() +12315765
System.Web.UI.Page.LoadAllState() +51
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +12308619
System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +12308137
System.Web.UI.Page.ProcessRequest() +119
System.Web.UI.Page.ProcessRequest(HttpContext context) +99
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +913
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +165
</pre></code>
我添加了一个 Debug Post 处理器,我意识到发送到服务器的值只是变量的字符(即 ${viewstate}),而不是值,甚至不是默认值(错误)。 可能会发生什么?
这是调试 Post 处理器的响应日期:
HTTPSampler.response_timeout=
HTTPSampler.use_keepalive=true
HTTPsampler.Arguments=wucLoginPortal_ScriptManager1_HiddenField=&__EVENTTARGET=&__EVENTARGUMENT=&__LASTFOCUS=&__VIEWSTATE=${aspViewstate}&__VIEWSTATEGENERATOR=${viewstateGenerator}&__EVENTVALIDATION=${aspEventValidation}&wucLoginPortal$__LBLHDN__=&wucLoginPortal$txtLoginAD=user1&wucLoginPortal$txtPasswordAD=user1&wucLoginPortal$txtDominioAD=art.com&wucLoginPortal$btnAceptarAD=Aceptar
TestElement.enabled=true
TestElement.gui_class=org.apache.jmeter.protocol.http.control.gui.HttpTestSampleGui
TestElement.name=4 /Art/WebLogiPortal/wfmLoginD.aspx?ReturnUrl=%2fArt%2fWebLogiPortal%2fwfmDefault.aspx
TestElement.test_class=org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy
TestPlan.comments=Detected the start of a redirect chain
我不建议使用正则表达式提取器来获取视图状态和事件验证值,因为在更改属性位置、多行或具有额外 space 的情况下可能会导致您的正则表达式失败。
JMeter 提供了 2 个测试元素,旨在从 HTML 页面中提取值,它们是:
示例 XPath 定位器如下所示:
//input[@id='__VIEWSTATE']/@value
示例 CSS 选择器将是
input[id=__VIEWSTATE]
在"Attribute"输入中指定value
有关详细信息和建议,请参阅 ASP.NET Login Testing with JMeter 指南。