【问题标题】:How to run JMeter failed threads after test stops?测试停止后如何运行 JMeter 失败的线程?
【发布时间】:2013-09-17 16:21:48
【问题描述】:
我正在使用 JMeter 运行功能测试来更新许多用户的密码 (22K)。我在 2 个脚本中分离了用户,并使用了启动线程数 = 100 的终极线程组,这是我得到较少错误的值,但是我仍然有 1.5% 的事务失败,我只需要重新运行这个失败线程,因为所有用户都需要具有相同的密码。
我试图得到这个特定问题的答案,但我只找到了防止这种情况发生的方法,比如使用带计时器的 While 控制器,或者记录失败的完整响应,但我还没有找到是否存在一种专门重新运行失败线程的方法。
有谁知道这是否可能?
【问题讨论】:
标签:
jmeter
jmeter-plugins
【解决方案1】:
你必须做以下事情。
- 使用 JSR223 采样器设置 rescode=0
- 当控制器带有(如果重新编码!=200)
- HTTP 采样器
- JSR223 后处理器作为 javascript 作为脚本语言。
- 使用 prev.getResponseCode() 存储响应代码
- 例如vars.put("rescode", prev.getResponseCode());
您可能需要为脚本添加更多智能以避免无限循环。
【解决方案2】:
解决问题的另一种方法是预测某些密码更新调用的错误,并在失败时使用您需要的信息构建一个数据文件。
例如:
创建一个正则表达式后处理器,默认值为 false,模板值为 true。使表达式匹配预期的响应,如果样本失败则失败。
然后,在该采样器之后,您可以添加一个基于新 true/false 变量的 if 语句。如果为 false,则您知道之前的密码更新失败。在 if 语句中,添加一个带有响应数据的虚拟采样器,其中包含您需要知道哪些帐户必须重试的所有信息。
然后,向这个虚拟采样器添加一个简单的文件写入器,并将虚拟采样器响应数据记录到文件中。在测试运行结束时,此数据文件将包含您重试所有失败帐户所需的所有信息。
遗憾的是,这是一个稍微手动的过程,但我敢肯定,只要有一点创意,您就可以自动运行递归测试,直到重试文件为空。 Beanshell 文件 IO 可能让您在一次测试运行中处理所有这些。
-添加