jmeter脚本增强

插件管理器

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毫秒的
在这里插入图片描述
线程
在这里插入图片描述
响应时间分布直方图
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值