前置处理器:BeanShell Preprocess
采样器:BeanShellSampler
后置处理器:BeanShell PostProcess
断言:BeanShell断言

具体应用:
后置处理器的应用:

前面讲了如何使用正则表达式提取值,一般提取的值在同一个线程里,随意哪个请求都是可以引用的,那如果别的线程组也想引用怎么办呢?这时就涉及到一个全局变量的知识点了,话不多说,直接实例走起。
1、BeanShell创建全局变量(跨线程组):可以用Beanshell取样器或者Beanshell后置处理器
1)创建一个局部的变量(线程组内):token
2)使用Beanshell调用创建的局部变量token,并将全局变量命名为newtoken,示例${__setProperty(newtoken,${token},)}
3)跨线程组调用全局变量
方法1:${__P(newtoken)}; //调用全局变量
方法2:${__property(newtoken)}; //也可以这样调用全局变量,和上面的写法是等价的
方法3:Beanshell前置处理器-将newtoken拿过来赋值给token1,然后可以${token1}引用
String a1=props.get("newtoken");
vars.put("token1",a1)
夸线程 实战 演示
1、在【登录】线程组的[统一登录]请求下,右键>添加>后置处理器>正则表达式,把统一登录成功后的响应结果里的token用正则表达式提取出来,引用名称是“token”。

添加beanshell 后置处理器:
-
- ${__setProperty(new_token,${token},)}; #将局部变量token 赋值给全局变量new_token
- String a=vars.get("token"); # 获取局部变量给变量a
- log.info("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");#打印日志 方便排查问题
- log.info("a="+a);#打印变量a 方便排查局部变量的值是否错误

新建查询线程:
添加http请求:
添加beanshell预处理程序:

- String a1 = props.get("new_token"); #读取全局变量new_token 并赋值给a1
- vars.put("token2",a1); #把a1 赋值给 token2
- log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
- log.info("token2="+token2);#打印token2
在http请求头中使用token2变量:

如果直接运行,通过日志发现,先运行查询线程,后运行登录线程,所以一直获取不到token,查询线程失败。
解决办法:
1)在测试计划中 选择独立运行每个线程组

2)在查询线程中添加固定定时器
