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

时间:2015-05-15 14:45:02

标签: jmeter beanshell test-plan

下午好!

我会尽力向你解释我的问题。

上下文

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

  • 302响应代码 - >行
  • 200响应代码 - > ?

在每个错误200中,我检查响应数据字符串以查看它是错误还是正确的情况。 (用户错误,例如用户没有正确的权利 确定,但服务器不可用 错误,两者都是有200作为响应代码。)

这是我的测试计划:

TestPlan JMeter

目标

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

我有想法手动计算每个错误。我的所有示例都在我的Assertion脚本中,并根据其内容转到正确的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

If Controller (counter==0)

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

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

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

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

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

1 个答案:

答案 0 :(得分:3)

JMeter SetUp thread groupTearDown thread group就是为了这个。

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