#################################
jmeter
是Apache阿帕奇开发的使用java语言开发的测试工具,
功能很强大,
场景:
1,对一个查询接口,查询100次,这种postman这种工具就受限了
2,50个客户同时请求,怎么做,这种postman这种工具也做不了,
所以复杂的应用场景还是使用jmeter
比如高并发的,
##################################
jmeter安装
1,下载
2,解压
3,安装java环境,
jmeter的强大
1,接口测试
2,性能测试,内在,这种算法的好坏决定的,
3,压力测试,外在,访问的人的数量,
4,web自动化测试
5,数据库测试,
6,java程序测试,
#################################
jmeter目录结构
1,backups,备份,执行过的会保存
2,bin目录,有很多的可执行程序,里面有Apache.jmeter.jar 这是jmeter的启动程序,
3,lib目录,有很多的jar文件,我们可以整合自己的功能,需要的jar文件可以放到这里,
################################
编写一个jmeter的测试用例
1,测试计划,填写名称测试用例01-XXX
2,测试计划中右键,添加-threads-线程组,
3,线程组右键,添加-sampler-http请求,
这个http请求有三要素
3.1,名字
3.2,ip,端口8000,协议:http,方法get/post.. 路径,编码utf-8
3.3,测试计划右键,添加-监听器-查看结果树,然后执行http请求,在结果树就可以有结果了,
查看结果主要是状态码和响应结果,
##################################
jmeter的线程组,这是一个组件,
1,线程组和进程,线程就有关系了,
进程:运行的程序
线程:程序执行的任务
线程组:为了方便线程管理,所以分了组,
并发执行:多个线程同时
顺序执行:按照启动顺序执行,
为什么有线程组?就是因为方便管理
进程--就是测试计划
线程组---就是线程组,一个进程可以添加多个线程组,
线程----在线程组中可以设置线程数
如果线程组1有两个线程,线程组2有3个线程,每一个线程都会执行一次,一共执行5次请求,
这五次不是顺序执行的,但是可以设置成为顺序执行,在测试计划中,独立运行每个线程组,打上勾就可以线程组顺序执行了,
##################################
线程组应用重点: jmeter一切都是组件,
1,在post的请求的时候需要添加信息头,
在测试计划右键,添加-配置元件-信息头管理器,
在线程组右键 添加-配置原件-信息头管理器,
两种都可以,但是作用范围不一样,
需要添加数据格式,
################################
线程组---请求默认值
1,测试计划-添加-配置元件-请求默认值
2,可以把固定的ip,http,端口,数据格式,等,配置默认值,
3,这个时候,你去添加http请求,就可以不用写上面这些内容了,
如果不填写用默认,填写了用填写的,
################################
上面都是线程组基本的使用,
下面进入线程组高级的部分:线程组的属性和调度器,
位置就是在线程组页面里面,
属性:
1,上面学习了一个可以设置线程数,
2,ramp-up period 10 这是设置在10秒内启动这个线程组,配合线程数,看性能的问题,
3,循环次数:输入3,就是执行3次,如果线程数是1,就是3次,如果线程数是3,就是9次,可以设置永远,
调度器: 就是计时器,使用的时候,上面的循环次数,设置为永远
1,持续时间,就是持续运行多久,
2,启动延迟,这是延迟几秒启动,
3,启动时间,结束时间,这是一个时间段,运行,相当于定时执行了,注意2,3有冲突
###################################
jmeter的参数化
1,什么是参数化
是动态的获取数据,
比如添加数据接口,每次添加的内容不一样,如果没有参数化,就会导致每次添加都要修改参数,如果有了参数化就可以替换参数,达到参数化批量添加,
2,如何参数化,
方法有很多,
下面介绍csvData SetConfig 实现方法----这是重点中的重点,
这是一个组件,通过这个组件可以实现批量添加,
实现原理:
就是提交的数据格式是固定的,只是内容不一样,内容由参数化替换,csv可以存储添加的记录,比如添加三条数据,需要配合循环次数的设置,
通过这个组件可以读取里面的数据,然后设置进入数据格式里面去,然后去提交到接口,
csv是一个外部文件,
实现过程
1,创建一个http请求
2,添加请求数据格式,数据里面都是空的内容,就是空字符串
3,设置循环次数是3次,
4,在测试计划文件夹的同级别,创建csv文件,文件的内容每一个字段通过逗号分割,每一条数据一行,每一行的结尾不需要逗号,
5,线程组右键,添加-配置元件-csv data setconfig
6,csv data setconfig配置,
文件名,可以使用相对定位,./参数/canshu/txt
编码机制:utf-8,保持一致
设置变量名:如果是三个字段就设置三个变量:id,name,age,英文逗号分割
7,在http请求的页面,提交数据的内容,进行参数化,name:"${name}",必须一一对应,
非常棒!!!!
#################################
特殊的线程组
1,setup线程组,最先执行,比如;加载程序执行所需要的资源
2,teardown线程组,最后执行,比如:程序关闭之前讲数据保存到内存,
###############################
参数化的另外三种方式:
1,之前讲解了csv data setconfig
2,用户参数
3,用户定义的变量
4,函数,
这四种都是一个参数化的,都是组件,
##########################
参数化----用户参数:
1,实现思想
和csv data setconfig思想差不多,
将数据设计到第三方,然后组件去读取,
和csv的区别,
csv是设置到玩不的文本文件,而这种用户参数是设置进入jmeter的内置组件,
所以是数据放的地方不一样
实现流程
1,搭建框架,测试计划,线程组,http请求,查看结果树,http信息头管理器,http请求默认值,json数据先不要设置,就是格式是空字符串,
重点:执行次数3,不是设置循环次数,而是设置线程数,这是区别
2,使用jmeter内置组件插入数据
3,读取组件中的数据,设置到http请求的json中, 格式还是和csv一样的, name = "${name}"
添加用户参数组件,测试计划右键,添加---前置处理器---用户参数,
功能:添加用户是添加列,添加变量是添加行,删除用户删除列,删除变量是删除行,
名称 用户1 用户2 用户3
id 1 2 3
name andy merry jack
age 11 22 33
这种是竖着添加的数据
三个线程组,每一个线程组会执行一列数据
如果是1个线程组,循环3次,就是第一列的数据循环了3次,
看起来是比csv还要简单,只需要一个组件,不需要设置外部的文件了,
#####################################
参数化-------用户定义的变量
一个接口的增删查改,前面的内容都是一样的,比如
http请求中的url路径:
/api/dept/ 查询 get
/api/dept/1 删除 delete
你会发现127.0.0.1:8000/api/dept这一段都是一样的,
所以可以使用一个组件存储,然后使用的时候直接调用,
添加组件-测试计划右键,添加---配置元件---用户定义的变量
名称 值 描述
path /api/dept/
所以你在你在http请求中路径写的时候就可以写成:
${path} 查询 get
${path}/1 删除 delete
这种就可以了,
1,可以简化写法
2,更加安全,可以简化手写操作的错误
3,该的时候,直接改一个地方就可以了,更加的方便,
所以一些全局使用的变量就可以这样,
###################################
参数化------函数
/api/dept/1 我循环10次查找,我想要把后面的1,变成1-10,
怎么办?
这种可以使用函数中的计数器,
每天登陆的人数就可以使用计数器,每一个用户登录了+1,
怎么使用:
1,打开jmeter内置的函数组件
打开函数的方法,在菜单中,选项,点击函数助手对话框就打开了
2,选择要使用的函数,给函数传参,jmeter生成调用格式,
选择一个__counter,
第一个参数是TURE,就是每一个用户都有自己的计数器,都是从1开始的,
如果是FALSE就是全局的计数器,会累积的,第一个1-10,第二个即使11-20了,
第二个参数不写,
生成调用格式,${__counter(TRUE,)}
3,在需要调用函数的位置使用jmeter生成的调用格式,
使用:/api/dept/?counter=${__counter(TRUE,)}
#####################################
直连数据库
这是一个什么功能?
之前我们都是使用接口和数据库交互的,增加数据,查询数据,删除数据,修改数据,
我们测试api的结果,都要和数据库进行比对,看是否有漏查,这种比较低效
所以有了直连数据库,避免人工比对,让程序去和数据比对,这个功能很奇特,
怎么使用?
这也是一个组件,
1,jmeter本身不支持直连数据库,但是我们可以通过第三方整合,
mysql-connector-java-5.1.35-bin.jar
sqlite-jdbc-3.21.0.jar
两个jar包的添加,在测试页面页面最底部,添加jar包,
你导入了这个包,这个jmeter就具备了连接数据库的功能了,
2,配置数据的连接
添加组件,测试计划右键,添加-配置元件-jdbc-connect-config
变量名:通过变量找到配置,
数据连接池,这个默认的就行,先不管,
默认连接配置:
2.1,路径,jdbc:mysql://localhost:3306/xst_shop
2.2,驱动类,com.mysql.jdbc.Driver
2.3,账号,
2.4,密码
3,创建取样器(jdbcrequest不再是httprequest了,)连接数据库
线程组---添加---sampler--jdbcrequest
变量名,和上线配置的是一样的,
下面就可以写sql语句了,
查询就是选择select
4,查看结果,
#########################################
直连数据库
上面只是拿到了查询结果,
下面讲解对结果进行处理
场景:
比如获取查询结果的第二个,然后到百度去搜索
手动的操作
1,创建一个http请求,ip是www.baidu.com
2,url是: /?wd=python
3,然后可以查询百度,
如何让他自动化运行?????
在jdbcrequest页面,可以把查询结果赋值给一个变量,比如deptname
但是查询结果有很多怎么办?实际是有一个内置的规则的,多个结果就是deptname_1 deptname_2 .....这个规则是jmeter的,
这个可以通过debug组件,看底层的实现,
所以结果结果就是
url是: /?wd=${deptname_2}
这样就可以了,
##########################################
jmeter关联,
这是什么?
两个请求之间不是独立的,是有关系的,就是关联,
一个请求的结果是另一个请求的数据,
比如上面的数据库查询的结果是http请求的参数,
为什么需要关联?
这种可以实现多样的业务逻辑,业务可能会有多个请求组成,
怎么实现?
实现方法1,jdbc请求结果赋值给变量,然后在另一个请求中调用变量, 这种常用的方式,
实现方案2,xpath提取器,
实现方案3,正则表达式提取器,
################################
关联的第二种方案------xpath提取器
1,创建两个http请求,访问百度,再有一个请求谷歌,
2,把百度中的title标签内容提取出来,然后在谷歌中搜索,
3,在百度http请求右键,添加---后置处理器-----xpath extractor,
变量名:设置一个变量名,其他地方引用,title
xpath://title
缺省值,就是如果不存在应该返回什么
4,在谷歌请求中,/?wd=${title}
#############################################
正则表达式提取器 1,创建两个http请求,访问百度,再有一个请求谷歌, 2,把百度中的title标签内容提取出来,然后在谷歌中搜索, 3,在百度http请求右键,添加---后置处理器-----正则表达式提取器 引用名称:设置一个变量名,其他地方引用,title 正则表达式:<title>(.*)</title>
模板:$1$ 固定写法 可能正则表达式有多个,$2$ 这是使用第二个,
匹配数字:0是随机匹配,1就是匹配第一个找到的,2是第二个找到的 缺省值,就是如果不存在应该返回什么 4,在谷歌请求中,/?wd=${title}
使用这种方法可以把接口返回的数据使用正则表达式提取出来,然后再去处理,
关联
1,xpath
2,正则表达式,
这两种是有不同应用场景的:
如果从标签中,HTML,xml,提取使用xpath
如果是文本格式,比如json,使用正则更加方便,
########################################
jmeter环境
1,什么是环境变量?
就是系统设置,高级设置中的path,
设置了path,系统可以直接cmd命令行运行,因为系统回去path中找启动程序,一直遍历所有的path直到找到,
2,path怎么用,
如果想要直接在dos启动,需要将该程序的目录配置到path
3,path和我们有什么关系
和java开发必须有,使用java开发要有可执行程序,
要配置jdk环境变量,开发必备,
4,所以我想要cmd里面,输入Jmeter,启动起来Jmeter,怎么办,
就可以配置path
#######################################
jmeter断言 1,是什么? 就是程序替代人工去判断响应的结果是否符合预期, 2,为什么使用断言 安全,高效,功能强大, 3,怎么用
3.1 断言响应的状态码
3.2 断言响应的内容
3.3 断言响应的字节数,
3.4 断言响应的时间,
大概四种断言,
############################################
断言---状态码
1,搭建框架,测试计划, 线程组,结果树,http请求查询接口,
2,在http请求右键,添加-断言-响应断言
3,断言页面
3.1 选择要断言的字段:响应代码
3.2 模式匹配规则,substring
3.3 要测试的模式,添加,200
断言正确是没有任何反应的,错误了会有报错,告诉你断言失败的内容,
###########################################
断言---断言内容 1,搭建框架,测试计划, 线程组,结果树,http请求查询接口, 2,在http请求右键,添加-断言-响应断言 3,断言页面 3.1 选择要断言的字段:document(text) 3.2 模式匹配规则,substring 3.3 要测试的模式,添加,andy 判断相应的json数据是否包含这个内容, 断言正确是没有任何反应的,错误了会有报错,告诉你断言失败的内容,
#####################################
断言---长度断言 1,搭建框架,测试计划, 线程组,结果树,http请求查询接口, 2,在http请求右键,添加-断言-size assertion 3,断言页面 3.1 选择要断言的字段:有全部相应,响应头,响应体,等,我们断言响应体,就是json数据, 3.2 模式匹配规则,输入100,可以选择大于,等于,小于,等,判断的是响应体大于这个字段, 断言正确是没有任何反应的,错误了会有报错,告诉你断言失败的内容,
#######################################
断言---断言时间,用于性能测试, 1,搭建框架,测试计划, 线程组,结果树,http请求查询接口, 2,在http请求右键,添加-断言-断言持续时间, 3,断言页面 3.1 一个字段就是毫秒,输入10,
如果是符合10毫秒以内,就没有问题,大于就有问题,
断言正确是没有任何反应的,错误了会有报错,告诉你断言失败的内容,
#########################################
集合点:
jmeter的内置组件,
是什么?
作用,可以启动多个用户,并且让多个用户在同一刻去访问服务器,
为什么?
模拟高并发,测试服务器性能,
怎么用
场景:模拟N个用户同一时刻查询某一个接口,
是不是可以把线程数设置为10,但是怎么保证同一时刻呢,是没有办法的,所以需要使用到集合点,
1,搭建框架,测试计划, 线程组,结果树,http请求查询接口,
2,线程组需要通过线程数,模拟用户,
3,通过添加组件,来控制同一时刻,
http请求右键,添加-配置元件-同步定时器,
有两个选项,分组,我们设置成为10,
超时时间,10毫秒,就是请求超过某一个时间就不等响应了了,
如果是这种集合点,测试性能,
可以使用聚合报告来看结果,
会看到这个请求,有多少人,平均响应时间,50%,90%,95%,最大,最小,错误率,吞吐(每秒请求数) 服务器接收,服务器响应,
关于分组,
有10个线程,分组是10,就是说10个用户,每组10个,其实就是分成了1组
有200个线程,分组是50,就是说200个用户,每组50个,实际就是分成了4组,
有200个线程,分组是201,超时时间是20秒,就会200个执行完了,然后等待20秒执行最后一个,实际最后一个不存在,所以超时就结束了,
关于超时时间,
输入0,不是不等待,是无限等待,有200个线程,分组是201,超时时间是0秒,就会200个执行完了,然后一直等待了,
所以线程数和组,要能整除,如果有余数,你的超时时间还是0,就会挂起,
###########################################
函数 1,是什么?
也是一个组件,封装了一些功能,
之前使用过一个counter计数器,
2,为什么使用函数
容易读容易维护
怎么使用
1,打开jmeter的函数模块,
2,选择要调用的函数
3,生成函数调用格式,
4,哪里需要就粘贴,
函数分类:
1,和数字有关的,
__counter() 计数器
__time() 获取时间
__random() 随机数
2,文件读取
__CSVRead() 读取CSV格式的数据,之前使用过了,csv data setconfig,类似,
3,设置属性
__setProperty() 属性设置
__property() 属性获取,
####################################
函数-----数字相关的函数
1,搭建框架,测试计划,线程组,http请求,查看结果树,
2,添加函数,生成调用格式
3,哪里使用就粘贴调用格式,
counter,false,true,
random,最大值,最小值,一个随机数区间,
time 格式:yyyy/MM/dd HH/mm/ss 第二个参数可以不写,
函数---csvRead
使用这个函数,实现数据的批量插入,
1,框架搭建,插入几条,就要循环几次,比如三个数据,就是线程数3,循环次数1,
2,数据保存在外部文件,
3,使用csvread逐行获取并解析,插入到提交的数据中,
csvread有两个参数
1,文件路径
2,文件列号,这是什么?输入0,是读取第一行第一行第一列,输入1,就是读取第二行的第一列,
文件:
1,andy,11
2,merry,22
3,jack,33
所以写的时候,
{
id = '${__csvread(路径,0)}'
name ='${__csvread(路径,1)}'
age = '${__csvread(路径,2)}'
}
#######################################
函数-----属性设置和属性获取 __setProperty() __property() 场景: 1,http请求1 百度 http请求2 google 使用请求1的结果, title值,作为请求2的参数,
1,搭建框架:测试计划, 线程组,http请求1,http请求2,
2,http请求1,添加-后置处理器-xpath,
两个字段
title
//title
3,http请求2,
/?wd=${title}
#########################
上面是之前的方法
但是如果是两个线程组,并且是独立运行,就会有问题,涉及到一个作用域的问题,上面的变量作用域只在本线程组,
怎么实现:
思想:把线程组内部的数据导出,放到共享空间中,其他线程组要使用数据,就从共享空间获取,
1,讲数据从线程组导出,使用的是函数setproperty。
第一个字段:属性名,out。自己起名字
第二个字段value,${title}
生成调用格式,
在本线程,添加-sampler-beanshallsampler,把生成的调用格式,粘贴进入,
这样就导出了,可以所有的线程组共享了,
2,另一个线程组,从共享空间引入,property,
第一个字段:属性名。out
然后生成调用格式,
然后在另外的一个线程组引入,就可以了,
##################################
分布式-------基本架构
1,多台机器协作(集群方式)完成测试任务
2,更加高效,安全,
怎么用:
有控制机和执行机
控制机控制多个执行机,分配每一个执行机生成任务,然后统一返回到控制机,然后汇总,
控制机负责,任务分发和结果汇总
执行机负责接任务和做任务,
所以分成三步:
1,控制机分配不同的任务给执行机
2,执行机执行任务,将结果返回给控制机
3,控制机将结果汇总,
#######################################
分布式--------环境搭建
1,搭建伪分布式环境,就是打开多个jmeter。
怎么搭建:
1.1 把jmeter的安装包复制多个,在不同的文件夹,然后打开就模拟多个jmeter的启动,
1.2 修改端口号,在bin目录,jmeter.property,这是配置信息,找到server_port = 6666 server_port = 7777
1.3 在控制机,去找地址,配置romote_hosts = 127.0.0.1:6666,127.0.0.1:7777
##########################################
分布式测试:
怎么用:
需求:平均分配1000个用户给执行机执行,一个执行机就是500个用户
1,控制机编写相关脚本,
在控制机的菜单,---运行----远程启动-----你会看到你配置的romote_hosts,有两个,
也可以全部启动
菜单,---运行----远程全部启动,
2,分配任务给执行机,远程全部启动,
3,我们开启执行机的bin目录--jmeter-server.bat 只有服务没有界面,也不需要在执行机编写脚本,
执行机启动了,控制机就可以发送任务了,
4,控制机编写脚本,
搭建框架,测试计划,线程组,注意线程数是500,http请求,聚合报告,不过还是配置成50,毕竟还是本地执行,
执行的之后不能再和以前一样执行了,
执行,菜单,---运行----远程全部启动,这样就全部启动了,
注意前提是执行机都是启动的,
你会发现聚合报告就是100个用户,
分布式就是体现了人多力量大的
#########################################
jmeter组件---控制器
之前我们可以添加多个线程组,每一个线程组可以添加多个取样器,sampler,比如http请求,
逻辑控制器
1,是什么?
可以控制取样器的实现顺序,的一种一种组件,一种是分支一种是循环,
类似于编程的流程控制,
2,为什么?
可以实现多样的业务逻辑
3,怎么用:
一种是分支---if控制器,
就是符合就执行,不符合就不执行,
一种是循环----foreach控制器,
#########################################
逻辑控制器使用------- 需求1,访问百度,京东,淘宝,定义一个变量,如果是百度就访问百度,如果是京东就访问京东,如果是淘宝就访问淘宝,需要判断, 实现: 1,搭建框架,测试计划,线程组,http请求,结果树, 2,用户定义变量值,百度,京东,淘宝 在测试计划右键--添加---配置元件---用户定义的变量 添加: 名称:name 值:百度 3,添加一个分支组件,有选择的执行 在线程组右键--添加--逻辑控制器---if控制器, 一个字段:条件:"${name}" = "百度" 4,在if控制器右键,添加---sampler---http请求 当执行的之后,就会去比对你定义的变量和if控制器的条件,如果匹配就执行 否则不执行
#######################################
逻辑控制器------循环控制器 查询学生结果10次 使用之前的方法已经可以实现了,现在讲解循环控制器的使用, 1,搭建框架,测试计划,线程组,查看结果树, 2,线程组,添加-逻辑控制器,循环控制器, 设置,循环10次, 3,在循环控制器添加http请求, 执行,就会把这个http请求循环执行10次, 那么这个循环控制器有什么特别的, 1,线程组的循环次数是作用组内的所有的http 请求, 2,循环控制器,更加的灵活,可以控制某一个请求,
#########################################
逻辑控制器-------foreach控制器 需求: 有一组关键字,Python,java,... 依次取出,然后去百度搜索 1,搭建框架,测试计划,线程组,结果树, 2,保存关键字,可以使用用户定义的变量,来保存关键字,
测试计划,添加--配置元件---用户定义的变量, 名字,和值, name_1 python name_2 java name_3 C++ 3,在线程组添加一个foreach控制器, 遍历步骤2中的数据, 线程组,添加-----逻辑控制器----foreach控制器, 输入前缀,name, 勾选,下滑线,add_ before number 开始索引值:0 结束索引值:3 这是左闭右开的,所以是0-3, 输出变量名称,myname 4,在foreach添加http请求 ip : baidu url /?wd = ${myname} 5,查看结果树,
#######################################
jmeter组件 ----- QPS query per second,每秒查询多少次, 20QPS,就是每秒访问20次, 一个用户:以20QPS的频率访问服务器,持续10秒,查看服务器的平均响应时间, 就是每秒访问20次,持续10秒,看服务器的平均响应时间, 每秒钟20次,怎么实现???? 之前学习的集合点不行, 循环次数不行, 要使用新的组件,QPS,在定时器里面, 添加-- --定制器----常量吞吐定时器,constant throughout timer 怎么使用 1,搭建框架,测试计划,线程组,http请求,聚合报告, 线程组设置一个线程,因为是一个用户, 循环次数,200,因为10秒,每秒20次, 2,是给http请求右键 ,添加一个常量吞吐定时器, 有一个字段是每分钟执行的次数,需要把QPS换算成每分钟,每秒20次,60秒,就是1200次,
输入1200, 3,查看聚合报告,
你会发现throughout字段就是20/s,但是这个值会根据步骤2的值,上下波动,
########################################
jmeter---作用域 1,这不是一个组件,但是是一个概念, 你把一个组件放到不同的级别,比如测试计划,线程组,http请求,等, 2,所以这些组件是非常的灵活的,
#######################################
jmeter组件的执行顺序
组件:jmeter内置的功能,每一个功能都是一个组件,
元件:元件存储的都是性质相似的组件,是对组件的分类管理
各元件之间的执行顺序:
1,配置元件:存储了程序的全局性数据
2,前置处理程序,,取样器执行之前执行的数据,可以cucnu批量执行的数据
3,定时器,集合点,吞吐量,等,在取样器之前执行,
4,取样器,访问服务器,这是最为核心的,
5,后置处理器,xpath处理,正则处理器,都是响应之后处理的,
6,断言,这也是有结果了才会有断言,
7,监听器,这是断言之后才会有结果树,等,
这个要理解,
#####################################
jmeter扩展组件,图形监视器, 1,是什么? jmeter可以做二次开发, 也是使用组件的方式,就是扩展组件, 这是开发人员自己设计的,不是jmeter官方提供的, 图形监视器,是监视服务器的,比如内存,cpu,磁盘,网络等运行的情况, 2,为什么使用这个? 模拟生产环境下,服务器运行状态的测试 3,怎么用的? 实现思想: 明确场景: 工作中,可能需要远程连接服务器 服务器上部署我们的程序,是不具备返回服务器内存,cpu,磁盘,网络等功能的 但是我们jmeter里面需要看到这个运行状态, 怎么办? 首先在服务器安装一个小程序,可以获取到系统的相关接口,比如服务器内存,cpu,磁盘,网络等,然后返回测试机,
测试机也安装一个小程序,然后接受这些信息,然后整合到jmeter就可以显示服务器内存,cpu,磁盘,网络等信息了,
实现流程:
########################################