一、使用教程
系统的性能由TPS决定,跟并发用户数没有多大关系。在同样的TPS下,可以由不同的用户数去压(通过加思考时间设置)。
系统的最大TPS是一定的(在一个范围内),但并发用户数不一定,可以调整。
建议性能测试的时候,不要设置过长的思考时间,以最坏的情况下对服务器施压。
一般情况下,大型系统(业务量大、机器多)做压力测试,5000个用户并发就够了,中小型系统做压力测试,1000个用户并发就足够了。
一、新建HTTP请求时,传入body参数时如果报错:cannot convert parameters to body data
1、则需要把parameters中的参数删除,再选择Body即可
Jmeter中的Parameters和Body Data两种参数格式
一个是Parameters xx=xx,还有另外一个是Body Data json格式的参数,
两者二选一不能组合使用,如果你要使用Body Data 请先清理掉Parameters中的所有参数
二、需要验证码登录的接口,先输入获取验证码的接口
https://blog.csdn.net/liao_11/article/details/128483654
1、输入获取验证码的接口,然后提取验证码。使用Json提取器提取验证码
这个是多级提取,如何显示
多级提取
2、验证码登录的接口,将提取的验证码参数化输入。使用${code}进行传参
3、验证码登录接口时,发现有一些是必传参数是header类型。所以使用HTTP信息头管理器进行header的传入
其中,需要加上Content-Type----application/json 防止报错
4、建立HTTP请求时,发现每次都要输入服务器IP和端口号,这样很麻烦,所以我们新建一个HTTP请求默认值,这样把IP输入以后,后续新建的HTTP请求就不用在输入IP和端口号了。
配置元件—HTTP请求默认值
5、其中获取验证码时,需要传入手机号,但是后续如果更改手机号时,就需要更改多个接口。那我们可以添加一个用户定义的变量,后面提取这个手机号
添加->配置元件->用户定义的变量。然后后面的HTTP请求中,传入这个手机号
三、接下来需要邀请好友,需要批量导入手机号
1、选择【选项】—【函数助手】,选择_Random函数,输入随机生成的数字,点击生成。
1.2上面是第一种方法,使用Random生成,还可以选择time就是时间戳+随机数
步骤一:
${__time(,)} : 默认该公式精确到毫秒级别, 13位数
${__time(/1000,)} : 该公式精确到秒级别, 10位数
${__time(yyyy-MM-dd,)}:2019-01-07
KaTeX parse error: Expected group after '_' at position 2: {_̲_time(YMDHMS,)}…{__time(/100000,)}由函数助手生成
phone=KaTeX parse error: Expected group after '_' at position 2: {_̲_time(/100000,)…{__Random(1,100000,)};
//phone是一个整数,这里将其转化为一个字符串并且赋给a
String a=String.valueOf(phone);
//将a设置为变量
vars.put(“phone”,a);
//在debug sample中查看phone的取值
vars.get(“phone”);
//在日志中打印输出
log.info(“-----------------------------------------------------”+a);
2、测试随机生成的值
我设置的是随机生成1000~9999的值
添加【sampler】–【Debug Sampler】,查看结果树,成功
将上面生成的1310000${__Random(1000,9999,)}拷贝到【Debug Sampler】,再添加个查看结果树,就可以随机生成号码了。
3、因为我是使用的Random,未使用时间戳,所以我在在Bean Shell Sampler中写入:
//${__Random(1000,9999,)}由函数助手生成
phone = ${__Random(1000,9999,)};
//phone 是一个整数,转换成字符串并赋值给a
String a = String.valueOf (phone);
//将a 设置为变量
vars.put("invitephone",a);
//在debug sample 中查看invitephone的取值
vars.get("invitephone");
4、把这个写好的,放在需要的接口上面(如果放在下面,就会识别不到这个参数)
5、传参,运行时就跑出来随机的手机号了
6、这时让这些批量造出的手机号进行登录,就需要提取他们的手机号和用户ID。提取数组中的数据
https://blog.csdn.net/weixin_46017315/article/details/127270501
例子:提取其中的phone和useID
四、然后我把用户登录的接口放在setup线程组中,这样每次只运行一次即可。那样就需要将setup中的token提取后变成全局token
https://www.cnblogs.com/xyztank/articles/16571722.html
1、配置提取表达式及变量
2、由于提取后的token值赋值给变量token,此变量token的作用范围只适用于setUp线程组之下,若要跨线程组,让其他线程组的接口也能引用提取出来的token值,那么需要将token变量设置成为全局变量。此时,需要新增接口后置操作BeaShell PostProcessor,将token变量设置成为全局变量.
3、然后,开始配置BeaShell PostProcessor,在这里把登录接口响应的token值复制给了变量token,引用变量token的表达式为$
- 此时,再引用token值(${token}),并将其复制给全局变量token_global
4、引用全局变量
- 接着,设置好全局变量token_global后,其他线程组就可以引用该全局变量,具体引用方式如下所示:
我自己的例子中,就是将setup里面的token提取后,放到第二个线程组中
二、jmeter安装教程
1、打开jmeter进行安装
2、首先需要安装jdk,并配置环境变量
3、安装jmeter并配置环境变量:配置patch,classpath等。
4、然后jmeter。properties中找到39行代码,修改成中文。
三、插件教程
1、首先,下载jmeter的插件管理工具,下载地址:https://jmeter-plugins.org/install/Install/
2、把下载后的jar包放到jmeter的安装目录lib/ext文件夹下
3、然后,在jmeter的GUI上,点击选择Options,可以看到已经安装好的插件管理工具Plugins Manager,如下图所示:
4、进行安装,然后重启jmeter
5、监听器中添加
(1)jp@gc - Transactions per Second
TPS:每秒钟系统能够处理的交易或事务的数量。它是衡量系统处理能力的重要指标。
X轴:Elapsed time(granularity:1 sec)表示运行的持续时间(时间间隔:一秒)
Y轴:Number of transactions/sec 每秒事务数
(2)jp@gc - Respose Times Over Time
RT:随时间变化的响应时间;
从用户发出请求到用户接收到从服务器返回结果整个过程所耗费的时间。
x轴:Elapsed time(granularity:100ms) 表示运行的持续时间(时间间隔:100毫秒)
y轴:Response times in ms 响应时间(毫秒)
显示每个采样以毫秒为单位的平均响应时间
(3)jp@gc - PerfMon Metrics Collector:监控CPU、内存Y轴都以百分比显示。
CPU:
x轴:Elapsed time(granularity:1 sec) 表示运行的持续时间(时间间隔:一秒)
Y轴:Performance Metrics
Memory:
x轴:Elapsed time(granularity:1 sec)
Y轴:Performance Metrics
Network IO:
x轴:Elapsed time(granularity:1 sec)
Y轴:Performance Metrics
注:Network IO 在此处修改Y轴单位。
安装插件后,如果jmeter报错,可能就是这个jmeter版本和这个jar包不适配,我是因为jar包版本高,然后把jmeter换成了最新版本。
四、Jmeter查看CPU和内存
我上面的例子中,只使用了方法二,是因为方法一的插件我下载不下来
通过实时监控服务器资源的使用情况,可以准确把握不同测试场景下,服务器资源消耗情况的变化。对于应用性能分析有着重要的作用;同时也是调整测试场景设计的重要依据。
监控服务器的性能指标,如下三种方法:
方法一:使用jmeter的插件PerfMon Metrics Collector
方法二:使用nmon独立监控方案(http://nmon.sourceforge.net/pmwiki.php)
方法三:使用top、free等命令
方法一:使用PerfMon由两部分组成:
- ServerAgent:部署在被测服务器,负责资源耗用数据的采集
- PerfMon:以插件形式集成到jmeter,作为一个监听器listener
环境部署
1. ServerAgent部署
下载地址:https://github.com/undera/perfmon-agent
将下载的.zip文件放到被测服务器任意位置,解压,直接运行即可(默认端口:4444)
linux:nohup ./startAgent.sh & (使用nohup令其在后台运行)
windows:startAgent.bat
2. PerfMon插件安装
方法一:使用Plugins Manager(对jmeter插件进行集中管理)
1)下载地址:http://jmeter-plugins.org/get/,下载后得到一个jar文件jmeter-plugins-manager-1.7.jar
2)将下载得到的jar文件放在jmeter的 lib/ext目录下
3)重启jmeter
4)菜单栏 -> Options -> Plugin Manager,进入插件管理页
5)选择需要的插件进行安装
方法二:直接下载所需插件,将插件的jar包放在jmeter的 /lib/ext目录下,重启jmeter即可
下载路径;https://jmeter-plugins.org/
6)、打开jmeter创建 PerfMon Metrics Collector 监听器进行服务器性能数据显示
- Host/IP填写服务器地址
- Port填写端口号
- Metric To collect选中需要监控得各项指标
7)、点击jmeter启动按钮后,查看插件监控服务器CPU折线图
方法二、nmon
nmon是一种在AIX与各种Linux操作系统上广泛使用的监控与分析工具,它能在系统运行过程中实时地捕捉系统资源的使用情况,记录的信息比较全面,
并且能输出结果到文件中,然后通过nmon_analyzer工具产生数据文件与图形化结果
1、下载方式
①、复制下面这个链接,会下载到电脑本地,然后输入下面命令通过FTP上传到服务器
②、Linux命令行输入:wget http://sourceforge.net/projects/nmon/files/nmon16e_mpginc.tar.gz
3、新建一个nmon文件夹:mkdir nmon
4、tar -zxvf nmon16*.gz -C /root/nmon/
5、已经解压进去了 ll /root/nmon/
6、切换到工具目录,执行【./nmon_x86_64_centos6】命令
7、然后我报错
8、提示我缺少libncurses5,我使用yum安装时报错,是因为我们是ubuntu。所以我们使用sudo apt install libncurses5
9、安装完成后,执行【./nmon_x86_64_centos6】这个命令
10、成功启动
11、 nmon通过命令【 ./nmon_x86_64_centos6 -f -s 10 -c 14】启动监控,捕获服务器的各项数据
参数说明
-f 监控结果以文件形式输出,默认机器名+日期.nmon格式 (YYYYMMDD_HHMM.nmon)
-F 指定输出的文件名,比如test.nmon
-s 指的是采样的频率,单位为毫秒
-c 指的是采样的次数,即以上面的采样频率采集多少次
-m 指定生成的文件目录
12、这样会生成一个.nmon格式的文件
13、看到这个文件,使用sz ime tab键自动补全,下载到电脑本地
14、下载nmon analyse分析工具,然后解压
使用nmon analyser对nmon文件进行解析,生成带图表信息的xlsx格式文件。
下载地址:http://nmon.sourceforge.net/pmwiki.php?n=Site.Nmon-Analyser
15、打开这个excel,会报出宏错误,点击允许即可
16、然后Excel中,点击analyze nmon data,选择刚刚从服务器中下载下来的nmon文件打开即可。
17、最后生成cpu曲线图。