【大厂内部测试教程】Jmeter接口测试(IF)(ForEach)逻辑控制器/定时器

【文章末尾给大家留下了大量的福利】

简介:

Jmeter有很多逻辑控制器,可以控制请求的执行顺序执行逻辑,本文就Jmeter常见的逻辑控制器做一个详细的描述,并通过示例让大家了解逻辑控制器的作用。

【大厂内部测试教程】Jmeter接口测试(IF)(ForEach)逻辑控制器/定时器_第1张图片

代码的逻辑分支通常有:条件判断IF多条件选择Switch循环While/For这些逻辑控制可以分别通过Jmeter的IF控制器,Switch分支控制器,While循环控制器,ForEach循环控制器,循环控制器来实现。

IF控制器

在实际工作中,当使用Jmeter进行接口测试或者性能测试时,有时需要根据不同条件做不同的操作,为了解决这个问题,Jmeter提供了IF控制器。顾名思义,IF控制器实现了代码中IF的功能,通过判断表达式的True/False来判定是否执行相应的操作。

示例场景:判断用户角色是否为tester,如果是tester,则执行baidu搜索功能【大厂内部测试教程】Jmeter接口测试(IF)(ForEach)逻辑控制器/定时器_第2张图片

新建"配置元件->用户定义的变量"模拟脚本运行过程中生成的变量role,并指定值为tester【大厂内部测试教程】Jmeter接口测试(IF)(ForEach)逻辑控制器/定时器_第3张图片

新建if控制器,通过表达式指定if的判断条件。Jmeter的If控制器支持__jexl3或者是groovy语言,在Jmeter的if控制器中填入表达式时,不能直接编写表达式语言,而是要借用Jmeter的函数生成器,生成指定语言的表达式。【大厂内部测试教程】Jmeter接口测试(IF)(ForEach)逻辑控制器/定时器_第4张图片

在IF控制器下新建相应的操作步骤,此处发起一个baidu的Http请求;实际应用中,大家可以根据业务流编写IF控制器内的操作,当IF条件为true时,会执行其中的步骤;当IF条件为false时,会跳过IF控制器内部的步骤。点击运行脚本,通过查看结果树可以发现IF控制器中的"请求百度"被执行。【大厂内部测试教程】Jmeter接口测试(IF)(ForEach)逻辑控制器/定时器_第5张图片

更改用户定义的变量为其他值使得IF条件表达式的值为false,再运行脚本,会发现IF控制器中的"请求百度"语句不会被执行。

Switch控制器

Swicth控制器实现了编程语言中的Switch功能,通过动态的值选择要执行的语句,相对于if控制器的true/false判断,它通过顺序值(从0开始)来指定要运行的语句。示例场景:根据不同输入值调用不同的搜索引擎(baidu,bing,sougou)进行查询【大厂内部测试教程】Jmeter接口测试(IF)(ForEach)逻辑控制器/定时器_第6张图片

新建"配置元件->用户定义的变量"模拟脚本运行过程中生成的变量index,并指定index=0【大厂内部测试教程】Jmeter接口测试(IF)(ForEach)逻辑控制器/定时器_第7张图片

新建Switch控制器,并在Switch控制器下新建三个Http请求,分别代表请求baidu,请求bing,请求sougou【大厂内部测试教程】Jmeter接口测试(IF)(ForEach)逻辑控制器/定时器_第8张图片

运行脚本,察看结果树,会发现此时会运行baidu; 依次变更index的值为1和2,会相应的运行bing和sougou。通过本示例可以看到Switch控制器会读取index变量,并根据Switch控制器下的请求顺序执行相应的操作。【大厂内部测试教程】Jmeter接口测试(IF)(ForEach)逻辑控制器/定时器_第9张图片

While控制器

While控制器实现了编程语言中的循环控制功能,当表达式的值为true时会一直执行循环,直到表达式不满足特定的条件,可以应用到需要根据程序运行状态来判定循环是否继续的场景。示例:初始值为1,每运行一次加1,直到值大于3时停止循环【大厂内部测试教程】Jmeter接口测试(IF)(ForEach)逻辑控制器/定时器_第10张图片

新建"配置元件->用户定义的变量"定义初始变量的值,start=1【大厂内部测试教程】Jmeter接口测试(IF)(ForEach)逻辑控制器/定时器_第11张图片

新建循环控制器,指定循环运行条件,此处和IF控制器的表达式类似,通过groovy或者是javascript语言来申明表达式【大厂内部测试教程】Jmeter接口测试(IF)(ForEach)逻辑控制器/定时器_第12张图片

新建BeanshellSampler,通过代码实现每运行一次,start值加1。因为vars.get的值和vars.put的值都是String类型,此处需要进行String和int类型的转换【大厂内部测试教程】Jmeter接口测试(IF)(ForEach)逻辑控制器/定时器_第13张图片

运行脚本,通过查看结果树可以发现BeanshellSampler一共被调用了2次,满足While控制器中定义的条件【大厂内部测试教程】Jmeter接口测试(IF)(ForEach)逻辑控制器/定时器_第14张图片

循环控制器

Jmeter 提供循环控制器可以实现循环调用指定次数的逻辑操作示例:发起5次baidu调用请求【大厂内部测试教程】Jmeter接口测试(IF)(ForEach)逻辑控制器/定时器_第15张图片

运行脚本,可以从查看结果树中看到,baidu被调用了5次【大厂内部测试教程】Jmeter接口测试(IF)(ForEach)逻辑控制器/定时器_第16张图片

For Each控制器

Jmeter ForEach控制器可以实现”条件"循环调用,比循环控制器的功能的更强大,它可以读取一组变量,然后根据不同的变量值去循环发起请求

示例:循环删除查询到的数据【大厂内部测试教程】Jmeter接口测试(IF)(ForEach)逻辑控制器/定时器_第17张图片

调用上游接口,查询数据【大厂内部测试教程】Jmeter接口测试(IF)(ForEach)逻辑控制器/定时器_第18张图片

提取查询结果,获取查询到的一组用户id数据【大厂内部测试教程】Jmeter接口测试(IF)(ForEach)逻辑控制器/定时器_第19张图片

新建ForEach控制器,指定输入变量为上游接口提取的变量,以及输出变量名【大厂内部测试教程】Jmeter接口测试(IF)(ForEach)逻辑控制器/定时器_第20张图片

在ForEach控制器中通过输出的变量去循环删除查询到的所有用户【大厂内部测试教程】Jmeter接口测试(IF)(ForEach)逻辑控制器/定时器_第21张图片

运行脚本,查看结果,可以看到成功的删除了查询到的数据【大厂内部测试教程】Jmeter接口测试(IF)(ForEach)逻辑控制器/定时器_第22张图片

 【大厂内部测试教程】Jmeter接口测试(IF)(ForEach)逻辑控制器/定时器_第23张图片

结合上述几种逻辑控制器,可以使我们的脚本更灵活,实现运行时的动态调用;Jmeter还提供了其他逻辑控制器用于脚本的组织和数据的搜集。
​​​​​​​

你可能感兴趣的:(开发语言,jmeter)