2

我们正在尝试在 JSF 应用程序中使用 JMeter 添加一个简单的测试。我们按照以下说明进行操作:

http://jmeter.apache.org/usermanual/build-adv-web-test-plan.html

它有一个带有用户名和密码的简单登录页面以及一个提交按钮。您可以从屏幕截图中看到我们使用了代理。通过屏幕截图中的设置,我们得到 HTTP 500 错误。我不确定我是否以正确的方式提出问题。请询问您是否需要任何澄清。

在此处输入图像描述

饼干管理器

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

错误代码是: 在此处输入图像描述 在此处输入图像描述

编辑:我认为这将是最长的问题。但有时图像胜于文字。无论如何,我们所做的就是发送与我们在萤火虫中看到的数据相当的数据。但仍然收到 500 错误。您可以在附件中看到 Tomcat 日志。

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

4

3 回答 3

5

HTTP 5xx 代码与服务器或应用程序错误有关。首先搜索日志文件。

您的脚本不需要“用户定义的变量”组件,因为没有真正需要为每个线程/用户评估的变量表达式。

“正则表达式提取器”组件足以提取 JSF ViewState 值。我建议您删除表达式的最后一部分“/>”,并将正则表达式分组 (.+?) 更改为 (\w+?),因为它将评估为几个匹配项(可能只有 2 个)。更改“匹配号”的值。字段为 1(如果匹配的所有值都相同,则无需使用随机)。

我不明白您为什么同时使用“XPath Extractor”和“Regular Expression Extractor”组件来提取相同的值。在以 html 开头时,我更喜欢使用最后一个。XPath 在处理格式良好的 xml 字符串/文件时效果更好。

要从头开始捕获脚本,我建议您在 Workbench 中添加“HTTP 代理服务器”,对其进行配置、启动、配置浏览器以使用此代理并使用浏览器浏览这些页面。这样,您将捕获您选择的浏览器使用的所有请求和请求标头。在此之后,删除不必要的请求并将查询参数(如 javax.faces.ViewState)更改为相应的变量。

考虑在 HTTP 采样器中使用提取器(Pos-Processors),然后再使用参数值中的变量。例如:如果 /EBS 请求首先出现并且 /EBS/login.xhtml 请求有一个 javax.faces.ViewState 参数,那么 /EBS 响应可能会包含一个带有 javax.faces.ViewState 值的隐藏输入。

这是我使用的 JSF 应用程序测试脚本的常见组成。提供有关 HTTP 500 错误原因的更多信息应该阐明找到更好解决方案的方法。

于 2012-04-25T16:27:36.310 回答
5

在 jsfViewState 的正则表达式提取器上,添加(?s)到正则表达式的开头。所以你有了:

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

这允许(.+?)跨越换行符。

于 2012-09-19T16:14:45.633 回答
2

Your regular expression extractor is in the wrong place. You cannot extract a value from the response to a request and then send it with the same request. The only way to achieve this is to use a time machine, but these don't exist yet and even if they did, it probably wouldn't work.

Typically you get a viewstate in the response to a GET and then you later need it in the POST of the same page. So, put the regular expression extractor as a child of the GET call where the login.xhtml page is first called (as a GET). If your recording does not include this GET call then either add it manually or examine the responses of previous calls before your login POST to find it, eg. maybe the GET homepage.xhtml (or similar) will include it.

于 2012-05-05T16:10:08.447 回答