『Jmeter入门万字长文』 | 从环境搭建、脚本设计、执行步骤到生成监控报告完整过程
『Jmeter入门万字长文』 | 从环境搭建、脚本设计、执行步骤到生成监控报告完整过程
- 1 Jmeter安装
- 1.1 下载安装
- 1.2 Jmeter汉化
- 1.2.1 临时修改
- 1.2.2 永久修改
- 1.3 验证环境
- 2 测试对象
- 2.1 测试对象说明
- 2.2 测试对象安装
- 2.2.1 下载安装
- 2.2.2 启动测试对象服务
- 2.2.3 访问测试对象
- 2.2.4 注意事项
- 2.2.5 其他参数
- 2.2.6 网页登录数据库
- 2.2.7 命令行连接数据库
- 3 明确测试目标
- 3.1 测试接口
- 3.2 测试数据
- 3.3 测试目标
- 4 Jmeter脚本设计
- 4.1 启动Jmeter
- 4.2 添加http信息头管理器
- 4.3 添加http请求默认值
- 4.4 添加线程组
- 4.5 添加http请求
- 4.6 添加查看结果树
- 4.7 运行调试
- 5 客户端安装jmeter-plugins-manager插件
- 5.1 下载jmeter-plugins-manager插件
- 5.2 jmeter-plugins-manager包配置
- 5.3 下载PerfMon插件并应用
- 5.4 添加PerfMon监听器
- 6 服务端配置ServerAgent
- 6.1 下载ServerAgent
- 6.2 配置ServerAgent
- 7 测试服务是否OK
- 8 Jmeter配置监控指标
- 9 GUI方式运行
- 10 非GUI运行
- 10.1 安装jmeter-plugins-cmd插件
- 10.2 命令行启动性能脚本
- 10.3 查看报告
- 10.4 命令行生成监控图片
- 10.5 命令行生成csv文件
『授人以鱼,不如授人以渔』
仅以此文赠送那些需要学习Jmeter入门的伙伴。
仅供学习和参考,转载请注明出处。
文章通俗易懂,虽然很长,但是一篇文章可帮大家快速了解Jmeter性能测试过程。
欢迎小伙伴阅读、指正和交流。
特别说明:
1、本文是一个Jmeter快速入门的一个完整过程;
2、可帮助快速了解Jmeter性能测试过程和Jmeter简单操作;
3、文中通过一个简单的实例把Jmeter从安装、汉化到基本操作进行了贯穿,仅作为学习参考。
1 Jmeter安装
1.1 下载安装
- 详细参考Jmeter安装配置详细教程;
- 简单总结下:
1、下载官网:Jmeter下载地址;
2、选择对应的版本;
3、安装JDK环境;
4、JDK环境变量配置;
5、Jmeter环境配置。
1.2 Jmeter汉化
1.2.1 临时修改
- 即设置后只对本次使用有效,重启后恢复默认语言。
- 选择
Options—>Choose Language—>选择其他语言(例如:Chinese(Simplified)简体中文)设置成功。
重启Jmeter
又会恢复英文。
1.2.2 永久修改
- 即永久性设置,设置后每次打开显示的语言都是一样的;
- 进入到
Jmeter
的bin
目录下,找到jmeter.properties
文档; - 以记事本的方式打开查找
language
,找到language=en
的行
如下图,将en
改为cn
,并且去掉前面的#
号,保存退出; - 重启
jmeter
,语言设置成功。
1.3 验证环境
- 命令行输入:
jmeter
,出现以下内容,表示OK
;
2 测试对象
2.1 测试对象说明
- 为了清晰的了解整个测试过程,我们使用
禅道开源版
作为测试对象; - 后续会对其中的一两个接口使用
Jmeter
进行测试; - Jmeter安装环境为
Windows
,测试对象禅道安装在ubuntu
下。
2.2 测试对象安装
2.2.1 下载安装
- 下载地址:禅道官网;
- 找到
Linux
一键安装包:
- 点击下载后,使用
xftp
上传到ubuntu
上:
- 把上传到
ubuntu
上的禅道安装包复制到/opt
目录下:
sudo cp ZenTaoPMS-18.8-zbox_amd64.tar.gz /opt/
- 将安装包直接解压到
/opt
目录下:
sudo tar -zxvf ZenTaoPMS-18.8-zbox_amd64.tar.gz
2.2.2 启动测试对象服务
禅道服务包括Apache和Mysql,启动命令如下。
- 启动所有服务:
/opt/zbox/zbox start
- 停止所有服务:
/opt/zbox/zbox stop
- 重启所有服务:
/opt/zbox/zbox restart
- 开机自动启动:以把
/opt/zbox/zbox restart
加到操作系统的自启目录。
2.2.3 访问测试对象
- 禅道安装完并启动服务后,直接浏览器输入:
http://禅道服务器ip:apache端口。
特别注意:这里需要开放几个端口:
1、sudo ufw status
查看开放的端口:
2、开放需要的端口:sudo ufw allow 端口
2.2.4 注意事项
- 如果网页无法访问,请先关闭禅道所在电脑的
防火墙
和selinux
再刷新网页访问试一下; - 使用云服务器请注意在安全组中开放
apache
使用端口; - 禅道默认管理员帐号是
admin
,密码123456
; - 初次登陆请修改密码:
2.2.5 其他参数
- 如果不加任何参数执行
/opt/zbox/zbox
会打印输出命令可用参数:
Usage: ./zbox {start|stop|status} [--aport=8080] [--mport=3307]
--aport参数 可以修改Apache的端口
--mport参数 可以修改Mysql的端口
2.2.6 网页登录数据库
- 禅道数据库管理用的是
adminer
,但是为了安全,访问adminer
的时候需要身份验证,需要运行sudo /opt/zbox/auth/adduser.sh
来添加用户,如下命令:
# 进入脚本目录
cd /opt/zbox/auth# 执行添加用户的脚本
bash adduser.sh
This tool is used to add user to access adminer
Account: admin # 输入用户名
Password: # 输入密码
Adding password for user admin
- 打开浏览器,输入
http://禅道服务的ip:apache端口
点击“数据库管理”:
- 输入用户名和密码:
- 网页直接显示登录界面:
1、系 统:默认选择MySQL。
2、服务器:127.0.0.1:MySQL端口
(MySQL端口启用的是3306,那么就填写127.0.0.1:3306。
注意:ip只能写127.0.0.1)
3、用户名:root(禅道默认的数据库用户名是root) 密 码:123456(禅道默认的数据库密码是123456) 数据库:zentao。
- 登陆成功如下:
2.2.7 命令行连接数据库
- 登录数据库:
/opt/zbox/bin/mysql -u root -P MySQL端口 -p
(如:/opt/zbox/bin/mysql -u root -P 3306 -p)
- 导入数据库:
/opt/zbox/bin/mysql -u root -P MySQL端口 -p 要导入的库名 < XXXX.sql (如:/opt/zbox/bin/mysql -u root -P 3306 -p zentao < zentao.sql)
3 明确测试目标
3.1 测试接口
- 登陆禅道后,点击
更多-后台-二次开发
:
- 可以看到接口信息,我们这里简单就拿
token
来验证:
3.2 测试数据
- 将以下数据中的地址、用户名等参数改为自己的即可:
# 请求地址:
http://172.18.126.87:80/zentao/api.php/v1/tokens# 请求方式:
POST# 请求参数:
{"account": "admin", "password": "Kenwaytest123456"}
3.3 测试目标
- 使用登陆接口,对登陆接口进行压测;
- 并发20,持续时间为5分钟。
4 Jmeter脚本设计
4.1 启动Jmeter
cmd
命令行输入:jmeter
即可打开图形化界面:
4.2 添加http信息头管理器
测试计划-右键-添加-配置元件-HTTP信息头管理器
,如下:
- 参数设置如下:
4.3 添加http请求默认值
测试计划-右键-添加-配置元件-HTTP请求默认值
,如下:
- 设置参数如下:
4.4 添加线程组
测试计划-右键-添加-线程(用户)-线程组
,如下:
- 设置参数如下:
4.5 添加http请求
线程组-右键-添加-取样器-http请求
,如下:
- 设置参数如下:
4.6 添加查看结果树
测试计划-右键-添加-监听器-查看结果树
,如下:
4.7 运行调试
- 点击运行按钮,查看返回数据是否ok,如下:
- 如果返回如下
token
值,则说明说有设置是ok的:
5 客户端安装jmeter-plugins-manager插件
- 我们需要关注被压测服务器的
cpu
、内存、磁盘、网络等指标参数的浮动来衡量压测服务器的能力; - 可以通过在
jmeter
客户端集成jmeter-plugins-manager
插件,在服务端部署插件serverAgent
来实时监控被压测服务器的性能;
5.1 下载jmeter-plugins-manager插件
- 下载插件管理包,地址:插件包管理地址;
5.2 jmeter-plugins-manager包配置
- 将下载的
jar
包添加到Jmeter
中; - 即将其放置到
jmeter
的安装目录lib\ext
下:
5.3 下载PerfMon插件并应用
- 重启
Jmeter
; - 点击选项-插件管理器:
PerfMon(Servers Performance Monitoring)
选项,点击右下角的Apply Changes and Restart JMeter
按钮应用:
5.4 添加PerfMon监听器
测试计划-右键-添加-监听器-jp@gc-PerfMon Metrics Collector
,如下:
6 服务端配置ServerAgent
对linux服务器的服务进行压测时,服务器的运行情况可以通过添加插件serverAgent来观察,可以实时监控性能指标。
6.1 下载ServerAgent
- 下载S
erverAgent-2.2.3.zip
,下载官网地址;
6.2 配置ServerAgent
-
下载后上传到
ubuntu
上,比如目录soft
下:
-
解压缩:
sudo unzip ServerAgent-2.2.3.zip
-
进入到解压目录
ServerAgent-2.2.3
下,直接运行./startAgent.sh
启动;
特别注意:
1、默认启动端口为4444;
2、也可以使用命令指定端口启动(例如将指定TCP为5678,UDP指定为6789):./startAgent.sh --tcp-port 5678--udp-port 6789--sysinfo
;
3、建议将此脚本写成shell脚本,授权chmod -R 777 XXX
之后下次直接启动脚本程序。
- 运行
./startAgent.sh
提示没有java
环境,这个需要jre1.8
以上版本:
- 输入
java
按照提示的安装包进行安装即可:
- 启动服务:
7 测试服务是否OK
Windows
下cmd
执行以下命令,检查ServerAgent
代理端口:
telnet 172.18.126.87 4444
- 如果进入以下界面说明4444端口是被开放的:
- 如果提示无法连接到4444端口,需要在ubuntu上开放4444端口:
sudo ufw allow 4444
8 Jmeter配置监控指标
- 在
jp@gc-PerfMon Metrics Collector
上进行指标选择; - 点击
AddRow
,然后在host
的地方添加需要监控的服务器的主机域名或者IP
,port
填写端口,Metric to collect
下拉选择监控的指标(CPU、Memory、Swap、Disks I/O、Network I/O等)
- 运行时如果报错:
ERROR: java.net.ConnectException: Connection refused: connect
,需要检查端口,ip是否正确,另外设置本地防火墙策略,参考Jmeter监控服务器资源报错问题ERROR;
9 GUI方式运行
- 直接运行脚本,可以看到如下监控数据:
10 非GUI运行
- 性能测试时建议使用这种方式可以提升性能;
- 这种方法运行时将监控数据输出到指定文件,文件必修是
.jtl
结尾;
10.1 安装jmeter-plugins-cmd插件
- 在插件管理器中勾选如图即可:
10.2 命令行启动性能脚本
- 创建报告存放路径,比如:
D:\A_jmeter_test\report
; - 创建压测数据存放路径,比如:
D:\A_jmeter_test\jtl
; - 脚本存放路径,比如:
D:\A_jmeter_test\登陆.jmx
; - 命令行执行脚本命令为:
jmeter -n -t 脚本路径 -l jtl数据文件路径 -e -o 测试报告存放路径
- 比如:
jmeter -n -t D:\A_jmeter_test\登陆.jmx -l D:\A_jmeter_test\jtl\登陆.jtl -e -o D:\A_jmeter_test\report\
- 命令行运行以上命令如下:
10.3 查看报告
- 打开报告存放路径,比如:
D:\A_jmeter_test\report
:
- 运行
index.html
,如下:
10.4 命令行生成监控图片
- 新建存放图片的路径,比如
D:\A_jmeter_test\picture
; - 命令行先执行
JMeterPluginsCMD.bat
,看下这个命令有没有问题:
- 发现这个文件找不到,我们看下图片中的
D:\apache-jmeter-5.3\bin\\..\lib\cmdrunner-2.2.jar
中的文件是否存在:
- 结果发现是
cmdrunner-2.3.jar
而不是cmdrunner-2.2.jar
,则需要修改JMeterPluginsCMD.bat
文件; - 而
JMeterPluginsCMD.bat
文件在D:\apache-jmeter-5.3\bin
目录下:
- 完整的执行命令如下:
JMeterPluginsCMD.bat --generate-png 存放图片的路径 --input-jtl jtl数据文件路径 --plugin-type PerfMon --width 图片宽度 --height 图片高度
- 示例如下:
JMeterPluginsCMD.bat --generate-png D:\A_jmeter_test\picture\登陆.png --input-jtl D:\A_jmeter_test\jtl\登陆.jtl --plugin-type PerfMon --width 800 --height 600
- 生成的图片如下:
10.5 命令行生成csv文件
- 创建
csv
文件存放路径,比如:D:\A_jmeter_test\csv
; - 执行的命令为:
JMeterPluginsCMD.bat --tool Reporter --generate-csv 存放csv路径 --input-jtl 存放jtl数据文件路径 --plugin-type PerfMon
- 示例如下:
JMeterPluginsCMD.bat --tool Reporter --generate-csv D:\A_jmeter_test\csv\登陆.csv --input-jtl D:\A_jmeter_test\jtl\登陆.jtl --plugin-type PerfMon
相关文章:

『Jmeter入门万字长文』 | 从环境搭建、脚本设计、执行步骤到生成监控报告完整过程
『Jmeter入门万字长文』 | 从环境搭建、脚本设计、执行步骤到生成监控报告完整过程 1 Jmeter安装1.1 下载安装1.2 Jmeter汉化1.2.1 临时修改1.2.2 永久修改 1.3 验证环境 2 测试对象2.1 测试对象说明2.2 测试对象安装2.2.1 下载安装2.2.2 启动测试对象服务2.2.3 访问测试对象2.…...

Unity C#中LuaTable、LuaArrayTable、LuaDictTable中数据的增删改查
LuaTable、LuaArrayTable、LuaDictTable中数据的增删改查 介绍Lua表lua表初始化lua移除引用lua中向表中添加数据lua中表中移除数据lua表中连接数据lua表中数据排序获取lua表长度获取表中最大值 UnityC#中LuaTableUnityC#中LuaArrayTable、LuaDictTable、LuaDictTable<K,V>…...
Spring常见面试题
https://blog.csdn.net/a745233700/article/details/80959716?ops_request_misc%257B%2522request%255Fid%2522%253A%2522169847982516800213061720%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id169847982516800213061720&biz_id0&…...

通过Vue自带服务器实现Ajax请求跨域(vue-cli)
通过Vue自带服务器实现Ajax请求跨域(vue-cli) 跨域 原理:从A页面访问到B页面,并且要获取到B页面上的数据,而两个页面所在的端口、协议和域名中哪怕有一个不对等,那么这种行为就叫跨域。注意:类…...
Vue2-计算属性的用法
题记 vue2计算属性的用法 反转字符串 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>实例</title> <script src"https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> </hea…...
SM3加密udf
SM3加密udf maven xml <dependencies> <!-- 配置日志 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.5</version> </dep…...

ce从初阶到大牛(两台主机免密登录)
一、配置ssh远程连接 实现两台linux主机之间通过公钥验证能够互相实现免密登陆 1.确认服务程序是否安装 rpm -qa | grep ssh 2.是否启动 ps -aux | grep ssh 3.生成非对称公钥 ssh-keygen -t rsa 4.公钥发送到客户端 cd /root/.ssh/ ssh-copy-id root192.168.170.134 因为…...

CS224W2.3——传统基于特征的方法(图层级特征)
前两篇中我们讨论了节点层级的特征表示、边层级的特征表示: CS224W2.1——传统基于特征的方法(节点层级特征)CS224W2.2——传统基于特征的方法(边层级特征) 在这篇中,我们将重点从整个图中提取特征。换句话说,我们想要描述整个图结构的特征…...

【CSS】包含块
CSS规范中的包含块 包含块的内容: 元素的尺寸和位置,会受它的包含块所影响。 对于一些属性,例如 width, height, padding, margin,绝对定位元素的偏移值(比如 position 被设置为 absolute 或 fixed)&…...

[SpringCloud] Nacos 简介
目录 一、Nacos,启动! 1、安装 Nacos 2、运行 Nacos 3、Nacos 服务注册 二、Nacos 服务多级存储模型 1、服务跨集群分配 2、NacosRule 负载均衡(优先本地) 3、服务实例的权重设置 4、环境隔离 三、Nacos 注册中心细节分…...
TypeScript - 字符串的字面类型
啥是字面量类型 字面量类型,是限制了一个字符串变量的取值范围只能某几个固定字符串中的一个。 我感觉 与枚举类型有异曲同工之妙。 字符串字面量类型有啥用 没啥用。 就是来限制字符串变量不能随便赋值的。 定义一个我看看 让你读书,但是只有四本书可以…...

CRM客户管理系统源码 带移动端APP+H5+小程序
CRM客户管理系统源码 带移动端APPH5小程序 开发环境: thinkphp mysql 功能介绍: 1、 办公管理:审批管理、工作报告、日程管理、办公审批、公告管理 2、 客户管理:我的客户、客户列表、成交客户、行业类别、预查、地区列表、客户状态、客…...

Mac版好用的Git客户端 Fork 免激活
Fork是一款强大的Git客户端软件,在Mac和Windows操作系统上都可以使用。汇集了众多先进的功能和工具,可以帮助用户更方便地管理和控制Git仓库。 Fork的界面简洁直观,易于使用。它提供了许多高级的Git功能,如分支管理、合并、提交、…...

有一个带头结点的单链表L,设计一个算法使其元素递增有序
有一个带头结点的单链表L,设计一个算法使其元素递增有序 代码思路: 我这里懒得搞那个指针了,直接遍历一遍链表,把链表的元素复制到数组arr里面 对数组A进行一下排序,排完之后再把元素复制到L里面。 至于排序你用啥算…...

JAVA将EEE MMM dd HH:mm:ss zzz yyyy日期格式化为yyyy-MM-dd HH:mm:ss形式
1、将EEE MMM dd HH:mm:ss zzz yyyy格式的数据转换成yyyy-MM-dd HH:mm:ss 代码如下 public static void main(String[] args) throws ParseException {String dateStr "Mon Oct 26 15:19:15 CST 2020";DateFormat cstFormate new SimpleDateFormat("yyyy-MM…...

【Qt】文件系统
文章目录 文件系统文件操作案例:显示路径到标题框,显示内容到文本框对文件进行写操作获取文件相关信息 文件系统 Qt 通过QIODevice提供了对 I/O 设备的抽象,这些设备具有读写字节块的能力,下面是 I/O 设备的类图: QIO…...

PostgreSQL 基础知识
执行环境: psql 1. 创建一个表格 CREATE TABLE customers ( customer_id serial PRIMARY KEY,firstname VARCHAR(100) NOT NULL,lastname VARCHAR(100) NOT NULL,username VARCHAR(50) UNIQUE NOT NULL,password VARCHAR(50) NOT NULL,email VARCHAR(255) UNIQUE …...
基于 ResNet18 架构使用 deformable convolution的车道线检测
下面是一个基于关键点的车道线检测网络的 PyTorch 代码示例,其中使用了 deformable convolution。该代码示例基于 ResNet18 架构,可以根据实际情况进行修改。 首先,需要导入必要的库和模块: import torch import torch.nn as nn…...

C++in/out输入输出流[IO流]
文章目录 1. C语言的输入与输出2.C的IO流2.1流的概念2.2CIO流2.3刷题常见while(cin >> str)重载强制类型转换运算符模拟while(cin >> str) 2.4C标准IO流2.5C文件IO流1.ifstream 1. C语言的输入与输出 C语言用到最频繁的输入输出方式就是scanf ()与printf()。 scanf…...

MongoDB的安装
MongoDB的安装 1、Windows下MongoDB的安装及配置 1.1 下载Mongodb安装包 下载地址: https://www.mongodb.com/try/download http://www.mongodb.org/dl/win32 MongoDB Windows系统64位下载地址:http://www.mongodb.org/dl/win32/x86_64 MongoDB W…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...

FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...

Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...