JMeter的核心技术
1、什么是JMeter?
JMeter是由Apache软件基金会组织提供的、免费的、轻量化、Java开发的一款接口测试工具、性能测试工具;
作为客户端通过大量网络协议向服务器发送请求,可以测试目前业内主流的接口,比如:HTTP协议、HTTPS协议、JDBC协议等;
由于JMeter能够模拟大量的用户(虚拟用户 VU Virtual User),可以发起压力,测试接口乃至服务器后台的性能;(牵一发而动全身)
原理:Java执行程序需要Java虚拟机进程支持,包括运行JMeter;后续发起多任务,称为多线程,模拟大量的用户发送请求。
进程Process:正在运行的程序;比较消耗系统资源(重量级)
线程Thread:在进程中发起多任务为多线程;比较节约系统资源(轻量级),让测试机能够发起更多的虚拟用户VU。
学习方法:多对比,多思考工具为何如此设计!
Postman、JMeter
2、安装和使用JMeter(搭建测试机环境)
1)安装JDK,并配置环境变量
目前使用JDK1.8(主流) JDK:Java开发工具包
凡是基于Java开发的产品,都需要JDK的支持;
比如:JMeter、服务器软件Tomcat等...
JMeter5.3版本需要JDK1.8支持
配置系统环境变量:
JAVA_HOME:JDK的安装目录
Path:命令的搜索路径 将JDK的bin命令追加到Path的值中
为了让系统找到JDK1.8的命令,比如java.exe 启动Java虚拟机
2)安装JMeter
解压即可:apache-jmeter-5.3.zip
比如:
E:\性能测试JMeter资料\apache-jmeter-5.3\apache-jmeter-5.3
目录结构:
<1> bin目录:常用命令、启动项
jmeter.bat 给Windows系统使用的 批处理文件
jmeter.sh 给Linux系统使用的 shell命令 Java跨平台
要求:修改系统环境变量Path,将jmeter.bat所在的目录名,追加到Path中,为了后续在命令行中可以执行jmeter命令;
比如:
E:\性能测试JMeter资料\apache-jmeter-5.3\apache-jmeter-5.3\bin
启动方式:
双击运行jmeter.bat
命令行中运行jmeter
<2> lib目录:第三方类库 class libary 大量的jar包
将Java开发的类、程序打包为压缩包,供JMeter使用
比如:为JMeter扩展功能,在ext目录下(扩展),添加jar包
JMeterPlugins-Standard.jar
启动JMeter:运行jmeter.bat
出现一个客户端界面,界面中关键?Test Plan 测试计划
技巧:修改界面显示效果
修改工具默认语言:
修改一个配置文件:bin\jmeter.properties 属性文件
特点:大量的名值对 名=值 #表示注释
设置工具默认的语言风格 en 英语 zh_CN 中文
language=zh_CN
保存文件,重启JMeter才生效!
原理:使用JMeter界面配置测试计划(直观的图形界面),保存后是一个jmx文件(便于保存)
jmx:JMeter的XML配置文件(大量标签表示不同的配置)
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.3">
嵌套添加其它节点,通过工具界面配置
比如:线程组、取样器(请求)...
工具会自动记录以上信息
</jmeterTestPlan>
3、JMeter测试计划基本要素
面试题:JMeter的一个测试计划中有哪些要素?
思路:先整体,后局部
1)根节点:测试计划 是其他节点的最顶层“容器”
配置内容:
<1> 用户定义的变量:配置计划中的全局变量
定义名称 和 值,后续如何使用? ${变量名}
比如:ip1 192.168.52.129
使用时:${ip1} 对比Postman的“小眼睛” 使用时{{ip1}}
<2> 独立运行每个线程组:一般不勾选,如果选择,表示“串行执行”
<3> 添加第三方jar包:库 为了扩展
比如:使用JMeter连接MySQL数据库,需要数据库的驱动包
选择添加mysql.jar文件(仅当前计划可用)
如果:添加到JMeter的lib目录下,所有计划都可用!
2)“测试计划”下,添加1个或多个“线程组” (Thread Group)
目的:管理虚拟用户,对接口进行访问
(VU 多线程模拟)
<1> 线程数:通过配置1个或多线程,模拟1个或多个用户
功能测试时:1个VU
调试脚本,先使用1个VU运行,便于分析执行轨迹,便于调试
性能测试时:多个VU 发起更大的压力
<2> 在取样器(请求)错误后要执行的动作:
请求错误后,可以 继续 发送后续的请求
<3> Ramp-UP时间(秒):1
表示以上虚拟用户准备在多久时间内就位(预备阶段)
<4> 调度器:控制用户执行多久
3)“线程组”下,添加“取样器”(Sampler):就是常用协议的请求
取样:对请求协议细节的捕捉、描述
目前:HTTP请求 按照接口文档、用例设计填写细节
名称:test01_multi_params接口
注释:基于HTTP协议,以Get方法,使用有效的id和username查询用户的注册时间,返回预期的JSON结果
对比Postman:配置效果 Get方法
http://{{ip1}}/apitest/multi-params/?id=1&username=admin
协议名://主机名:端口/应用名/功能名/?参数名=参数值&...
:80 可省略 QueryString 查询字符串
改版为JMeter:
<1> 协议:HTTP
<2> 服务器名称或IP:${ip1} 使用全局变量
<3> 端口号:默认不填 目前是80
<4> 请求方法:默认GET
<5> 路径:/apitest/multi-params/
<6> 内容编码:默认不写
如果中文编码出现问题,建议改为UTF-8
<7> 同请求一起发送的参数:添加
名称 值
id 1
username admin
4)“测试计划”或“线程组”下,添加“监听器”:Listener 观察者
作用范围不同
<1> 察看结果树:和功能有关 请求包、响应包的分析
类似:Postman的Console 控制台
在响应数据中,可以选择不同的察看角度:
Text 普通文本:适合看源代码
HTML:网页页面效果,更直观
JSON:JSON格式化后的效果
问题1:IP地址不对,观察变量名、变量值
问题2:URL地址写错
排查方法:关注请求包、响应包内容的提示,异常提示
XxxException 异常
XxxError 错误
<2> 图形结果:察看性能变化的趋势图 将执行轨迹数据 描点不划线
<3> 用表格察看结果:察看性能结果的明细 每次请求的细节
<4> 聚合报告:察看性能结果统计 平均、最大、最小等
练习1:get方法根据商品类别编号查询商品页面
请求名称:get方法根据商品类别编号查询商品
请求方法:Get
接口地址和参数:
https://list.jd.com/list.html?cat=9987,653,655
https://list.jd.com/list.html?cat=670,671,672
转化为JMeter的请求?
协议:HTTPS
服务器名称或IP:list.jd.com
端口号:默认不写 默认443
请求方法:Get
路径:/list.html/ 要求/结尾
请求参数:
cat 9987,653,655
一点自我学习分享,更多相关JMeter,后面再与大家分享、交流~~