简介
Jmeter中有很多逻辑控制器,可以控制请求的执行顺序和逻辑。本文详细介绍了Jmeter中常见的逻辑控制器,并通过实例让大家了解逻辑控制器的功能。
代码的逻辑分支通常包括:
条件中频
多条件选择开关
循环进行/进行
这些逻辑控制可以分别由Jmeter的中频控制器、开关支路控制器、While环路控制器、ForEach环路控制器和环路控制器来实现。
中频控制器
在实践中,当使用Jmeter进行接口测试或性能测试时,有时需要根据不同的条件进行不同的操作。为了解决这个问题,Jmeter提供了一个中频控制器。优秀的Lily,IF控制器在代码中实现IF的功能,通过判断表达式的真/假来判断是否执行相应的操作。
示例:确定用户角色是否为测试人员,如果是,执行百度搜索功能。
创建一个新的“配置组件-用户定义变量”来模拟脚本运行期间生成的变量角色,并将该值指定为tester。
新建一个if控制器,通过表达式指定if的判断条件。Jmeter的If控制器支持__jexl3或groovy语言。在Jmeter的if控制器中填充表达式时,不能直接编写表达式语言。相反,您应该使用Jmeter的函数生成器来生成指定语言的表达式。
在IF控制器下新建一个对应的操作步骤,在这里发起百度的一个Http请求;在实践中,每个人都可以根据业务流程在中频控制器中编写操作,当中频条件为真时,就会执行这些步骤。当中频条件为假时,中频控制器内的步骤被跳过。
点击脚本,通过查看结果树,可以发现IF控制器中的‘请求百度’已经执行。
将用户定义的变量改为其他值,使IF条件表达式的值为false,然后运行脚本,会发现IF控制器中的‘Request Baidu’语句不会被执行。
开关控制器
Swicth控制器用编程语言实现Switch功能,通过动态值选择要执行的语句。与if控制器的真/假判断相比,它指定语句按顺序值运行(从0开始)。
示例:根据不同的输入值调用不同的搜索引擎(百度、必应、搜狗)进行查询。
创建一个新的“配置组件-用户定义变量”来模拟脚本运行期间生成的变量索引,并指定索引=0。
ae7?from=pc">新建Switch控制器,并在Switch控制器下新建三个Http请求,分别代表请求baidu,请求bing,请求sougou
运行脚本,察看结果树,会发现此时会运行baidu; 依次变更index的值为1和2,会相应的运行bing和sougou。通过本示例可以看到Switch控制器会读取index变量,并根据Switch控制器下的请求顺序执行相应的操作。
While控制器
While控制器实现了编程语言中的循环控制功能,当表达式的值为true时会一直执行循环,直到表达式不满足特定的条件,可以应用到需要根据程序运行状态来判定循环是否继续的场景。
示例:初始值为1,每运行一次加1,直到值大于3时停止循环
新建"配置元件->用户定义的变量"定义初始变量的值,start=1
新建循环控制器,指定循环运行条件,此处和IF控制器的表达式类似,通过groovy或者是javascript语言来申明表达式
新建BeanshellSampler,通过代码实现每运行一次,start值加1。因为vars.get的值和vars.put的值都是String类型,此处需要进行String和int类型的转换
运行脚本,通过查看结果树可以发现BeanshellSampler一共被调用了2次,满足While控制器中定义的条件
循环控制器
Jmeter 提供循环控制器可以实现循环调用指定次数的逻辑操作
示例:发起5次baidu调用请求
运行脚本,可以从查看结果树中看到,baidu被调用了5次
For Each控制器
Jmeter ForEach控制器可以实现”条件"循环调用,比循环控制器的功能的更强大,它可以读取一组变量,然后根据不同的变量值去循环发起请求
示例:循环删除查询到的数据
调用上游接口,查询数据
提取查询结果,获取查询到的一组用户id数据
新建ForEach控制器,指定输入变量为上游接口提取的变量,以及输出变量名
在ForEach控制器中通过输出的变量去循环删除查询到的所有用户
运行脚本,查看结果,可以看到成功的删除了查询到的数据
结合上述几种逻辑控制器,可以使我们的脚本更灵活,实现运行时的动态调用;Jmeter还提供了其他逻辑控制器用于脚本的组织和数据的搜集,详情可以参考Jmeter官网:
http://jmeter.apache.org/usermanual/component_reference.html#logic_controllers
作 者:Testfan Kitty
出 处:微信公众号:自动化软件测试平台
版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出文章链接