如何在测试停止后运行JMeter失败的线程?

时间:2013-09-17 16:21:49

标签: jmeter jmeter-plugins

我正在使用JMeter运行功能测试来更新许多用户的密码(22K)。我用2个脚本分隔了用户并使用了一个终极线程组,其中Start Threads Count = 100,这是我得到的错误较少的值,但是我仍然有1.5%的事务失败,我只需要重新运行这个失败线程,因为所有用户都需要具有相同的密码。 我试图找到这个特定问题的答案,但我只找到了防止这种情况发生的方法,例如使用带有计时器的While控制器,或记录完整的响应失败,但我还没有找到是否有一种专门重新运行失败线程的方法。 有谁知道这是否可行?

2 个答案:

答案 0 :(得分:0)

您必须执行以下操作。

  • 使用JSR223采样器设置rescode = 0
  • 带控制器(如果重新编码!= 200)
    • HTTP采样器
      • JSR223后处理器作为脚本语言的javascript。
      • 使用prev.getResponseCode()存储响应代码
        • e.g。 vars.put(“rescode”,prev.getResponseCode());

您可能需要为脚本添加更多智能以避免无限循环。

答案 1 :(得分:0)

解决问题的另一种方法是预测某些密码更新调用的错误,并在失败时使用您需要的信息构建数据文件。

例如:

创建一个正则表达式后处理器,其默认值为false,模板值为true。使表达式与预期响应匹配,如果样本失败则失败。

然后,在该采样器之后,您可以根据新的true / false变量添加if语句。如果为false,则表示先前的密码更新失败。在if语句中,添加一个带有响应数据的虚拟采样器,其中包含您需要知道必须重试哪些帐户的所有信息。

然后,将一个简单的文件编写器添加到此虚拟采样器,并将虚拟采样器响应数据记录到文件中。在测试运行结束时,此数据文件将包含重新尝试所有失败帐户所需的所有信息。

遗憾的是,这是一个略微手动的过程,但我确信只需一点创造力就可以自动执行递归测试运行,直到重试文件为空。 Beanshell文件IO可能允许您在单次测试运行中处理所有内容。

-Addled