【问题标题】:Simple JMeter Test does not work简单的 JMeter 测试不起作用
【发布时间】:2012-04-25 15:09:40
【问题描述】:

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

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

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

错误代码是:

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

【问题讨论】:

  • 嗯。根据问题中最后一个屏幕的“POST 数据”内容,javax.faces.ViewState 的空值与 POST 请求一起发送。尝试调整您的 RegEx / XML Extractor 以获取视图状态。如果还没有,请查看:wiki.apache.org/myfaces/PerformanceTestingWithJMeter.
  • 您必须激活“正则表达式提取器”组件才能评估 ${jsfViewState}。
  • 你知道怎么激活吗?
  • 你是指线程组下的那个吗?我们已经禁用了线程组下的那个,但是 login.xhtml 请求下的那个是启用的。
  • 如果我感觉没错的话,/EBS/login.xhtml 就是登录提交模拟。然后,HTTP 采样器中必须有一个“正则表达式提取器”,然后才能保存 javax.faces.ViewState 值。

标签: java testing jsf-2 automated-tests jmeter


【解决方案1】:

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 错误原因的更多信息应该阐明找到更好解决方案的方法。

【讨论】:

  • 非常感谢您的详细回答。我们尝试了您的建议,但仍然收到 HTTP 500 错误。我添加了最新的截图,以防您想再次发表评论。
【解决方案2】:

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

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

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

【讨论】:

  • 非常感谢!这真的很有帮助。
【解决方案3】:

您的正则表达式提取器放错了位置。您不能从对请求的响应中提取值,然后将其与相同的请求一起发送。实现这一点的唯一方法是使用时间机器,但这些还不存在,即使存在,也可能无法工作。

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

【讨论】:

  • 感谢您的回答我暂时放弃了使用Jmeter,找到另一个开源工具,有很好的教程,尝试一下。
猜你喜欢
  • 2018-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-19
  • 2012-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多