Switch Controll的工作方式与交替控制器(Interleave Controller)类似,因为他们都是每次迭代都会运行一个子元件,但不同的是,Switch 控制器不是按照顺序执行的,而是按照控制器定义Swith Value来执行。
参数介绍
属性 | 描述 | 必填 |
---|---|---|
Name | 控制器名称,可以根据实际情况进行设置 | 否 |
Comments | 注释,描述在业务中的作用 | 否 |
Switch Value | 要调用的子元件的编号(或名称),即表示需要执行Switch控制器中的哪一个取样器。元件从0开始编号。默认为0 | 否 |
Switch Value填写的内容如下:
- 0:执行第一个请求,1:执行第二个请求,依次类推
- -1:无效,不会执行任何请求
- 要是填的数字超过取值范围了,就默认是0
- 不填:默认执行数字0的请求,即顺位第一个请求
- 非数字:可以填请求的名字来匹配,但是必须是完整的名字,如果是英文,区分大小写
元件编号执行
如果在Switch Value中输入0就表示执行第一个请求,如果输入1就表示执行第二请求,如果为空默认执行第一个请求。输入的值超出范围,就会执行第一个请求(有两个请求,值输入3,那么会执行第一个请求)。
元件名称执行
在Switch Controller下有两个请求,名称为“请求1”和“请求2”,如果在Switch Value中输入“请求1”,那么就会执行“请求1”,如果输入“请求2”,那么就会执行“请求2”;如果两个名称都不匹配,则选择名为“ default”的元件(大小写无关)。如果没有默认值,则不会选择任何元件,并且控制器将不会运行任何内容。
例如,输入一个名称都不存在的请求:Test,那么它会执行default元件,运行结果如下所示:
使用表达式
如果Switch Value是根据前一个取值来获得的,所以在这里数值可以使用变量代替,如根据上一个请求的数据来执行Switch Controller下的请求,如图所示:
并且在该请求下添加一个后置处理器Regular Expression Extractor来提取id号,设置一个变量ID,正则表达式为'id': ([0-9]+)
如下图所示:
在Swith Value输入${ID}的表达式获取ID号,如下图所示:
执行结果如下所示:
还有一种情况是返回的结果是字符,不是单纯的数字,这个时候需要用BeanShell Sampler取样器,将字符转换成相应的数字或者转换成相应的请求名称,在进行后续操作,代码为:
String IDS = vars.get("ID");
print(IDS);
if (IDS.equals("1")){
vars.put("names", "HTTP请求--2");
}else{
vars.put("names", "HTTP请求--1");
}
如下图所示:
在Swith Value表达式为${names}
,如下图所示:
执行结果如下图所示: