Jmeter自动化测试工具从入门到进阶6小时搞定.黑马跟学(二).进阶篇

在这里插入图片描述

  • 学习目标
    在这里插入图片描述

一、逻辑控制器

1.1 简介

通过参数化可以实现单个接口的功能测试,而接口测试过程中,除了单个接口的功能测试之外,还会测试接口业务实现,所谓业务,就是一套完整的业务逻辑或流程,这就必须要使用到逻辑控制和关联。
在这里插入图片描述

1.2 需求1 if条件控制器

需求1:测试计划中定义一个 http 请求访问传智播客官网,但是该请求不是无条件执行的,声明一个用户定义的变量,如果变量是 itcast 才执行,否则就不执行
1、搭框架,测试计划,线程组,结果树,声明一个用户定义的变量
2、核心:添加 if 控制器,子级添加取样器 (和之前实现不同,控制器和取样器存在父子级关系)

添加-逻辑控制器-如果(if)控制器
在这里插入图片描述
注意这里不勾选Interpret Condition as Variable Expression
在这里插入图片描述
输入如下:截图里截错了哈,应该是itcast

"${myComp}" == "itcast"

添加Http请求如下:
在这里插入图片描述
如果要让逻辑控制器生效,必须拖拽Http请求为逻辑控制器的子集
在这里插入图片描述

创建用户自定义变量
myComp itcast
在这里插入图片描述
查看结果树
在这里插入图片描述
如果条件不满足的话,会发现查看结果树中是没有内容的
比如这里我更改一下IF控制器中的内容
在这里插入图片描述
点击运行,可以看到请求不会执行
在这里插入图片描述

1.3 需求2 ForEach循环控制器

需求2:有一组关键字 [hello,python,测试] (使用用户定义的变量存储)要依次取出,并在百度搜索
1、搭框架,测试计划,线程组,结果树,声明一个用户定义的变量,存储一组数据
2、添加 forEach 控制器,子级添加取样器 (和之前实现不同,控制器和取样器存在父子级关系)
3、百度搜索关键字

添加Http请求如下
在这里插入图片描述

添加-逻辑控制器-ForEach控制器
在这里插入图片描述
注意:HTTP请求必须是ForEach的子集
在这里插入图片描述
添加-配置元件-用户定义的变量如下:
在这里插入图片描述

配置ForEach控制器
这里name是变量name_1、name_2、name_3的前缀
0:不包含的循环开始字段
3:包含的循环结束字段
array:每一次循环变量的名称
在这里插入图片描述
查看结果树如下:
在这里插入图片描述
注意线程组中的循环次数是1即可
在这里插入图片描述

1.4 需求3 循环控制器

需求3:循环访问学生管理系统10次
实现:
1、搭框架,测试计划,线程组,结果树
2、添加循环控制器,子级添加取样器 (和之前实现不同,控制器和取样器存在父子级关系)

创建HTTP请求如下
在这里插入图片描述
拷贝一下HTTP请求,分别起名HTTP请求1和HTTP请求2
在这里插入图片描述

添加-逻辑取样器-循环控制器
在这里插入图片描述
循环次数为5,并且创建2个循环控制器,分别操作一个HTTP请求
在这里插入图片描述
查看结果树如下:
在这里插入图片描述

二、关联

关联: 上一个请求的响应结果和下一个请求的数据有关系。

2.1 关联-xpath提取器

需求1:两个http请求,请求A访问传智播客官网,请求B访问百度 ,请求A将传智播客官网源码中的 title 标签的值取出,传递给请求B,在请求B中作为关键字搜索这个title值
步骤:
1、搭框架,编写两个请求,传智播客 + 百度搜索
2、核心: 取出传智播客页面源码的 title 值
3、传递给百度:${变量名} 的方式传值

先新建一个HTTP请求,访问传智播客的官网
在这里插入图片描述
添加一个查看结果树,从返回结果,我们可以看到Response Body中有标签title
在这里插入图片描述
那如何提取标签title呢,我们采用提取器

添加-后置处理器-Xpath提取器
在这里插入图片描述
编辑如下
匹配数字:-1代表所有,1代表第一个,这里取1即可
在这里插入图片描述
配置HTTP请求访问百度,之前访问都会有百度安全验证,原因是没有勾选这个“与浏览器兼容的头”,勾选后就可以访问了
在这里插入图片描述
查看结果树如下:正确提取到了传智教育
在这里插入图片描述

2.2 关联-正则表达式提取器

需求:两个请求,请时求A查询所有学院信息,请求B访问百度,从请求A中提取出第一个学院的学院名称,把名称放在百度上搜索
步骤:
1、搭框架,编写两个请求,查询所有学院信息 + 百度搜索
2、核心:从学院查询中提取学院名称
3、传递给百度,调用格式: ${变量名}

添加HTTP请求,获取所有学院的名称
在这里插入图片描述
可以先看一下查询结果,是一个json的字符串,我们要提取dep_name后面的value的值
在这里插入图片描述

添加-后置处理器-正则表达式提取器
在这里插入图片描述
配置如下:这里的?是终止贪婪模式,如果不写?会一直匹配到最后
在这里插入图片描述
添加http请求查询百度,这里的val是正则表达式的变量名
在这里插入图片描述
查看结果树如下:
在这里插入图片描述

建议: 如果从标签文档提取数据建议使用 XPath 提取器,如果从非标签文档提取数据建议使用正则表达式提取器

三、跨越线程组关联

变量作用域局限于当前线程组,其他线程组不可以直接调用。可以将请求A中提取的结果导出到公共空间(可以被不同线程组共享),请求B再从公开空间调用该变量,相当于全局变量。

步骤:
1、将请求A的数据导出到公共空间( __setProperty)
2、把代码放在beanshell取样器中
3、请求B从公共空间调用数据 (__property)

我们继续采用上面的例子,先建立一个线程组1,新建一个HTTP请求,获取itcast的html标签
在这里插入图片描述
建立子XPath提取器,提取title标签
在这里插入图片描述
再建立一个线程,新建HTTP请求访问百度,采用XPath中提取的title的值
在这里插入图片描述
配置执行计划是顺序执行,保证先运行线程组1
在这里插入图片描述

调用查看结果树,发现线程组2获取不到结果,根据提示可以看到val这个变量是没有申明的局部变量,只能在线程组1中使用
在这里插入图片描述
首先我们要设置一个全局变量,点击函数助手
在这里插入图片描述
函数助手配置如下,点击生成,复制内容

${__setProperty(out,${val},)}

在这里插入图片描述

添加-取样器-BeanShell取样器
在这里插入图片描述
把刚才生成的内容拷贝过来即可完成设置全局变量
在这里插入图片描述
接着我们获取全局变量,点击函数助手
在这里插入图片描述
配置如下:拷贝生成的内容
在这里插入图片描述
放到百度查询的内容
在这里插入图片描述

运行后查看结果树:
在这里插入图片描述
虽然是一长串字母,我们可以在浏览器中打开,没问题
在这里插入图片描述

模拟各种正常的、峰值的测试环境,检测程序的各项性能指标是否能够达标
在这里插入图片描述

四、高并发

JMeter 中内置了 定时器,可以实现时间模式相关的性能测试
需求1:同一时刻 100 个同学去访问学生管理系统的查询所有学院信息功能,统计高并发情况下平均响应时间以及错误率(高并发)
1、搭框架,测试计划,线程组,取样器,结果树(局限性),指定线程组的线程数属性值为 100
2、添加定时器 synchronizing timer(集合点组件)
3、运行并查看结果查看:聚合报告组件,可以对结果汇总分析

添加HTTP请求
在这里插入图片描述

添加-定时器-Scynchronizing Timer
在这里插入图片描述
模拟用户组的数量,按照100来
这里注意超时时间不要设置0,不要让程序卡死
集合点组件使用时,当用户总数不能整除一组用户数时,可能会导致程序挂起,所以要设置0
在这里插入图片描述

线程数也设置100
在这里插入图片描述
添加聚合报告
在这里插入图片描述
运行后查看聚合报告
在这里插入图片描述

五、高频率

需求2:一个用户以 20QPS ( == 20 次/s,QPS是每秒钟的查询次数) 的频率访问学生管理系统服务器,持续15秒,统计服务器的平均响应时间
QPS: Query per Seconds 每秒查询数(查询率),每秒访问多少次服务器
1、搭框架,测试计划,线程组,取样器,聚合报告,根据题干计算数据:
循环次数 = 访问频率 * 持续时间

2、添加QPS访问频率控制的相关组件:
每分钟访问次数 = 访问频率 * 60

首先准备好HTTP请求
在这里插入图片描述

添加-定时器-Constant Throughput Timer
在这里插入图片描述
注意:这里目标吞吐量是按照分钟计算的,那我们20QPS是每秒查询20次,折合成一分钟就是20 * 60 = 1200,所以这里设置成1200
在这里插入图片描述
QPS = 20,持续15秒,我们可以算一下:
接口访问的频率 = QPS * 持续时间 = 20 * 15 = 300
在这里插入图片描述
查看聚合报告
在这里插入图片描述

六、分布式

多机台协作,以集群的方式完成测试任务,可以提高测试效率。
控制机 = 负责任务分配
执行机 = 负责任务实现

在这里插入图片描述

工作流程
1.控制机需要制定测试任务,并下发到执行机
2.执行机执行任务并将结果返回到控制机
3.控制机做结果汇总

环境搭建:
1、不同的测试机上安装 Jmeter
2、配置基础环境(统一操作系统、JDK、Jmeter … )
3、核心: 控制机如何与执行机通信? 关键点:端口号
4、控制机中设置执行机的 IP
%JMETER_HOME%/bin/jmeter.properties ----> remote_hosts=执行机A的IP:端口号, 执行机B的IP:端
口号, …

在这里插入图片描述
Remote Hosts - comma delimited
配置地址和端口号,逗号隔开
在这里插入图片描述
3-3、控制机和执行机都得设置远程访问相关属性:
server.rmi.ssl.disable=true
在这里插入图片描述
配置完成后要重启JMeter

运行的时候,点击远程启动所有
在这里插入图片描述
注意每一台JMeter都要开启jmeter.bat
查看聚合报告

  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心向阳光的天域

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值