我们正在尝试在JSF应用程序中使用JMeter添加一个简单的测试。我们按照以下说明进行操作:
http://jmeter.apache.org/usermanual/build-adv-web-test-plan.html
它有一个简单的登录页面,其中包含用户名和密码以及提交按钮。您可以从屏幕截图中看到我们使用了代理。使用屏幕截图中的设置,我们收到HTTP 500错误。我不确定我是否以正确的方式提出问题。请询问您是否需要澄清。
错误代码是:
修改: 我认为这将是SO最长的问题。但有时候图像比文字要好。无论如何,我们所做的是发送与我们在firebug中看到的数据相同的数据。但仍然有500错误。您可以在附件中看到Tomcat日志。
答案 0 :(得分:5)
HTTP 5xx代码与服务器或应用程序错误有关。首先搜索日志文件。
您的脚本不需要“用户定义的变量”组件,因为没有真正需要根据线程/用户评估的变量表达式。
“正则表达式提取器”组件足以提取JSF ViewState值。 我建议你删除表达式的最后一部分“/>”,并将正则表达式分组(。+?)更改为(\ w +?)'因为它将评估为几个匹配(可能只有2个)。更改“匹配号”的值字段为1(如果匹配的所有值都相同,则无需使用随机数。)
我不明白为什么你同时使用“XPath Extractor”和“Regular Expression Extractor”组件来提取相同的值。我喜欢在使用html时使用最后一个。使用格式良好的xml字符串/文件进行处理时,XPath会更好。
要从头开始捕获脚本,我建议您在Workbench中添加“HTTP代理服务器”,配置它,启动它,配置浏览器以使用此代理并使用浏览器导航这些页面。这样,您将捕获所有请求,并请求您选择的浏览器使用的标头。在此之后,删除不必要的请求并将查询参数(如javax.faces.ViewState)更改为相应的变量。
考虑在将使用参数值中的变量的HTTP Sampler之前使用提取器(Pos-Processors)。例如:if / EBS请求是第一个,而/EBS/login.xhtml请求有一个javax.faces.ViewState参数,那么,/ EBS响应可能包含一个带有javax.faces.ViewState值的隐藏输入。
这是我使用的JSF应用程序测试脚本的常见组成部分。提供有关HTTP 500错误原因的更多信息应阐明获得更好解决方案的方法。
答案 1 :(得分:5)
在jsfViewState的正则表达式提取器上,将(?s)
添加到正则表达式的开头。所以你有:
(?s)<input type="hidden" name="javax\.faces\.ViewState" id="javax\.faces\.ViewState" value="(.+?)" />
这允许(.+?)
跨越换行符。
答案 2 :(得分:2)
您的正则表达式提取器位于错误的位置。您无法从对请求的响应中提取值,然后使用相同的请求发送它。实现这一目标的唯一方法是使用时间机器,但这些机器尚不存在,即使它们确实存在,也可能不起作用。
通常,您在对GET的响应中获得一个视图状态,然后您在同一页面的POST中需要它。因此,将正则表达式提取器作为GET调用的子,首先调用login.xhtml页面(作为GET)。如果您的录音不包含此GET调用,则可以手动添加它或在登录POST之前检查之前调用的响应以查找它,例如。也许GET homepage.xhtml(或类似的)将包含它。