2012-04-25 113 views
2

我们试图在JSF应用程序中使用JMeter添加一个简单的测试。我们遵循中的说明:简单的JMeter测试不起作用

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

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

enter image description here

Cookie Manager

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

错误代码是: enter image description here enter image description here

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

enter image description here enter image description here enter image description hereenter image description here enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here

+0

嗯。根据您问题的最后一个屏幕中的“POST数据”内容,javax.faces.ViewState的空值随POST请求一起发送。尝试调整您的RegEx/XML Extractor以获取视图状态。看看这个如果还没有:http://wiki.apache.org/myfaces/PerformanceTestingWithJMeter。 – 2012-04-25 15:51:50

+0

您必须激活“Regular Expression Extractor”组件才能获得$ {jsfViewState}评估。 – 2012-04-26 12:51:30

+0

你知道如何激活它吗? – lamostreta 2012-04-26 12:54:27

回答

5

HTTP 5XX码都与服务器或应用程序的错误。先搜索日志文件。

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

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

我不明白你为什么使用“XPath Extractor”和“Regular Expression Extractor”组件来提取相同的值。当使用html引导时,我更喜欢使用最后一个。使用格式良好的xml字符串/文件进行处理时,XPath会更好。

为了捕捉从无到有的脚本,我建议你向里面添加一个工作台“HTTP代理服务器”,它配置,启动,配置浏览器使用这个代理通过浏览器浏览这些页面。通过这种方式,您将捕获所有请求并请求您选择的浏览器使用的标头。之后,删除不必要的请求并将查询参数(如javax.faces.ViewState)更改为相应的变量。

考虑使用提取器(POS-处理器)的HTTP取样器内之前,将使用该变量中的参数值的一个。例如:如果/ EBS请求首先发送并且/EBS/login.xhtml请求具有javax.faces.ViewState参数,那么可能/ EBS响应将包含具有javax.faces.ViewState值的隐藏输入。

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

+0

非常感谢您的详细解答。我们尝试了您的建议,但仍然收到HTTP 500错误。我添加了最新的截图,以备您再次发表评论。 – lamostreta 2012-04-26 12:34:40

2

你的正则表达式提取器在错误的地方。您无法从对请求的响应中提取值,然后使用相同的请求发送它。实现这一目标的唯一方法是使用时间机器,但这些时间机器还不存在,即使他们这样做了,也可能不起作用。

通常你可以在响应GET一个视图状态,然后您以后需要在同一页面的POST。因此,将正则表达式提取器作为第一次调用login.xhtml页面(作为GET)的GET调用的子项。如果您的录音不包括此GET呼叫,则可以手动添加它,或者在登录POST之前检查以前呼叫的响应以找到它,例如。也许GET homepage.xhtml(或类似的)将包括它。

+0

感谢您的回答我放弃了现在与Jmeter的合作,找到了另一个开源工具,它有很好的教程,试用它。 – lamostreta 2012-05-09 12:37:42

5

在正则表达式提取器jsfViewState,加(?s)正则表达式的开始。所以,你必须:

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

这使得(.+?)跨越换行符。

+0

感谢您的回答。 – lamostreta 2012-09-20 14:40:45

+0

谢谢!这真的很有帮助。 – Dexter 2013-01-18 21:09:27