从Bean shell / JSR223调用事务控制器或HTTP采样器

时间:2017-10-25 17:36:26

标签: groovy jmeter beanshell jsr223 jmeter-3.2

问题陈述。 一组事务(1000+)并且需要通过从Beanshell或JSR233调用来调用或重用(不在不同的if / switch控制器中重复)。

在SoapUI中,我们使用groovy脚本选项来中断顺序执行,并使用以下命令将控制转移到任何请求。

if( Math.random() > 0.5 )
   testRunner.runTestStepByName( "Request 1")
else
   testRunner.runTestStepByName( "Request 2")

// do something else
....

Loadrunner中的相同功能(具有不同操作的运行时设置)和neoload也是如此。

我们是否有任何内置对象或函数可以通过事务或JSR223 / BeanShell中的Sampler名称执行而不使用if / while / switch controller

例如:

在脚本10中存在事务,并通过在Jenkins或命令提示符执行期间设置JMeter属性,为不同的场景使用相同的脚本。

__P(Flow,RoomBooking)

然后从JSR233 / beanshell sampler

if(Flow=="RoomBooking"){

invoke Login 

invoke BookRoom

invoke Logout

} else if(Flow=="RoomBookingNBookItinerary")

invoke Login 

invoke BookRoom

invoke BookItinerary

invoke Logout

}else if(Flow=="RoomBookingNcancel")

invoke Login 

invoke BookRoom

Invoke ParkTicket 

invoke CancelRoom

invoke Logout

}Like different flows with different thread and throughput 

在这种情况下,我可以混合和匹配不同的流程,并为不同的流程重用相同的脚本。 这有助于减少应用程序更改期间的脚本返工工作。

3 个答案:

答案 0 :(得分:1)

如果您正在寻找一种从JSR223脚本再次执行前一个采样器的方法,那就是:

ctx.getPreviousSampler().sample(null)

其中ctx代表所有可用方法和字段的JMeterContext

演示:

JSR223 Execute Sampler One more Time

然而,更好的想法是使用JMeter的Module Controller,它允许在其他地方执行JMeter测试计划的一部分,这样你就可以实现goto statement in JMeter的形式

答案 1 :(得分:1)

你是对的,JMeter根本就没有JSR 223 Logic Controller,

我认为它可以帮助改变if控制器,

我建议您打开enhancement到JMeter产品(选择严重性:增强)

修改

您可以Bug 61711 - Add JSR223 Logic Controller开启新的vote

答案 2 :(得分:0)

您可以使用Switch Controller

执行此操作

Test Plan

任何步骤都是Transaction Controller

JSR223 Sampler中,您可以设置所需的步骤:

JSR223 Sampler