使用JMeter测试JSF应用程序 - ViewState问题

13

我整天都在尝试运行我的JSF应用程序的JMeter测试。 我知道ViewState,但它似乎是一个非常简单的问题。我准备了正则表达式提取器:

Reference Name: jsfViewState
Regular expression: id=\"javax.faces.ViewState\" value=\"(.+?)\"
Template $1$
Match No. 1

Regular Exp Extractor

以下采样器是使用代理和录制创建的。

首先请求/TourJSF/pages/protected/admin/addTourPage.xhtml。这是一个GET请求,从中将提取ViewState。

First GET

POST请求/TourJSF/pages/protected/admin/addTourPage.xhtml,其中传递了${jsfViewStete}javax.faces.ViewState

jsfViewState passed

第二个GET请求,在这种情况下非常重要。

Second GET

结果:

第一个GET。在右侧,我们可以看到ViewState的值。

first GET result

Debug Sampler 显示 jsfViewState 的值是正确的。我们可以将其与前一个屏幕进行比较。

Debug Sampler

javax.faces.application.ViewExpiredException: viewId:/pages/protected/admin/addTourPage.xhtml - View /pages/protected/admin/addTourPage.xhtml could not be restored.

ViewExpiredException addTourPage.xhtml could not be restored

我在stackoverflow上找到了一些关于这个问题的博客和帖子,但很多都没有解决。如果需要,我可以提供这些主题的链接。我真的很困惑...

问题出在哪里?也许与

  • jsessionid有关吗?
  • 每个HTTP请求中的HTTP Header Manager?我删除了HTTP Header Manager但是什么也没改变。
  • JSF应用程序有关?当我将com.sun.faces.enableRestoreView11Compatibility上下文参数添加到web.xml中时,就没有ViewExpiredException,但返回页面的内容不正确。
1个回答

10

我简直不敢相信...在线程组中使用HTTP Cookie管理器真的很有帮助。非常感谢! - LancerX
我已经在使用HTTP Cookie管理器,但是即使我已经传递了提取的JSF视图状态,我仍然遇到了问题。但是,您提供的第二个链接帮助了我。 "Some notes"部分提到必须将提取的视图状态作为“编码”的形式进行传递。一旦我将其设置为编码形式,jmeter测试就可以通过WebSphere Portal上的JSF Portlets。非常感谢!! - Uresh K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接