测试脚本的生成和完善
通过JMeter录制脚本
1. 设置客户端的代理
打开 控制面板
-> Internet选项
-> 导航栏找到 连接
-> 在下方找到 局域网设置
并点击打开
勾选 为LAN使用代理服务器(这些设置不用于拨号或VPN连接)
IP输入 127.0.0.1
,端口输入 8888
2. 配置脚本记录器
创建 线程组
,在线程组内创建 HTTP Cookie管理器
创建 HTTP Cookie管理器
的目的是防止因为Cookie导致的问题
创建HTTP(S)测试脚本记录器
提示
网上或视频说的 HTTP代理服务器
,也是这个,脚本记录器是基于代理服务器的,所以也要进行代理等设置
需要设置过滤,添加建议排除后,字符串后面还要加上 .*
可以看出括号里的格式是使用 |
分割的,所以说可以自己添加一些与接口无关的过滤规则,例如mp3,wav等音视频
下面添加包含模式,意味着是只测试或录制包含模式下的IP地址的服务器
示例如图
包含模式和排除模式里面的 .*
是正则表达式里面的内容,而这两个模式也是这样匹配的
再完善以下创建脚本时的选项
注意这个页面里的8888和刚才在控制面板里的8888要一致
3. 启动脚本记录器
这里继续拿 www.baidu.com
来举例
点击启动,开始录制
点击启动之后,会有一个如下图所示的弹框,这个不要关闭,录制的时候,每一个步骤都需要用它记录
这里首先了解一下第一个输入框 Transaction name
,这里是事务名,当一会我们点击按钮或超链接触发事件时,JMeter会录制该事件,并以这个输入框里的内容命名
我准备在百度首页搜索helloWorld,所以我在这个框里面提前输入 搜索HelloWorld
,这个名字可以自定义,能够让别人理解你的意思即可
准备好后,在输入框中,输入HelloWorld,点击 百度一下
按钮
可以发现,页面里的图片等资源没有加载出来,这是因为在我们的排除规则里面把对应的文件后缀写上了
回到JMeter页面,可以看到如下图所示的内容
在弹框中的 Transaction name
输入框 中输入 搜索JMeter
然后在百度中搜索 JMeter
JMeter中的记录如下图所示
录制脚本结束后,就可以把之前设置的网络代理和代理服务器关掉了
添加查看结果树,然后运行一遍脚本
运行后,在结果树里查看脚本执行情况以及响应信息
如果请求返回的是HTML页面,可以使用查看HTML的方式进行查看
查看出来的结果和原来的不可能完全一样,所以基本元素差不多就可以
上述过程错误笔记
此服务器无法证明它是www.baidu.com
;您计算机的操作系统不信任其安全证书。出现此问题的原因可能是配置有误或您的连接被拦截了。
点击高级,继续访问就好
您目前无法访问www.baidu.com
,因为此网站使用了 HSTS。网络错误和攻击通常是暂时的,因此,此网页稍后可能会恢复正常。
相关博客:https://blog.csdn.net/qq_26400953/article/details/121684348
启动脚本记录器时弹窗
需要安装证书,在 Google Chrome
中找到 设置
,然后找到 管理证书
在 受信任的根证书颁发机构
中导入 JMeter根目录
下 bin
目录里的 ApacheJMeterTemporaryRootCA.crt
证书
然后就可以了
注意
对于那些证书没生效的人,建议重启浏览器或者重启电脑。我不想细说我的心路历程
重新生成证书
证书只有七天有效期,需要把 bin目录里
原来的删除再重新生成
删除文件:ApacheJMeterTemporaryRootCA.crt
、ApacheJMeterTemporaryRootCA.usr
、proxyserver.jks
启动脚本记录器,就会生成了
完善脚本记录器
前后端分离项目的脚本,在进行操作的时候,会用到 token
,这个 token
是在登录成功返回的。之后的操作也需要用到 token
来完成程序对用户身份的鉴权
由于大部分公网的项目都有人机验证,所以这里没有案例,直接写下怎么做
使用 后置处理器
中的 正则表达式提取器
提取出来的变量值,通过变量名访问,完善后面脚本的请求参数
访问变量值的方式为:${变量名}
例如变量名是 str
,参数名是 token
,则如下图所示
之后大部分会变化的值,都可以这样来处理
HTTP请求默认值
在 配置元件
中添加 HTTP请求默认值
这样就不需要每个请求都填写信息了
聚合报告 和 用表格查看结果
除 查看结果树
之外,这两个也是常用的查看结果的监听器
注意
聚合报告
中的吞吐量,说的是之前提到的TPS,并不是常规的 吞吐量
控制器
事务控制器
在录制脚本后,有很多耦合起来的脚本,例如:点击修改信息按钮,填写修改后的信息,点击提交修改按钮,修改成功刷新页面
因为他们是一套流程,所以上面这些可以理解为是一个 事务
在 聚合报告
中,执行完脚本会显示出每个脚本单独的执行数据
创建 事务控制器
,命名为 修改操作
将同属一个业务流程的脚本,放在 事务控制器
的子级
然后在事务控制器中勾选 Generate parent sample
,再次执行脚本
再看 聚合报告
,就会发现该业务流程的脚本,显示为 修改操作
仅一次控制器
当只执行一次的时候,该控制器子级中的脚本体现不出 “只执行一次”
需要在线程组中配置,例如下图,十个虚拟用户,循环执行十次,共计一百次
然后再去查看 聚合报告
,查看执行的结果,发现只执行了一次
吞吐量控制器
在电商平台上进行搜索的流量肯定要比下单的流量多;在论坛平台上进行回帖的流量肯定要比发帖的流量多
所以如果对论坛平台进行测试的话,那么在进行测试的时候,就需要给回帖事务更多的流量,或者说是更多的事务量
假设有十个用户,循环搜索十次,回帖和发帖的比例是5:1
那么可以将发帖的事务放在 吞吐量控制器
中,使用 Percent Executions
(百分比)的方式,吞吐量为 20%
也可以将回帖的事务放在 吞吐量控制器
中,使用 Total Executions
(固定数字)的方式,吞吐量为 500
定时器
固定定时器
有些业务会限制几秒内不允许重复操作,那么就可以根据时间设置固定时间定时器
统一随机定时器
Random Delay Maxmium (in milliseconds)
:额外的随机时间定时器
Constant Delay Offset (in milliseconds)
:固定的时间定时器
如下图所示,会延迟 3 ~ 5 秒的时间
高斯随机定时器
如图所示:固定延迟三秒,偏移一秒,延迟随机为两秒或四秒
同步定时器(集合点)
在JMeter中叫做 同步定时器
,LoadRunner中叫做 集合点
例如,约定上午十点整开会,那么参会人九点半到场、九点五十分到场甚至是九点五十九分到场,都不能开会
因为十点整是个集结点,或者说会议主持人是个集结点
同步定时器
用法的解释示例如下:
首先在线程组内创建100个虚拟用户(线程数),然后在10秒内跑完(Ramp-Up时间)。相当于是每一秒都会有10个用户发起请求
然后在所有的请求前面设置 同步定时器
,在其中设置 模拟用户组的数量
为 50,超时时间以毫秒为单位
为 30,000 也就是30秒
会出现的情况就是:第五秒之前,不会有任何用户(线程)发起请求;当第五秒时,当用户(线程)累积到共有50个时会同时发起请求,执行完该线程组的请求;当第五秒之后,属于每秒的10个用户(线程)陆续发起请求(不再等待)
如果在线程组中设置在100秒内跑完,相当于就是每一秒都会有1个用户发起请求
而在第30秒之后,并没有达到设置的50个用户,但是由于超过了30秒,也会开始同时发起请求。后面的用户也会陆续发起请求
注意
简单的测试,或者说是不严格的测试,是可以使用 线程组
的,但是如果是比较严格的测试,就 不能 使用 线程组
了