4

下午好 !

我将尝试清楚地向您解释我的问题。

上下文

我有一个向服务器发送 HTTP 请求的JMeter TestPlan。我有一个 Beanshell 脚本来断言返回的每种不同的错误情况。

  • 302 响应代码 -> 确定
  • 200 响应码 -> ?

在每个错误 200 中,我检查响应数据字符串以查看它是错误还是正确大小写。(像用户没有正确权限这样的用户错误是可以的,但是服务器不可用错误的,并且两者都有 200 作为响应代码。)

这是我的测试计划:

测试计划 JMeter

目标

由于我只有一个断言脚本返回了几个错误,因此我无法区分每个错误,除非取消合并 a 中的断言ViewResultTree。但是我在启动测试时禁用了它,我将远程启动我的 TestPlan。

我有手动计算每个错误的想法。我所有的样本都在我的断言脚本中,并if根据它们的内容进入正确的块。我在每个块中增加了一些变量(实际上是 JMeter.properties)。

int test = Integer.parseInt(props.getProperty("302"));
test++;
props.setProperty("302", ""+test);

我想在我的测试计划结束时在 JFrame 中显示所有这些变量,如下所示:

ScriptJFrame

问题

我的问题是我不知道如何在 TestPlan 之前和之后启动 Beanshell 脚本。

我希望在发送任何样本之前启动第一个脚本,只是将我的所有属性变量初始化为 0(否则,它们保留最后一个 TestPlan 的值)。

而且,我想要第二个在测试计划完成后显示我的 Frame 和所有变量。(目前它是一个 JFrame,但不会一直这样。)

经过测试的解决方案

1) 对于我的第一个脚本,我Counter在测试计划的开头将 (JMeter > Config Element > Counter) 设置为 0。我用它来检查我的测试是否已经开始,而不是If Controller

如果控制器(计数器==0)

我有一个预处理器 Beanshell,props.set("302","0");其中“302”是我的属性,用于计算所有 302 响应代码。

它可以正常工作,但我想知道是否有正确的方法可以做到这一点。

2)然后,对于我的第二个脚本,我尝试使用${JMeterThread.last_sample_ok}If Controller但它不像我预期的那样工作。如果我把它放在我的样本之后,它会在所有 OK 断言之后开始,如果我把它放在测试计划的末尾,它就永远不会被调用。

在我的所有线程都停止(即所有示例完成)之后,我如何运行一次我的 beanshell 脚本?

提前谢谢你,我希望你明白一切!

4

1 回答 1

4

JMeter SetUp 线程组TearDown 线程组就是为此而生的。

将您的 beanshell 组件添加到 setUp 线程组以在实际测试开始之前执行一些设置活动。类似地,tearDown 线程组在您的测试执行完成后运行。

于 2015-05-15T15:18:31.030 回答