前言:大多数情况下,我们会从上一个请求的响应结果中提取某一个值,作为第二个请求的参数进行传参,但是有时候为了提高测试效率,尽可能制造少的测试数据,我们需要从上一个请求的响应结果中获取某一组相同类型的值作为参数进行传递,此时,应该怎么做呢?
应用场景:
步骤一:首先执行一个全局查询,查询出所有的值;
步骤二:提取出来步骤一的所有值的ID值,并作为参数传递给第二个请求,依次查询每一个ID的详细信息。
解决思路:
思路一:直接使用正则表达式提取器将提取结果直接传给第二个请求;
思路二:把提取的值取出来保存为csv,然后对第二个请求参数化,去读取这个csv的值(尚未研究如何保存提取的值);
思路一解决方案:
1.首先当然是前提步骤,需要执行第一个请求,并查看所有的响应结果:
2.因为第二个请求中,我们需要将上述响应结果中的ID值作为参数进行传递,因此此时需要添加正则表达式提取器将结果进行提取
正则表达式进行如下设置:
此时存在问题:运行完成后,发现第二次请求中参数处取值为null。
或者他永远只能取到响应结果中的第一个值,不能获取所有的值。
这显然不是我们想要的结果,通过与飞测小伙伴沟通后,需要添加一个元件,即ForEach控制器,即可有效结果此问题,因此进行如下改进:
运行后,结果如下:
至此,完美解决我们上述遇到的问题!
操作过程遇到的坑:
坑一:正则匹配有误
响应结果为:
但是正则表达式为:
如此就会匹配出来一些我们不需要的值。
改进:做如下改进,即可获得正确的值:
学习:
坑二:依次读取响应数据,读取失败
改进:添加ForEach控制器解决。
学习:
参数:
Input Variable Prefix:输入变量前缀,本例中为:param
Output variable name:输出变量名称,提供给其它控件引用
Start index for loop(exclusive):循环开始的索引(默认从0开始,如果填写是2,实际是从2+1个开始执行)
End index for loop(inclusive):循环结束的索引(默认从0开始,如果填写是2,实际是从2+1个开始执行)
Add””before number:输入变量名称中是否使用“”进行间隔。
注:原创,转载请说明出处!