下午好 !
我将尝试清楚地向您解释我的问题。
上下文
我有一个向服务器发送 HTTP 请求的JMeter TestPlan。我有一个 Beanshell 脚本来断言返回的每种不同的错误情况。
- 302 响应代码 -> 确定
- 200 响应码 -> ?
在每个错误 200 中,我检查响应数据字符串以查看它是错误还是正确大小写。(像用户没有正确权限这样的用户错误是可以的,但是服务器不可用是错误的,并且两者都有 200 作为响应代码。)
这是我的测试计划:
目标
由于我只有一个断言脚本返回了几个错误,因此我无法区分每个错误,除非取消合并 a 中的断言ViewResultTree
。但是我在启动测试时禁用了它,我将远程启动我的 TestPlan。
我有手动计算每个错误的想法。我所有的样本都在我的断言脚本中,并if
根据它们的内容进入正确的块。我在每个块中增加了一些变量(实际上是 JMeter.properties)。
int test = Integer.parseInt(props.getProperty("302"));
test++;
props.setProperty("302", ""+test);
我想在我的测试计划结束时在 JFrame 中显示所有这些变量,如下所示:
问题
我的问题是我不知道如何在 TestPlan 之前和之后启动 Beanshell 脚本。
我希望在发送任何样本之前启动第一个脚本,只是将我的所有属性变量初始化为 0(否则,它们保留最后一个 TestPlan 的值)。
而且,我想要第二个在测试计划完成后显示我的 Frame 和所有变量。(目前它是一个 JFrame,但不会一直这样。)
经过测试的解决方案
1) 对于我的第一个脚本,我Counter
在测试计划的开头将 (JMeter > Config Element > Counter) 设置为 0。我用它来检查我的测试是否已经开始,而不是If Controller
:
我有一个预处理器 Beanshell,props.set("302","0");
其中“302”是我的属性,用于计算所有 302 响应代码。
它可以正常工作,但我想知道是否有正确的方法可以做到这一点。
2)然后,对于我的第二个脚本,我尝试使用${JMeterThread.last_sample_ok}
,If Controller
但它不像我预期的那样工作。如果我把它放在我的样本之后,它会在所有 OK 断言之后开始,如果我把它放在测试计划的末尾,它就永远不会被调用。
在我的所有线程都停止(即所有示例完成)之后,我如何运行一次我的 beanshell 脚本?
提前谢谢你,我希望你明白一切!