jmeter跨线程组传值
需求背景:1.采购登陆,创建订单;2.供应登陆,确认该订单。所以这里就会涉及到1中生成的订单号需要传递到2中。
需求实现:用jmeter进行1,2的自动化;1,2分成了2个不同的线程组,所以这里就需要跨线程组传递订单号。
跨线程组传值:
1.创建订单后先获取生成的订单号:
创建订单成功的返回如下:
{"Success":true,"Message":null,"Data":[{"SOSNo":"10009004","Price":19999999.98000,"PayMethod":"线下支付","ShoppingCartMasterNo":10009004,"AduitChoiceStatus":30,"OrderSource":3,"ParentSOSysNo":10009004}],"Code":0}
实现:创建订单请求上,添加jp@gc - JSON/YAML Path Extractor提取创建订单成功后返回的订单号,如下:
2.还是在该请求中,加后置处理器BeanShell PostProcessor;
3.在该后置处理器中,编写脚本:
4.在测试计划上添加前置处理器BeanShell PreProcessor:
5.前置处理器中编写脚本:
6.引用newsosysno值,看是否成功跨线程组传递:
PS:为了让每个线程组顺序执行,需要在测试计划中勾上独立运行每个线程组。
遇到的问题如下:
在2确认订单的时候,一直报错,查看请求,看到订单号并没有正确传递过来,还是参数的形式:
{"SOSysNo":${newsosysno},"OptType":20,"Note":"确认订单"}
打开log(工具栏Options->Log Viewer),查看报错如下:
2019-11-26 16:23:49,150 ERROR o.a.j.u.BeanShellInterpreter: Error invoking bsh method: eval Sourced file: inline evaluation of: ``string sosysno=bsh.args[0]; print(sosysno); ${_setProperty(newsosysno,${sosyno}, . . . '' : Typed variable declaration : Class: string not found in namespace
原因:string写法的问题。应该写String,不是string。。。。修改后,成功了!