插件管理器

jmeter-plugins-manager-1.6.jar
插件我上传到资源了
把jar包放到jmeter安装目录下lib下的ext文件夹里,然后重启jmeter就可以了

重启完jmeter之后,圈起来的位置就有了这个插件,然后需要什么插件直接在这里搜索就可以了

圈红的代表已安装的插件
圈黄的代表可以安装的插件
圈蓝的代表已安装过可以升级的插件

参数化

多种方式可实现参数化。
用数据库也可以做参数化,其实就是用jmeter连接数据库,然后把数据库中的数据读取出来。
上一篇文章写过注册,这里对用户名进行参数化,达成批量注册用户。
通过函数的形式进行文本读取
了解就行,一般不用这个
先要新建一个文件,这个文件叫什么名字,以什么后缀结尾都不重要,最重要的是它的根本是一个CSV格式的文本文档。
这个里边不能用回车换行,一行就是一行,否则会把最后一行的空行给当做空数据来读进来,这样会报错。
中间用英文逗号隔离

进入到函数助手对话框

选择CSVRead
用于获取值的CSV文件|*别名:这个位置要写文件的路径(选中文件,点击鼠标右键,属性,安全,对象名称就是路径)
CSV文件列号|next| *alias:要取文件的第几列(从第0列开始)

写完之后点击生成,点了生成之后这串字符串就会自动到剪切板里
123128就是我取到的值

拷贝并粘贴函数字符串后面的值就是我要取的内容,把这一串字符串(已经到剪切板了)粘贴到我需要传参的位置

执行一下可以看到是注册成功的状态,也取到了123128这个值

在线程组设置线程数和循环次数,设置一个线程循环三次

执行一下看到的结果是三次循环取的同一个值(都是第一个)

改成多用户的形式,三个用户一起执行,每个用户读一条数据

执行完是可以取到三个值
可以得出结论:多个线程去取的时候,每个虚拟用户读一条数据,循环的时候就不行了
CSVRead具有局限性,而且它还有另外的局限性,就是中间分隔符必须是英文的逗号,改成其他符号也不识别。如果文本文档上面再加一个标头,CSVRead同样是不支持,会读取乱码。
所以CSVRead虽然可以读,但是不那么好使。

CSV Data Set Config—CSV数据文件设置

把CSV数据文件设置放最上面,要在用到之前把数据读进来
文件名:直接浏览选择文件
文件编码:如果不报乱码就不用动,如果乱码就改成UTF-8
变量名称:在取值的时候要怎么取,设置什么变量。有几列变量就写几列,标记一下第一列叫什么第二列叫什么,可以不取值但是不能不写。
忽略首行:就是如果设置了标头,那么第一行的数据不取,直接取第二行;如果没设置标头,就默认false,不忽略首行
分隔符:默认是逗号,如果逗号是需要取的内容,可以改成其他符号
是否允许带引号:会有json格式的数据,json格式带引号,就选择true,数据中不带引号就选择false
遇到文件结束符再次循环:文件结束的时候有一个EOF,我们看不见但是程序可以读取到,如果读取到这个符号代表文件结束。遇到文件结束符再次循环就是当文件结束的时候是否再循环
遇到文件结束符停止线程:当文件结束的时候是否停止线程

设置好线程组,多个线程执行1次

我设置的变量名是name和pwd,所以这里引用的就是name和pwd

然后开始运行,看到的结果是执行成功的,多个用户都注册成功

设置线程组,一个线程执行多次

执行结果也是多个用户都可以注册成功的

随机获取数据
下载插件:Random CSV Data Set

下载完重启jmeter就可以看到了

添加bzm - Random CSV Data Set

我需要取数据的文档

程序生成

jmeter本身写好了很多函数,直接在函数助手对话框中可以用

CSVRead:读取文件
digest:用来做加密的
举例:用MD5的加密方式给123456加密,加密后的结果就是e10adc394ba…

machineIP:机器IP,本机IP
machineName:机器名字
Random:生成一个随机数
RandomDate:随机生成一个日期
RandomString:随机字符串
举例:用Chars to use for random string generation中的字符随机生成一个Random string length长度的字符串

time:获取当前时间(以时间戳的格式:UTC0时间从1970年01月01日00时00分00秒起到当前这一时刻一共经历了多少秒,是十位的时间戳;一共经历了多少毫秒,是十三位的时间戳;一共经过了多少微秒,是十七位的时间戳),是一个时刻在动态变化的值。就是一个串,不受时区影响。同样的一个时间戳,在美国转出来和在中国转出来是不一样的,这个时间是最准的
如果不填格式,生成的是时间戳格式,如果填格式,是按照格式生成时间

默认是13位的时间戳,换成10位的要除1000
默认是毫秒,转换成秒

unescape:忽略大小写
urlencode:把中文转成百分号格式的,编码

urldecode:解码 把百分号格式的转成中文

UUID:生成订单号或者数据库中生成唯一ID等。不需要参数,只要调用就行。a-f 0-9随机生成
计数器:有规律的计数
一般用于批量造数据,从计数器经过就记录一下,哪个接口用就把计数器放到哪个接口的下面
通过接口造有规律的用户可以用这种方式

还是拿注册举例
我刚才注册到了123140,现在从123141开始注册
数字格式:固定数字位数。比如我数字格式写了000,那么就是三位数,如果是从1开始,到200结束,那么我新增的数字就是001,002…011,012…098,099,100,101……

在线程组的位置设置循环20次,到最后一个注册的应该是123160

在接口请求的位置修改对应的字段

执行一下看看
在结果处可以看到结果是符合预期的
从141开始

到160结束,共20个

思考时间

在jmeter中凡是跟时间相关的,都会先于请求执行
如果想在登录请求之后,在登录后首页访问之前,增加一个思考时间,那么思考时间应该放在登录后首页这个接口,因为思考时间在请求发出之前生效。
定时器的生效范围:如果定时器放在某个请求的下边,那么只针对这一个请求生效;如果把定时器放在了请求的同级别,它会在每一个请求之前都会生效。定时器是对同级生效或者上级生效。
固定定时器

想让接口延迟多长时间执行,线程延迟就写多少,然后执行的时候就会有这个延迟的时间

高斯随机定时器

这就是固定延迟3000毫秒,有1000毫秒的偏差,那么就不是延迟一个固定的时间,而是有一个区间,2000-4000毫秒之间。这次执行可能等待2秒钟,下次执行可能等待4秒钟,思考2秒到4秒的时间内都有可能。

集合点

同步定时器

模拟用户组的数量:集合点的用户数(不支持百分比,只支持数量),写几就是几个。如果写0个,那么会把线程组中的用户数给同步过来
超时时间以毫秒为单位:如果写0就是没有超时时间,可以无限制的等下去。如果写了数字,比如是5000毫秒,那么5秒钟之后就不等了,来几个用户算几个。

这个位置是线程数

断言

在哪个请求上断言,就在哪个上面加就行
可以在线程组上添加一个断言结果的监听器,专门来看断言的,压测的时候可以用
在察看结果树的时候也可以看到断言结果
断言之间是and关系,想加几个就加几个,但是如果加多个断言,那么必须同时满足,否则会报错
响应断言:适合用在HTML网站的测试里
JSON断言:接口测试时可以用
大小断言:返回的数据量大小
XPath2:给HTML做xpath定位
compare:用来做比较
HTML断言:断言HTML结构
MD5Hex:把页面算一个MD5的哈希值,下载的时候用的比较多,下载栈对比下载的文件和源文件是不是同一个哈希,以防有人篡改

响应断言
测试字段中有一个忽略状态:当页面发生404或者其他错误,但有的时候我们需要测试这种404或者502的页面,就不能把它当做失败,它本身就是一种正确的逻辑,那么选中忽略状态
新建一个请求,我知道没有这个路径,如果运行一定会报错,但是我测试的时候需要对这个逻辑进行测试,报这个错误的时候不算错,所以要忽略这个错误的状态
新建错误路径

执行可以看到这里是报红的

添加断言,忽略状态

可以看到,虽然还是404的状态,但是变成绿色的,没有报错了

模式匹配规则:
包括:响应中包含下面添加的内容(可以用正则)
匹配和相等:这两个是一样的,响应中只有下面添加的内容
字符串:响应中包含下面添加的内容(不可以用正则)
否:不能包含写的断言,否则报错
或者:多个断言任意包含一个就可以

运行后没有报红色,说明没问题
断言结果如果把取样器的名字打出来,说明断言是没问题的

自定义失败消息
当断言失败后,断言结果位置会有失败消息提示,这个提示我们可以自己改

我知道响应中不包含要断言的内容,所以它一定会报错。我在自定义失败消息中写了我想要看到的报错内容

执行一下就可以看到他提示的报错内容就是我自定义的内容

JSON断言:可以断言接口的结构,也可以断言接口响应的数据
我请求的城市是北京,想要查看北京接下来几天的天气预报

添加断言,断言的值我写的是上海

执行,查看断言结果
我请求的城市是北京,断言的是上海,这里当然就会报错

断言持续时间

我断言持续时间添加了一个10毫秒,说明它执行这条断言时我想要的结果是断言时间不超过10毫秒。如果超过10毫秒就算它断言成功了也会报错,响应超时

执行一下看结果

逻辑控制器

事务控制器

当事务里边有一条失败,那么整个事务全都失败

事务里的所有请求全都成功,事务才会成功

循环控制器
线程组中的循环次数是循环整个脚本,而循环控制器中的循环是只管控制器下面的脚本
比如线程组这里设置循环1次

循环控制器设置循环10次

然后执行,看到结果是只登陆请求了一次,然后展示了10次首页

如果线程组设置循环10次,循环控制器也循环10次,那么就是10乘10是100次。
交替控制器
每次从请求中抽出一个,交替执行。1,2,3,1,2,3……
这里有三个不同的请求

线程组设置3个用户循环1次

执行看结果,可以看到3个用户都取得第一个请求

然后再把线程组设置为1个用户循环执行3次

执行可以看到这个用户取了三个请求

仅一次控制器
每个用户只执行一次,与循环次数无关。
线程组设置循环执行3次,但我这个是仅一次控制器

执行结果是控制器下的请求只执行了一次,并没有循环

线程组中设置3个用户执行一次

这时执行结果就是3个用户每个用户都执行一次(顺序不固定,可能是111222333,123123123或者其他都有可能)

简单控制器
没有什么意义,就是做个分组。相当于文件夹一样。
随机控制器
从控制器下多个请求中随机抽取一个请求(不管有几个请求,只取一个)
随机顺序控制器
控制器下游几个请求就运行几个请求,只是顺序是随机的

如果(if)控制器
根据条件判断,如果满足某个条件,就执行当前控制器下的脚本,如果不满足条件,就不执行这里边的,继续往下走。
可以往后面添加if控制器,但是没有else
既然是判断,就应该有参数
这个参数可以自定义

我添加一个名为name变量,给它赋值是jia

控制器中提示了要用jexl3或者groovy做判断,所以用到函数助手

利用函数助手的jexl3,生成表达式
JEXL expression to evaluate的值是自己写的,基本都是一个格式"${变量名}" == “变量值”。等等,不等都可以

把表达式粘到控制器中,然后再执行脚本

如果符合条件就执行,不符合条件就往下走

临界部分控制器
当多个用户一起跑的时候,它可能并不会按照既定的顺序去执行,因为这是有很多个线程,哪个线程先起来哪个线程先去跑。这样很有可能这个线程先跑起来先运行了但是还没运行完呢下一个线程又开始跑了,所以顺序很难保证。但是有时候可能就需要每个请求之间必须有顺序,先干完A才能请求B,否则可能就会报错。比如接口的,要先获取token才能往下走。还没获取到token就请求下一步了往下执行那肯定会失败的,所以这种上下关联的东西需要依赖,这种时候就用临界部分控制器。有了这个,不管怎么跑,都是有顺序的。

ForEach控制器
这是个迭代器
当变量是一个可迭代的值时,类似数组、集合等,把这个可迭代的变量给它迭代出来
这里的fids是一组数据,fid是一个数据,每次请求都只能是一个数据而不能用一组数据,所以需要一个东西让这一组数据一个一个出来。
举个例子
老板给上了一屉包子,一屉包子里有好几个,我们需要一个一个吃,不能一次性吃一堆。
开始循环和结束循环的是位置,不是字段。
1和3代表从第一个数据开始循环,第三个数据结束。如果不写,就是循环所有的数据。

线程组设置

在取样器错误后要执行的动作
取样器是指请求,首页,登录请求,登录后首页…
继续:继续执行
启动下一进程循环:指循环次数的循环
停止线程:停止当前用户
停止测试:停止所有用户,但是可能后面的还在跑,不会立即停止
立即停止测试:一旦报错立刻停止执行

线程属性
几个线程数就代表几个虚拟用户
举例:10个虚拟用户循环执行10次,执行完退出

举例:10个虚拟用户循环执行5分钟后停止

举例:现在就执行脚本,10个虚拟用户延迟1小时后开始执行,执行5分钟停止

监听器

监听器中这些东西都是用来观察的

察看结果树
察看结果树只在界面里调试脚本的时候使用,做性能测试的时候一定要禁用察看结果树。
察看结果树中可以通过多种方式来观察结果。
Text:网页源码
Browser:渲染过后的网页
JSON:JSON格式
XML:sop用
JSON path tester:测试JSON
RegExp Tester:正则提取测试


在测试结果中,如果不写断言的情况下,只要是2开头3开头的都认为是成功,是绿色,如果是4开头5开头的认为是失败,是红色。红绿并不能代表什么。
如果没有httpcode也会报红色,服务不通,这个是例外
默认是raw格式,也可以切换城http格式,查看请求数据

断言结果
如果断言没问题会把请求名打在断言结果上,如果断言失败会在当前请求的右下方打出问题原因

聚合报告
Label:取样器的名字。如果加了事务,里面还会有事务的统计
样本:代表发出了多少个请求
平均值,90%,95%,99%,最小值,最大值这些都是响应时间。
平均值:所有请求的响应时间相加,除以请求个数(很多情况下平均值都是不准的,可能前面所有的请求都很快,最后一个响应特别慢,这样算的平均值并不能代表所有请求的响应时间,一旦有这种特别低或者特别高的数据时,会对整体的数据造成很大影响)
中位数:所有请求的响应时间从大到小依次排列,取中间的值
90%:把样本中请求的响应时间按照从小到大排列起来,找到第90%个请求的那个位置,记录下来的响应时间,就是这个值。这个值的意思是前面90%的请求的响应时间都不会超过这个时间。这个单位是毫秒。
95%:和90%一样,记录第95%个请求的响应时间
99%:和90%一样,记录第99%个请求的响应时间(平均值可能不准,但90%,95%,99%这三个数据一定是准的。这三个数据比平均值更具有参考价值)
最小值:响应时间中最小的值
最大值:响应时间中最大的值
异常:事务的失败率,1减去异常,就是成功率
吞吐量:不一定准(有的人解释为数据的吞吐量,有的解释为请求的吞吐量,全看个人怎么看)
接收:接收的数据
发送:发送的数据

保存响应到文件
在压测时不能用察看结果树。可以写断言,断言结果里会有显示,聚合报告也可以看出是否报错、失败,如果失败是失败几个。但是对于失败的请求我们也想看到服务端给我们返回哪些东西。
用察看结果树的时候给我们返回了什么一目了然,压测的时候不能用了,就可以用保存响应到文件。
文件名称前缀:填写文件保存路径

响应时间图
图表的配置在这里设置,字体、样式等都可以自定义

执行完可以看到图

图形结果
是用点拼出来的线

用表格察看结果
把每一个请求都打出来了,每个请求都详细记录下来。
时间,大小,状态,发送多少,延迟时间,连接时间

这个在压测的时候是可以用的
点浏览,然后选择保存路径。在压测过程中,会保存这个文件。

jmeter监控服务器

需要下载插件——PerfMon

但是只有插件还不行,还需要搭配Server Agent使用。(Server Agent上传到资源了)
ServerAgent依赖jdk
装完之后直接双击startAgent.bat

然后就有了jp@gc - PerfMon Metrics Collector。添加上


可以添加多个,CPU,内存,虚拟内存,网络IO等等

添加好后点击执行按钮,就开始监控了

nmon

可以用工具做压测,但是不能把性能测试和性能测试工具画等号,工具只是一种实现的途径。
jmeter要配置环境变量
命令
jmeter -help:有一个简单的帮助文档
-n:代表用no GUI的方式运行
-t:代表后面要跟脚本(如果再当前目录下,可以直接写脚本名;如果不在当前目录下,要写全路径)
-l:记录日志(后面跟聚合报告 .jtl)
-e:生成HTML报告
-o:把报告写在哪个里面
执行过程中每隔一段时间会打出一个summary
Tidying up就是在生成报告
end of run 代表执行结束
如果做压测可以直接生成聚合报告,压力已经很大了就不要生成HTML了,不然容易卡死。聚合报告生成后到本地然后再生成HTML,还是一样的,jmeter -g bbs.jtl -e -o ./report

执行完文件保存在用户里(C:\Users\jia)

论坛.jtl就是生成的聚合报告的文件,上下是一一对应的

HTML的测试报告在report中生成

报告
Dashboard
APDEX:性能的分数(分数越高越好)

FAIL:失败率
PASS:通过率

类似聚合报告

Errors:如果有失败的会在Errors处列出来,什么错误,分别是啥,占了多少百分比
Top 5 Errors by sampler:把top5的错误单独列出来

Charts图表
Over Time:时间相关的
随着时间的变化,响应时间是怎样的变化趋势

百分比

随着时间增长,活跃的线程数
吞吐的数据量(发出与收到的)

延时时间

连接时间

Throughout:吞吐相关的。一次基本看不出来,需要多次对比
httpcode

事务(一般都是平稳或者上升的状态,如果忽然下降了,那么可能是性能瓶颈出现了)

总事务

响应时间和请求的关系

延迟时间和请求的关系

响应时间

小于500毫秒的,大于1500毫秒的,500-1500毫秒的

线程

响应时间分布直方图

jmeter脚本增强相关推荐

  1. Jmeter脚本增强之参数化(多方式实现)(6)

    参数化的场景: ①在插入记录时,数据库对某些字段唯一限制,这时需要参数化(不能传固定参数) ②在压测过程中,需要使用不同的用户登录,模拟真实的使用场景(避免数据库查询缓存) 这种方式通常被称为数据驱动 ...

  2. Jmeter系列之Fiddler导出Jmeter脚本

    VOL 170 29 2020-10 今天距2021年63天 这是ITester软件测试小栈第170次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上 0 ...

  3. jmeter脚本结合ant执行测试用例并生成测试报告

    前言:本篇主要讲ant执行测试用例并生成测试报告,至于jmeter脚本本篇文章不多说,不懂的小伙伴可查看我的上篇文章:jmeter环境配置.使用以及参数化之CSV Data Set Config 1. ...

  4. Jmeter脚本录制(Web)

    1.安装badboy脚本软件 2.打开badboy软件 3.badbody脚本录制 点击录制按钮进行脚本录制,完成打开百度,搜索自动化测试操作,然后停止,回放. 4.回放 5.导出Jmeter脚本 7 ...

  5. 性能测试——JMeter脚本录制和HTTP负载测试

    实验目的 (1)了解Jmeter性能测试工具的用途和简单的操作: (2)掌握Jmeter性能测试工具测试过程: (3)能够使用Jmeter进行负载测试: 实验步骤 使用Jmeter对MercuryTo ...

  6. jmeter脚本_性能工具之Jmeter脚本python启动

    背景 上一节是shell命令启动Jmeter,担心大家对shell脚本语法不是很熟悉,如果定制自己想要的恐怕不好弄,这次改用python启动脚本,在改造之前大家先了解下Jmeter线程组相关参数,这样 ...

  7. JMeter入门(3):录制JMeter脚本

    一般自己手动的设置JMeter会比较麻烦,如果一边操作页面,提交表单,一边能够自动生成JMeter的脚本,则非常方便: BadBoy:录制JMeter脚本: Donwload URL:http://w ...

  8. 云智慧压测实战分享之JMeter脚本录制实例

    在前面的<云智慧压测实战分享之JMeter工具使用初探>中我们对JMeter的功能特点和常用元件做了简单介绍,接下来说说JMeter的脚本录制.JMeter有多种录制脚本方法,其中最常见的 ...

  9. jmeter安装包_分布式执行jmeter脚本步骤(非GUI)

    备注:[Linux查看服务器是32位还是64位命令] uname -m getconf LONG_BIT 1.Linux环境安装jmeter 可参考https://www.cnblogs.com/su ...

最新文章

  1. 第8集析构函数中抛出的异常
  2. Android学习笔记-----一个很好用的搜索网站,你懂的
  3. 20220129--CTF刷题--disabled_button
  4. 三国历史的教训读后感_历史上伟大的创新者的教训,你永远都不会忘记
  5. python开发每月工资_做python开发想要月薪20K不会这些怎么行?
  6. 大龄开发者正在消失?NO,听听这3位50岁程序员怎么说
  7. 腾讯 监控系统服务器数据采集,腾讯天津数据中心机房监控项目
  8. 【易实战】SpringCloud Greenwich架构概览深度详解
  9. ZZULIOJ1041-1045Python解法
  10. 南京大学计算机考研复试名单,2017南京大学计算机科学与技术系考研复试名单...
  11. 一步到位:手把手教你R语言竞争风险模型建模-列线图-校准曲线-K折验证-外部验证- 决策曲线
  12. 中兴c600olt数据配置_中兴OLT业务配置
  13. 【解决】联想拯救者/MT7921网卡 ubuntu里 wifi/蓝牙 无法识别连接
  14. 怎么取消linux ssh互信,[系统-linux] ssh互信操作
  15. Thanos Query Frontend
  16. linux文件系统与日志文件
  17. 同济大学计算机其中考试时间,上海高三上学期期中考试时间一般定在几月份?...
  18. bzoj2565manacher算法
  19. 【修复H5农场复利】黄金家园农场理财游戏源码Thinkphp开发 带商城仓库商店模块
  20. 为什么说vivo S7才是5G轻薄旗舰的正确打开方式

热门文章

  1. VMware vSAN性能测试那点后续的事
  2. PolarDB-X 云原生分布式数据库 > 最佳实践 > 如何选择分片数
  3. VMWare学习总结(3)——Vmware Workstation 14虚拟机网卡桥接连不上网络解决方法
  4. Windows学习总结(19)——Windows必备神器Cmder使用教程
  5. 软件架构设计的六大原则
  6. PHP学习总结(3)——PHP入门篇之PHP的echo语句
  7. 北斗b2频点频率_北斗系统中“三”的奥秘
  8. 如何使用GitLab和Rancher构建CI/CD流水线–Part 1
  9. 如何利用docker 构建golang线上部署环境
  10. 解决修改sources.list之后update NO_PUBKEY错误