jmeter基础
使用GUI模式操作,可参考Jmeter UI操作基础
代码修改
压测程序,关于人为的操作,可设置默认值,配合压测脚本,我们程序需要做如下改动:
收货地址设置默认值
在
com.enation.app.javashop.service.trade.order.impl.TradeManagerImpl#createTrade
方法中修改// param.getAddressId() 修改为收货地址ID(此ID必须在数据库表es_member_address中存在,对应字段为addr_id) 如下
MemberAddress memberAddress = this.memberAddressClient.getModel(1L);购物车数量不增加
在
com.enation.app.javashop.service.trade.cart.impl.CartOriginDataManagerImpl#add
方法中修改如下判断条件// 在if条件中添加 && false ,防止增加购物车商品数量
if (skuVo != null && sku.getLastModify().equals(skuVo.getLastModify()) && false) {
......
}购物车不清空
在
com.enation.app.javashop.service.trade.order.impl.TradeManagerImpl#createTrade
方法中将购物车清空相关的逻辑注释// //设置交易订单列表
// tradeVO.setOrderList(orderList);
//
// //交易入库
// tradeIntodbManager.intoDB(tradeVO);
//
// //清除已购买的商品购物车数据
// cartOriginDataManager.cleanChecked(way);
//
// //清空备注信息
// this.checkoutParamManager.setRemark("");
// //清空发票信息
// this.checkoutParamManager.deleteReceipt();
// //清空客户端类型
// this.checkoutParamManager.setClientType("");
创建长时效token
public void test() {
//新建买家用户角色对象
Buyer buyer = new Buyer();
//设置用户ID
buyer.setUid(用户uid);
//设置用户名称
buyer.setUsername("用户名");
//设置uuid
buyer.setUuid("用户uuid");
JwtTokenCreater tokenCreater = new JwtTokenCreater("token的秘钥");
tokenCreater.setAccessTokenExp(Integer.MAX_VALUE);
tokenCreater.setRefreshTokenExp(Integer.MAX_VALUE);
//创建Token
Token token = tokenCreater.create(buyer);
System.out.println(token.getAccessToken());
}
public void test() {
//新建商家用户角色对象
Clerk buyer = new Clerk();
buyer.setSellerId(16L);
buyer.add("SELLER_SUPER_SELLER");
buyer.setClerkId(1);
buyer.setFounder(1);
buyer.setClerkName("food");
//设置用户ID
buyer.setUid(16L);
//设置用户名称
buyer.setUsername("food");
buyer.setSellerName("xxxshop");
//设置uuid
buyer.setUuid("1234444");
buyer.setSelfOperated(1);
buyer.setShopType("supplier");
JwtTokenCreater tokenCreater = new JwtTokenCreater("秘钥");
tokenCreater.setAccessTokenExp(Integer.MAX_VALUE);
tokenCreater.setRefreshTokenExp(Integer.MAX_VALUE);
//创建Token
Token token = tokenCreater.create(buyer);
System.out.println(token.getAccessToken());
}
拷贝token,替换脚本中access_token
!> 此步骤需要连接配置中心加载配置文件,并且需要确保生成token的秘钥与待压测环境token秘钥一致。此方法生成token有效时长为10天,如需更长时间请修改com.enation.app.javashop.framework.test.BaseTest#EXPIRATIONTIME
的值
使用命令执行jmeter的方法
命令介绍
jmeter -n -t <testplan filename> -l <listener filename>
# 示例:
jmeter -n -t testplan.jmx -l test.jtl
#示例含义:则表示以命令行模式运行testplan.jmx文件,输出的日志文件为test.jtl
参数介绍
这里是我们使用非 GUI 模式运行测试脚本时可以使用的一些命令,Jmeter官网用户手册介绍如下:
-h, –help -> prints usage information and exit
-n, –nongui -> run JMeter in nongui mode
-t, –testfile <argument> -> the jmeter test(.jmx) file to run
-l, –logfile <argument> -> the file to log samples to
-r, –runremote -> Start remote servers (as defined in remote_hosts)
-H, –proxyHost <argument> -> Set a proxy server for JMeter to use
-P, –proxyPort <argument> -> Set proxy server port for JMeter to
-J, [prop_name]=[value] -> defines a local JMeter property.
具体的含义如下:
- -h 帮助 -> 打印出有用的信息并退出
- -n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter
- -t 测试文件 -> 要运行的 JMeter 测试脚本文件
- -l 日志文件 -> 记录结果的文件
- -r 远程执行 -> 在Jmter.properties文件中指定的所有远程服务器
- -H 代理主机 -> 设置 JMeter 使用的代理主机
- -P 代理端口 -> 设置 JMeter 使用的代理主机的端口号
- -J threadNum=20000,定义本地JMeter属性。
- -r -> 启动所有Slave节点
- -R ip,ip -> 指定启动Slave节点,多个节点通过,分隔
例如:/opt/jmeter/bin/jmeter -n -t /opt/api.jmx -l /opt/logs/1124-01.out -e -o /opt/logs/1124/01 -J threadNum=500 -J host=172.31.168.142 -J port=7002
其中,threadNum为线程数,duration为持续时间,host为API服务IP,port为API服务端口,示例压测脚本可参考api.jmx
jmeter单机压测
jmeter需要java环境,jdk安装可参考安装JDK
1.下载安装jemeter
yum install -y wget vim
mkdir /opt/jmeter
cd /opt/jmeter
wget https://mirrors.bfsu.edu.cn/apache//jmeter/binaries/apache-jmeter-5.4.tgz
tar -zxvf apache-jmeter-5.4.tgz
ln -s /opt/jmeter/apache-jmeter-5.4/bin/jmeter /usr/bin/jmeter
2.检测jmeter安装是否成功
cd /opt/jmeter
jmeter -v
- 在任意目录下执行
jmeter -v
,出现下图信息,则表示Jmeter安装成功。
4.创建jmx脚本和日志文件夹
压测脚本可参考api.jmx
mkdir /opt/jmeter/{logs,jmx}
5.创建压测sh脚本
vim test.sh
复制如下内容:
#!/bin/bash
# 声明jmx脚本所在目录
JMX_PATH=/opt/jmeter/jmx/api.jmx
#声明日志目录
LOG_PATH=/opt/jmeter/logs
# 声明 待压测服务IP
TEST_HOST=192.168.2.45
#声明 待压测服务端口
TEST_PORT=7003
#声明 线程数
THREADNUM=3000
# 声明压测时长 单位:秒
DURATION=60
###############################以下内容无需修改
# 声明日志子目录
LOG_SUB_PATH=`date +%Y%m%d`
if [ ! -d $LOG_PATH/$LOG_SUB_PATH ];then
mkdir $LOG_PATH/$LOG_SUB_PATH
else
echo "文件夹已经存在"
fi
# 获取子目录个数 ls -l |grep "^d"|wc -l
SUB_NUM='logs'`ls -l $LOG_PATH/$LOG_SUB_PATH |grep "^d"|wc -l `
jmeter -n -t $JMX_PATH -l $LOG_PATH/$LOG_SUB_PATH/$SUB_NUM/jmeter.out -e -o $LOG_PATH/$LOG_SUB_PATH/$SUB_NUM/ -J threadNum=$THREADNUM -J duration=$DURATION -J host=$TEST_HOST -J port=$TEST_PORT
echo '日志路径' $LOG_PATH/$LOG_SUB_PATH/$SUB_NUM
在当前目录执行sh test.sh
即可执行压测脚本,注意修改脚本中的参数信息
jmeter集群搭建
1.准备
jmeter需要java环境,jdk安装可参考安装JDK
节点 | 内网IP | 说明 |
---|---|---|
master | 192.168.2.58 | |
node | 192.168.2.79 |
2.配置
apache-jmeter-5.4/bin
目录下的jmeter.properties
文件修改
#master:
remote_hosts=192.168.2.58:1099,192.168.2.79:1099
server.rmi.ssl.disable=true
#Slave
remote_hosts=127.0.0.1
server.rmi.ssl.disable=true
!> master节点remote_hosts
的值需填写所有Slave节点的ip:port
,如果master节点参与请求,也要加入其中;所有Slave节点的remote_hosts
如上配置即可。
3.启动jmeter服务
!>apache-jmeter-5.4/bin
目录下执行./jmeter-server
:所有子节点中均需要执行,如果需要master也作为执行者,则master节点也需要启动./jmeter-server
进行监听。
4.运行脚本
创建脚本:
cd /opt/jmeter
vim test-cluster.sh
粘贴如下内容:
#!/bin/bash
# 声明jmx脚本所在目录
JMX_PATH=/opt/jmeter/jmx/api.jmx
#声明日志目录
LOG_PATH=/opt/jmeter/logs
# 声明 待压测服务IP
TEST_HOST=192.168.2.45
#声明 待压测服务端口
TEST_PORT=7003
#声明 线程数
THREADNUM=3000
# 声明压测时长 单位:秒
DURATION=60
# -r :启动所有Slave节点, -R 指定启动Slave节点,多个节点通过,分隔
NODE_IP='-r'
###############################以下内容无需修改
# 声明日志子目录
LOG_SUB_PATH=`date +%Y%m%d`
if [ ! -d $LOG_PATH/$LOG_SUB_PATH ];then
mkdir $LOG_PATH/$LOG_SUB_PATH
else
echo "文件夹已经存在"
fi
# 获取子目录个数 ls -l |grep "^d"|wc -l
SUB_NUM='logs'`ls -l $LOG_PATH/$LOG_SUB_PATH |grep "^d"|wc -l `
jmeter -n -t $JMX_PATH -l $LOG_PATH/$LOG_SUB_PATH/$SUB_NUM/jmeter.out -e -o $LOG_PATH/$LOG_SUB_PATH/$SUB_NUM/ -J threadNum=$THREADNUM -J duration=$DURATION -J host=$TEST_HOST -J port=$TEST_PORT $NODE_IP
echo '日志路径' $LOG_PATH/$LOG_SUB_PATH/$SUB_NUM
在当前目录执行sh test-cluster.sh
即可执行压测脚本,注意修改脚本中的参数信息
Javashop压测
压测脚本可下载JMX参考,关于其中详细内容,请使用Jmeter GUI模式查看。
Jmeter压测日志查看
安装nginx
# nginx安装
yum install -y gcc gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
cd /usr/local
wget https://nginx.org/download/nginx-1.14.0.tar.gz
tar -zxvf nginx-1.14.0.tar.gz
cd nginx-1.14.0
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make && make install
cd ..
rm -rf nginx-1.14.0.tar.gz
rm -rf nginx-1.14.0
修改nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
在server中修改
location / {
root /opt/jmeter/logs;
autoindex on; #开启目录浏览功能;
autoindex_exact_size off; #关闭详细文件大小统计,让文件大小显示MB,GB单位,默认为b;
autoindex_localtime on; #开启以服务器本地时区显示文件修改日期!
}
启动nginx:
cd /usr/local/nginx/sbin
./nginx
#重启nginx
nginx -s reload
浏览器访问ip:port
,如下图,选择当前日期文件夹,选择最后一次生成的日志文件夹访问