从 Bean shell/JSR223 调用事务控制器或 HTTP 采样器
Invoking Transaction controller or HTTP sampler from Bean shell/JSR223
问题陈述。
一组交易(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 也提供相同的功能。
在不使用 if/while/switch 控制器 的情况下,我们是否有任何内置对象或函数可以通过 JSR223/BeanShell 中的事务或采样器名称执行?
例如:
在脚本中有 10 个事务,并且在通过 Jenkins 或命令提示符执行期间通过设置 JMeter 属性 为不同的场景使用相同的脚本。
__P(Flow,RoomBooking)
然后从JSR233 /beanshell采样器
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
在这种情况下,我可以混合和匹配不同的流程,并为不同的流程重复使用相同的脚本。
这将有助于减少应用程序更改期间的脚本返工工作。
你可以用 Switch Controller
任何一步都是Transaction Controller
然后在 JSR223 Sampler 中设置所需的步骤:
如果您正在寻找一种从 JSR223 脚本中再次执行前一个采样器的方法,它类似于:
ctx.getPreviousSampler().sample(null)
其中 ctx
代表所有可用方法和字段的 JMeterContext。
演示:
然而,更好的主意是使用 JMeter 的 Module Controller which allows executing a part of JMeter test plan somewhere else, this way you can implement a form of goto
statement in JMeter
你是对的,JMeter 根本没有 JSR 223 逻辑控制器,
我认为它也可以帮助改变 if 控制器,
我建议你打开一个enhancement到JMeter产品(选择Severity: enhancement)
编辑
有一个新的Bug 61711 - Add JSR223 Logic Controller you can vote。
问题陈述。 一组交易(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 也提供相同的功能。
在不使用 if/while/switch 控制器 的情况下,我们是否有任何内置对象或函数可以通过 JSR223/BeanShell 中的事务或采样器名称执行?
例如:
在脚本中有 10 个事务,并且在通过 Jenkins 或命令提示符执行期间通过设置 JMeter 属性 为不同的场景使用相同的脚本。
__P(Flow,RoomBooking)
然后从JSR233 /beanshell采样器
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
在这种情况下,我可以混合和匹配不同的流程,并为不同的流程重复使用相同的脚本。 这将有助于减少应用程序更改期间的脚本返工工作。
你可以用 Switch Controller
任何一步都是Transaction Controller
然后在 JSR223 Sampler 中设置所需的步骤:
如果您正在寻找一种从 JSR223 脚本中再次执行前一个采样器的方法,它类似于:
ctx.getPreviousSampler().sample(null)
其中 ctx
代表所有可用方法和字段的 JMeterContext。
演示:
然而,更好的主意是使用 JMeter 的 Module Controller which allows executing a part of JMeter test plan somewhere else, this way you can implement a form of goto
statement in JMeter
你是对的,JMeter 根本没有 JSR 223 逻辑控制器,
我认为它也可以帮助改变 if 控制器,
我建议你打开一个enhancement到JMeter产品(选择Severity: enhancement)
编辑
有一个新的Bug 61711 - Add JSR223 Logic Controller you can vote。