Beanshell 脚本在 JMeter 中启动一次(测试计划的开始和结束)

Beanshell script launched once (start and end of test plan) in JMeter

下午好!

我会尽量把我的问题解释清楚。

上下文

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

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

这是我的测试计划:

目标

因为只有一个断言脚本返回了几个错误,所以我无法区分每个错误,除非在 ViewResultTree 中解开断言。但是我在启动我的测试时禁用它,我将远程启动我的 TestPlan。

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

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

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

问题

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

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

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

经过测试的解决方案

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

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

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

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

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

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

JMeter SetUp thread group and TearDown thread group 正是为此而设计的。

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