2022软件测试技能 Apache JMeter 性能测试从入门到精通

系列文章目录

提示:阅读之前,请先梳理一遍文章目录的内容,以便于快速学习本章内容


文章目录


前言

提示:本章会持续更新

在软件测试岗位中,掌握的技能越多,自己的能力也就越强,当然,薪资也会相对应的增加,因此,掌握JMter性能测试,是想要拿高薪资的必经之路,本章,笔者将从入门,快速让你熟悉JMter,以及快速上手,以及一些常用的功能的熟悉,文章中,如有错误的地方,欢迎大家评论留言反馈


一、JMter 介绍

Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。

JMeter的作用
1.能够对HTTP和FTP服务器进行压力和性能测试, 也可以对任何数据库进行同样的测试(通过JDBC)。
2.完全的可移植性和100% 纯java。
3.完全 Swing 和轻量组件支持(预编译的JAR使用 javax.swing.*)包。
4.完全多线程 框架允许通过多个线程并发取样和 通过单独的线程组对不同的功能同时取样。
5.精心的GUI设计允许快速操作和更精确的计时。
6.缓存和离线分析/回放测试结果。

二、安装

1. JMeter是100%纯java开发,所以你需要先安装java的jdk

http://www.jdkdownload.com/

在这里插入图片描述
这里可以下载jdk8,下载完,安装即可,如果不知道怎么安装,另行百度即可

2. 下载 JMeter 安装包

https://jmeter.apache.org/download_jmeter.cgi

在这里插入图片描述
这里下载的当前版本,5.5,需要对应jdk 8,所以上面安装jdk的时候,注意对应好版本,否则,运行不了

下载完,解压即可,不需要安装

在这里插入图片描述
解压完,就是这样的一个目录,笔者这里,project 文件夹,是自己创建的,大家是没有这个的

三、目录

在这里插入图片描述

文件名作用
backups备份脚本,jmx的脚本,自动保存你的项目
bin存放 JMeter的启动文件,配置文件,模块文件,其中,jmeter.bat 是window的启动文件,jmeter.properties是JMeter全局配置文件
docs离线帮助文档
extras存放,第三方集成构建文件,比如:Ant、build、xml
lib存放,库文件,通俗来讲,就是插件,jar包
licenses存放,许可证文件
printable_docs用户手册

四、入门配置

1. 设置中文语言

当你第一次打开JMeter的时候,你会发现是英文界面,对于英文好的同学,可能就不需要切换中文

软件界面设置为中文语言(重启之后,会恢复为英语)
options =》 choose language =》 chinese (simplified) 简体中文
在这里插入图片描述
那怎么样才能解决此重启之后就需要重新设置的问题呢?

这个时候,强大的配置文件,就出场了

文件路径:bin/jmeter.properties

在这里插入图片描述

#language=en // 我们把初始的这行备注
language=zh_CN // 这里新增一条即可,保存之后重启jmeter即可

2. 设置发送请求的内容编码为utf8

当我们向接口发送一个http请求,其中,参数包含中文
如果我们不设置编码格式,那么,服务器收到的可能就是乱码
当然我们可以内容编码填写utf8即可,但是每次都需要填写就比较麻烦
在这里插入图片描述
还是一样,我们需要通过全局配置文件,来设置

文件路径:bin/jmeter.properties

我们搜索 sampleresult.default.encoding
在这里插入图片描述

# The encoding to be used if none is provided (default ISO-8859-1)
#sampleresult.default.encoding=ISO-8859-1

新增一条即可

# The encoding to be used if none is provided (default ISO-8859-1)
#sampleresult.default.encoding=ISO-8859-1
sampleresult.default.encoding=UTF-8

五、功能界面

下面会挑重点讲,并不会把所有功能都介绍一次,其余次要的需要各位亲自研究

1. 界面皮肤

这里我用得是 Darklaf - IntelliJ ,也推荐大家使用此皮肤,一些功能,介绍,描述,都比较容易看清楚,不会眼花缭乱,整体界面也比较整洁,易学习
在这里插入图片描述

2. 日志查看 / 日志级别

日志查看勾上之后,就是在最下面,会出现日志框,当运行线程之后,会根据日志级别,显示相对应的日志,这里建议开启warn,警告模式
在这里插入图片描述

在这里插入图片描述

3. 函数助手对话框

这个功能非常强大,可以便捷使用各种内置函数工具,也是jmeter频繁使用的功能

路径:工具 =》 函数助手对话框

在这里插入图片描述

1. Random 随机生成指定范围内的整数

案例1,我们访问一个接口时,可能有的接口需要加上一个随机数字的参数,才能够允许访问,也有的,我们在测试创建接口时,需要不同的随机参数,也可以用此函数

在这里插入图片描述
如何复制函数呢?
答案:点击 【生成】 按钮,会自动将函数复制,随后,在需要用到的地方,粘贴即可

实际应用演示
在这里插入图片描述

2. RandomFromMultipleVars 从不同变量中,随机选取一个

当我们遇到一个需求,请求一个查询接口,但是每次查询的内容要不一致,需要我们指定,随机选取一个,就可以用此函数

在这里插入图片描述

第一步,需要先设置好变量,比如name1,name2,name3,name4…
在这里,我们偷个懒,先在excel中,编辑好,左边写变量名,右边写变量值
然后复制,再使用 “从剪贴板添加”

在这里插入图片描述
在这里插入图片描述
第二步,非常便捷,一键批量导入

在这里插入图片描述

第三步,我们添加完一个线程组之后,我们添加一个java请求
添加java请求,只是为了,验证效果
在这里插入图片描述

第四步,把写好的函数写到Label,表示请求的标题,这样我们就可以通过标题看到随机变量,取到的值

在这里插入图片描述

第五步,我们在线程,设置10个线程,这样我们就可以看到10次效果

在这里插入图片描述

第六步,我们添加一个监听器=》查看结果树,来看请求数据
在这里插入图片描述

至此,我们的目录结构
在这里插入图片描述
然后我们运行一下看看效果
在这里插入图片描述
点击完运行,会弹出一个框

在这里插入图片描述
意思就是,我们需要先保存脚本,才能运行

在这里插入图片描述

然后,随便命名个名字,保存save即可

在这里插入图片描述
运行完,我们可以看到,十次不同的结果,随机的变量

好了,我们点击这个两个扫把图标,清除所有的结果
在这里插入图片描述

3. RandomString 随机选取指定长度的字符串

我们会有这样的一个需求,就是,在请求接口的时候,需要加入一个随机字符串的参数,那么,我们就可以使用此函数

在这里插入图片描述
使用方法,同上一致,就不过多介绍

4. 其他功能

大部分功能,都有提示,所以,后续再添加必要的功能介绍
在这里插入图片描述

六、JMeter 元件概念

1. 执行顺序

刚接触的小伙伴,可能会很懵,这么多组件,插件,到底是什么用处,该从何下手?

笔者,刚接触时,也是很懵,不过,在这里将梳理,jmeter 整体的框架,结构目录思路,请耐心看完,以下节点,是按照执行顺序进行讲解

顺序元件用途及特点
1测试计划jmeter的起点和容器,可以配置变量,加载插件,重点是可以设置是否按顺序执行线程
2线程组代表一定的虚拟用户,可以用来设置并发数,循环次数
3配置元件请求期的配置信息
4前置处理器在请求之前的操作
5逻辑控制器控制组件的执行顺序
6定时器是否延迟或间隔发送请求
7取样器发送请求的最小单元
8后置处理器在请求之后的操作
9断言判断请求是否成功
10监听器负责收集测试结果

这里拓展一下知识,如果想控制线程组的执行顺序,需要在测试计划开启

  • 独立运行每个线程组 【勾选即可】

在这里插入图片描述

2. 作用域

元件的作用域是靠测试计划的树形结构中元件的父子节点关系来确定的

第一原则,取样器

在这里插入图片描述

取样器不与其他元件产生相互作用,所以,不存在作用域

第二原则,逻辑控制器

在这里插入图片描述

只对子节点下的取样器和逻辑控制器起作用,不影响父节点,也不影响同级节点

例如:
当 if控制器条件为False状态的时候,其子节点下的java请求1,不会被执行
而同级java请求2,没有被影响,而继续执行
在这里插入图片描述

第三原则,除取样器和逻辑控制器以外,其他6类元件中,如果是某个取样器的子节点,则该元件只对其父子节点起作用。

在这里插入图片描述

第四原则,除取样器和逻辑控制器以外,其他6类元件中,如果其父节点不是取样器,对其作用域是该元件父节点下的其他所有后代节点。

在这里插入图片描述
当我们把正则提取器的位置,往上移动时,会发现结果一致,所以,验证了作用域的存在,也验证了,元件的位置不重要,不影响执行顺序

在这里插入图片描述

七、JMeter 元件讲解

这里将选取日常使用,重点的元件进行讲解

1. 线程(用户)

在这里插入图片描述

setUp线程,在执行所有普通线程之前,都会执行一次setUp线程,也可以说是,预线程,做一些准备工作
tearDown线程,就是在所有普通线程执行完之后,会执行一次tearDown线程,也可以说是收尾线程
线程组,普通线程,日常使用的都是这个

在这里插入图片描述

于此,我们来看一下效果

在这里插入图片描述
我们发现,线程的顺序,并不影响setUp和tearDown的执行效果

但是,我们发现,普通请求2在普通请求1的下方,为何是普通请求2先执行了呢?

难道是从下往上执行?

答案,自然是否定的,我们来验证一下即可,我们引入第三个普通线程

在这里插入图片描述
我们会发现,普通请求3,普通请求1,普通请求2,并不是按照某种执行顺序,其实就是随机

那我们在测试计划,配置一下,独立运行每个线程即可

在这里插入图片描述
在这里插入图片描述

2. 取样器

在这里插入图片描述

常用的提取器
HTTP请求
Debug Sampler
JDBC Request
Java 请求

HTTP请求

案例1
get请求,我们这里以百度搜索作为案例

在这里插入图片描述
在这里插入图片描述
get请求,参数是需要写在【参数】选项

在这里插入图片描述

post请求,是写在【消息体数据】
在这里插入图片描述

【文件上传】则是用于文件上传
在这里插入图片描述
这里【实现】的选项,选上java
在这里插入图片描述

Debug Sampler 调试取样器

我们以baidu为例子
在这里插入图片描述
我们需要通过后置处理器的,json提取器,正则表达式提取器,来拿到所有div,就可以用调试提取器,来看到有没有提取成功

在这里插入图片描述
这里我们使用默认配置即可
在这里插入图片描述
然后,我们执行看看效果
注意:这里需要通过查看结果树,才能看到效果

在这里插入图片描述

Java 请求

这里最常用的就是,利用java请求的label (标题),来调试我们的变量
我们尝试把 test_2_g1 的变量填到这里,我们看看能不能拿到
在这里插入图片描述
这里如果能拿到,说明这个变量值可以拿到数据,进一步帮助我们进行下一个操作
在这里插入图片描述

3. 逻辑控制器

如果 (if) 控制器

学过编程,应该都知道,if else 语句,这里的if 控制器,也是一样的效果,不过这里比较简单,只有if 判断,没有else if 和else 判断
所以,只要在if 编写判断条件,即可

这里,我们使用JMeter推荐的函数判断方法

__jexl3 和 __groovy

在低版本,是可以直接写判断条件
现在新版本,提示我们需要调用这两个函数
那么,我们就先简单进行判断,看看java请求会不会执行

${__jexl3(1<2)}

在这里插入图片描述

结果,是执行了的

在这里插入图片描述

那我们把,判断条件改为, 1 > 2

在这里插入图片描述

switch 控制器

在这里插入图片描述
switch控制的话,switch value,可以为变量名,也可以为下标值
我们这里用变量名,主要是当我们在上面的请求获取到某个值之后,进行判断,然后输出一个下标过来,然后switch就会执行相对应的请求,这些请求需要放到switch的子节点里面

在这里插入图片描述

我们设置值为0,可以看到,执行了请求1
在这里插入图片描述

循环控制器

循环控制器,指定循环次数,就会循环几次,一般我们配合获取到的变量,进行赋值

在这里插入图片描述
我们这里演示循环10次

在这里插入图片描述

while 控制器

在这里插入图片描述
Condition 是写判断函数,我们还是一样,使用 __jexl3()

${__jexl3(1 > 0)}

在这里插入图片描述

在这里插入图片描述

然后我们看看效果

在这里插入图片描述
所以,这里的判断条件,我们一般还是会跟变量进行配合使用

仅一次控制器

在这里插入图片描述

故意使用,仅执行一次的控制器,不管外层循环器,执行了多少遍,仅一次控制器的子节点,都只会被执行一次

在这里插入图片描述
在这里插入图片描述
然后,我们看看效果

在这里插入图片描述

交替控制器

在这里插入图片描述

交替控制器,就是,子节点下的请求,会依次执行,从上到下,执行到最后一个时,会从第一个重新开始

在这里插入图片描述

然后,我们看看效果

在这里插入图片描述

随机控制器

在这里插入图片描述

即随机选取一个子节点执行

在这里插入图片描述

然后我们看看效果

在这里插入图片描述

吞吐量控制器

在这里插入图片描述

Based on 有两个选项,一个是指定次数(total executions),一个是指定百分比(percent executions)

我们试试看,百分比,循环10次,20%吞吐量
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

那我们再试试指定次数,5次,循环100次

在这里插入图片描述

在这里插入图片描述

然后,我们看看效果

在这里插入图片描述

事务控制器

在这里插入图片描述

一般我们用来,合并多个请求的结果,开启 Generate parent sample 生成父样本

在这里插入图片描述

在这里插入图片描述
然后,我们需要添加一个监听器,聚合报告

在这里插入图片描述

我们会发现,聚合报告,这里直接合并成一个结果

在这里插入图片描述
查看结果树,也生成了树结构的请求

那我们把合并给取消掉,就可以看到初始效果

在这里插入图片描述
注意:如果这里没有进行合并,事务控制器的数据,是多个请求的求和

ForEach 控制器

在这里插入图片描述

一般我们用来,循环输出,多个变量,多个变量的前缀要一致,而且要有数字格式,比如:test_1,test_2,test_3_boss,至于数字后面是否还有字符,并不重要,因为都会识别并输出

那我们还是拿baidu为例子,获取所有div

我们用调试提取器

在这里插入图片描述
拿到了返回的数据,test开头

在这里插入图片描述
填写好参数,我们这里是有三个test变量,所以循环结束字段写3,开始的话,是从1开始,所以开始循环字段写0(不包含),然后变量前缀就是写test,最下方的数字之前自动加下划线,勾选之后,我们变量名后面就不用写下划线了,然后我们把这个值的变量名设为ttt,后面根据这个ttt就可以拿到每一次的值

在这里插入图片描述
至此,我们的目录结构就是这样
然后java请求的话,还是一样,获取这个变量内容ttt

在这里插入图片描述

好了,我们看看效果

在这里插入图片描述

4. 后置处理器

一般用于,请求后的数据的处理

正则表达式提取器

在这里插入图片描述

最常用的就是这样的配置信息

我们以baidu为例子

在这里插入图片描述

响应字段:我们一般都选主体,就是Response Body,一般通过这个都能够拿到请求之后返回的数据,如果你想判断状态码,信息头什么的,自然就要选相对应的选项

引用名称:就是变量名,后面使用到的话,就是使用这个变量名

正则表达式:最常用的就是(.*?),点代表匹配所有,星号代表任意字符串,问号代表匹配0次或1次

模板:这个取决于正则表达式有几个,我们一般只写一个,所以就是写$1$,如果有两个,就需要写$2$,中间的数字代表第几个

匹配数字:就是匹配几个结果,-1为全部,0为随机,1为一个

正则表达式,一般,我们需要使用调试提取器,可以看到结果

那我们能不能调试正则表达式,提前调试呢?
答案是肯定的

在查看结果树的选项,我们勾选 RegExp Tester,即正则表达式调试器
在这里插入图片描述

在这里插入图片描述
输入相对应的正则表达式,然后按Test按钮,即可看到匹配结果

JSON 提取器

在这里插入图片描述

这个json提取器,使用的频率也比较高,对于一些接口,返回的,其实大部分都是json格式,而且语法也简单,$代表根节点,点代表一级节点

这里,我们以一个接口数据为案例

在这里插入图片描述

{
    "result": 0,
    "msg": "成功",
    "data": {
        "global_newcomer": [
        ]
    }
}

那我们如果想,获取到global_newcomer的值,该怎么办呢?
很简单,使用$…global_newcomer即可

我们通过调试器看看效果

在这里插入图片描述
这里的值确实是空数组,那可能不太明显,我们换msg字段试试看

在这里插入图片描述

所以,有多少个节点,就写多少个点,就可以了,是不是非常的简单

那我们的JSON提取器,该怎么填写参数呢
来,我演示一下

在这里插入图片描述

然后,后面,我们就可以通过变量名拿到数据

我们使用java请求,试试看效果

在这里插入图片描述

在这里插入图片描述

BeanShell 后置处理程序

在这里插入图片描述

这个BeanShell 后置处理程序,功能也非常强大, 支持多种语言,这里我们使用java的函数 __setProperty 去设置全局变量,把我们拿到的值,保存为全局变量,然后其他地方就可以用

在这里插入图片描述

设置全局变量:${__setProperty(变量名称, 变量值, )}

这样我们就拿到了通过json提取器提取到的值,并保存到了全局变量

这样,我们在线程组2的java请求,来调用这个全局变量,我们看看能不能拿到

使用方法:${__P(变量名称)}
在这里插入图片描述

然后,我们看看效果
在这里插入图片描述

5. 断言

响应断言

在这里插入图片描述

响应断言,是最常用的断言,功能也十分强大

在这里插入图片描述

响应文本,文档(文本)
在这里插入图片描述

响应代码,响应信息,响应头
在这里插入图片描述

模式匹配规则
在这里插入图片描述
包括,和,字符串选项,没有什么区别,唯一区别就是包括支持正则表达式
匹配,和,相等选项,没有什么区别,唯一区别就是匹配支持正则表达式

后面两个是附加条件,可以勾选,否代表取反,或者,就是下方有多个匹配规则,任意一个通过即可

在这里插入图片描述

最下方,有个选项,自定义失败消息
在这里插入图片描述

即断言失败之后

在这里插入图片描述

JSON 断言

在这里插入图片描述

json断言的话,只适合接口返回的是json数据,要不然是无效果的,还是一样

我们还是以这个为案例

在这里插入图片描述

通过json断言,获取msg的值,如果是成功,则断言通过,如果不是成功,则断言失败

在这里插入图片描述

这里,我们就通过了断言

在这里插入图片描述

如果我们开启取反呢?

在这里插入图片描述

自然就断言失败

在这里插入图片描述

6. 定时器

顾名思义,就是一个定时,延迟,间隔多久再执行

固定定时器

在这里插入图片描述

这里,我们设置延迟3秒,就是3000毫秒,这里写毫秒的值

在这里插入图片描述

这样的话,http请求,就会在三秒之后执行

在这里插入图片描述

高斯随机定时器

作用:每个线程的延迟时间是符合标准正态分布的随机时间停顿
那么使用这个定时器
总延迟 = 高斯分布值(平均0.0和标准偏差1.0)* 指定的偏差值+固定延迟偏移
(Math.abs((this.random.nextGaussian() * 偏差值) + 固定延迟偏移))

在这里插入图片描述

有的小伙伴,可能就懵的,这高斯分布,这么复杂?

其实,很简单,我们先理解什么是正态分布

在这里插入图片描述

实际上,比如,100个人同时去访问百度,不可能每个人的访问时间一样,由此,间隔时间也是不一样,但是,会符合这么一个正态分布图,就是处于中间的人,会偏多

那当你执行高斯随机定时器,那么
100个请求,就有大部分,处于中间

为了验证这个结论,我们就可以通过模拟10个请求

在这里插入图片描述
我们会看到,间隔时间,差不多的人,会占大部分,但是也有一些比较长时间的,有的间隔了5秒,有的间隔了2秒

泊松定时器

在这里插入图片描述

这个定时器在每个线程请求之前按随机的时间停顿,大部分的时间间隔出现在一个特定的值,总的延迟就是泊松分布值和偏移值之和。

上面表示暂停时间会分布在1000到4000毫秒之间:

(1)Lambda(in milliseconds):兰布达值
(2)Constant Delay Offset(in milliseconds):暂停的毫秒数减去随机延迟的毫秒数

我们进行第一次测试,10次执行

在这里插入图片描述
每次执行,间隔都是差不多4秒左右

常数吞吐量定时器 Constant Throughput Timer

在这里插入图片描述

表示,你开启了10次循环,目标吞吐量设为3,那么,一分钟内只会执行三次
直到全部执行完,那么,执行完10次,即需要差不多三分钟

在这里插入图片描述
我们可以看到,执行10次循环的线程,耗时三分钟

注意:对于你设置了10个线程,和10次循环是不一样的

在这里插入图片描述
这个是对线程起效果的,如果你是设置10个线程,循环执行1次,那么,就会分为10个定时器,一个线程,只循环一次,那么肯定一下子就执行完了,不存在定时器的意义

同步定时器 Synchronizing Timer

在这里插入图片描述

主要用于阻塞线程,当达到规定的线程,就会释放一次,可以设置超时时间,如果设超时时间为3000,那么,超过三秒没有达到规定线程,也会释放
但是,这里面有个小细节,就是你的线程组数量要大于同步定时器的用户组数量,就好比,有10台手机,然后又有100个人,你用100个人去阻塞10台手机,那么结果就是,只有这10台手机的阻塞效果,其他90个用户是无效的

比如,我创建了一个线程组,线程数量为30,每个线程循环10次,然后,同步定时器用户数为20,超时1000毫秒

那么,我们还没开始实验,可以先得出结论,就是每1000超时,会释放一次20个用户组(前提是线程组大于用户组,否则看不出效果)

在这里插入图片描述
在这里插入图片描述
好了,我们执行看看效果

在这里插入图片描述
在这里插入图片描述
那么就是,每20个线程,会被释放一次

7. 配置元件

CSV Data Set Config 数据文件设置

这个我们经常用来,导入数据

在这里插入图片描述

我们新建一个csv的文件,然后填入我们需要批量导入的数据
在这里插入图片描述

当然,我们也可以用文本编辑器进行编辑,不一定需要wps

在这里插入图片描述

用逗号隔开即可

在这里插入图片描述
注意:忽略首行,根据自己情况开启

然后,我们添加个java请求,测试

在这里插入图片描述
我们有四行数据,所以,线程循环选择4次

在这里插入图片描述

然后,看看效果,分别拿到了不同的值

在这里插入图片描述

HTTP信息头管理器

在这里插入图片描述

即给请求的信息头,提前配置信息头

例如,我们给下面的http请求,添加一个信息头,Authorization,这个是用于RestFul 验证的

在这里插入图片描述

然后,执行,查看结果树

在这里插入图片描述
在请求的Request Headers,添加了我们刚才指定的信息头

HTTP Cookie 管理器

对于一些网站的访问,你需要提供cookie,在jmeter中,默认不会自动缓存cookie,所以,添加一个http cookie管理器,会自动帮你缓存cookie,你也可以自定义添加一些cookie进去,但是,一般情况下,不需要设置,增加一个cookie管理器即可

在这里插入图片描述

HTTP 请求默认值

在这里插入图片描述

这个也是经常用到的,比如,我们测试一个项目,这个项目是一个固定的网址,那么,我们可以提前配置好,web服务器的配置,网址,协议,端口,参数等
后面的请求,就不需要填写这些参数
如果后面的请求,要访问不同的,只需要在自己当前的请求内填写这些参数即可

我们这里,提前配置好
在这里插入图片描述

在这里插入图片描述

那么,下面的线程组的http请求,就会继承这些配置

在这里插入图片描述
不需要填写参数

在这里插入图片描述

Random Variable 随机变量

在这里插入图片描述

这里最常用的是,生成一个变量,并且变量的值是一个指定范围内的随机数
还可以,给该随机数,添加前缀

我们来试试看

在这里插入图片描述

在这里插入图片描述

然后,我们的线程组,是循环10次,那我们就可以看到十次不同的效果

在这里插入图片描述

如果不添加前缀,自然也都是数字

在这里插入图片描述

8. 监听器

监听器的作用,其实,就是收集数据,并生成报告

查看结果树

在这里插入图片描述

一般都是去获取请求,然后可以查看请求的内容

当然,这里更强大的功能是,调试模式,可以选择多种模式

在这里插入图片描述

比如,我们选择browser,就可以看到网页的内容

在这里插入图片描述
我们选择,RegExp Tests,就可以进行正则表达式的测试

在这里插入图片描述

汇总报告

主要是看请求的请求时长,请求失败的占比,最快的请求时长,最慢的请求时长等

在这里插入图片描述

聚合报告

这个和汇总报告差不多,区别就是,聚合报告,会有一个请求时长,范围占比

在这里插入图片描述

用表格查看结果

这个主要可以查看所有请求的请求时间,请求状态等信息

在这里插入图片描述

八、进阶 JDBC 连接mysql

我们首先需要下载 mysql-connector-java.jar

https://dev.mysql.com/downloads/connector/j/

在这里插入图片描述

解压之后,把 mysql-connector-java.jar 放到JMeter 目录下的 lib

然后再测试计划,把插件导入进来

在这里插入图片描述
然后,我们新增一个配置元件 JDBC Connection Configuration
在这里插入图片描述
进行配置

在这里插入图片描述
在这里插入图片描述
配置完之后

我们新增一个提取器,JDBC Request

在这里插入图片描述

进行配置
在这里插入图片描述

然后,我们添加一个调试取样器,还有一个java请求作为测试

在这里插入图片描述

然后,我们执行一次看看效果

在这里插入图片描述
也就是,我们通过result就能拿到

那我们想通过,单独拿到某个数据,怎么搞?

在这里,我们有个方法可以获取

${__BeanShell(vars.getObject("变量名").get(下标).get("键名"))}

注意:需要使用英文的双引号

我们进行拆解,下面这个是我们的整体数据

result=[{name=xiaoming}, {name=小红}, {name=小白}, {name=1}, {name=test001}, {name=test002}]

第一步,通过BeanShell 函数,去执行我们的代码

${__BeanShell()}

第二步,通过vars.getObject 这个函数,可以获取到我们的值

${__BeanShell(vars.getObject(“result”))}

第三步,get用下标,去选取第N个数据

${__BeanShell(vars.getObject(“result”).get(0))}

第四步,这个时候,其实我们已经拿到对象数据,例如:{name=xiaoming},然后我们就需要通过键名来拿到数据

${__BeanShell(vars.getObject(“result”).get(0).get(“name”))}

我们在java请求中,填入这段代码看看效果

在这里插入图片描述
在这里插入图片描述

当然,我们一开始,会有两个选项

在这里插入图片描述

Variable names,表示将值赋值给多个变量,并以_数字结尾,并且_#结果的,就是总数的数值

Result variable name,表示将所有的值,用列表,对象的方式存储起来

那么,我们看看第一种方式,会得到什么结果

在这里插入图片描述

在这里插入图片描述

我们会发现,但是以result开头,并以 _数字结尾的变量,数字都是递增

两种方式,主要看你自己的需求去决定

那就有同学问了,那如果是两列的数据,该怎么操作?

在这里插入图片描述

Variable names 和 Result variable name,会有一点不同

我们先来看一下,Result variable name

在这里插入图片描述
我们会发现,在name后面,添加了一个键名是id然后跟着值

在这里插入图片描述
那调用,其实跟name一致,只需要更改获取的键名即可

在这里插入图片描述

那我们来看一下,Variable names

在这里插入图片描述
Variable names,你需要填写多个列的自定义名,然后,以逗号分隔就可以了

在这里插入图片描述

获取方式,也一样,需要通过变量名加_数字调用

九、进阶 生成报告

-n 以非GUI方式运行Jmeter
-t 获取我们的jmx脚本路径
-e 脚本运行结果后 生成html报告
-o 存放html报告目录

命令:

jmeter运行文件路径 -n -t 脚本路径 -l result.jtl -e -o 生成报告的文件夹

例子:

D:\apache-jmeter-5.4.1\bin\jmeter -n -t D:\apache-jmeter-5.4.1\project\test2.jmx -l result.jtl -e -o D:\report

直接在cmd命令窗口执行即可

在这里插入图片描述

在这里插入图片描述

然后,我们打开看看

在这里插入图片描述

在这里插入图片描述

十、HTTP代理服务器

主要用来录制脚本,作用非常大,比如,我们接触一个新项目,但是,后端还没有给接口文档,那么,我们能不能提前做测试工作呢?答案是肯定的,我们通过去访问每一个接口,然后进行录制,这样的话,接口的各个请求参数都录制下来,然后,我们通过筛选过滤,只保留我们需要的请求,然后请求参数,去除不必要的参数,这样就能够极大的提高我们接口测试的效率

首先,我们新建一个空的线程组

然后再新建一个http代理服务器组件,在非测试元件=》HTTP代理服务器

在这里插入图片描述

然后进行配置,主要就是选择线程组,最好就是空的,这样,所有的请求都会保存到此线程组,方便我们筛选

在这里插入图片描述

接下来,就是需要我们配置代理ip

在控制面板=》Internet 选项
在这里插入图片描述

连接=》局域网设置
在这里插入图片描述

配置代理服务器,127.0.0.1,端口 8888

在这里插入图片描述

然后,开启

在这里插入图片描述
我们点击ok即可

在这里插入图片描述

会弹出这么一个框,除了左边的停止按钮,其他可以不用管
在这里插入图片描述

然后,我们通过浏览器去访问需要测试的项目网址

然后,我们可以看到

在这里插入图片描述
线程组自动添加了很多请求
我们这里根据需要的,把不需要的删除掉

在这里插入图片描述
我们可以看到,很多参数都自动填好了,后面我们根据这个接口,直接进行测试即可

然后,我们会发现,一些我们不需要的请求,也被录制

我们可以通过 Requests Filtering
在这里插入图片描述

我们可以通过 .* xxxx.* ,排除掉一些东西

在这里插入图片描述


更新日志

提示:将持续优化更新本章内容

20220701,逻辑控制器-如果(if)控制器,swtich控制器,循环控制器,while控制器,仅一次控制器,交替控制器,随机控制器,吞吐量控制器,事务控制器,ForEach控制器,后置处理器-正则表达式提取器,JSON提取器,BeanShell后置处理程序,断言-响应断言,JSON断言,定时器-固定定时器,高斯随机定时器,泊松定时器,常熟吞吐量定时器,同步定时器,配置元件-CSV Data Set Config 数据文件设置,HTTP信息头管理器,HTTP Cookie 管理器,HTTP请求默认值,Random Variable 随机变量,监听器-查看结果树,汇总报告,聚合报告,用表格查看结果,进阶 JDBC 连接 mysql,进阶 生成报告,HTTP代理服务器

20220630,Jmeter介绍,安装,目录,设置中文语言,设置发送的内容编码为utf8,界面皮肤,日志查看,日志级别,函数助手对话框,元件执行顺序,元件作用域,线程,取样器-HTTP请求,取样器-Debug Sampler调试取样器,取样器-Java请求

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值