有这么一天,你的BOSS要求你为google网站做100个用户的并发性能测试,你该怎么做?
也许你的BOSS是个小白,会问你下列问题:
1.jmeter介绍/安装
Apache JMeter™是Apache组织开发的一款开源软件,是典型的纯Java开发的应用程序,可以在不同平台比如Windows、Linux或macOS系统上进行软件测试。JMeter主要用于应用程序的功能负载测试来度量软件的性能,也可以用于其他类型的测试比如接口测试,API测试等。
安装前准备工作
1.1.下载JDK (安装JMeter之前需要配置好Java环境) 前往Oracle官网下载JDK,建议用JDK8+,默认安装即可。
1.2.配置环境变量(windows,mac无需配置)
1、JDK安装完成后,进行环境变量的配置 单击“计算机-属性-高级系统设置”,单击“环境变量”。
2、系统变量下新建JAVA_HOME,变量值为自己本地JDK的安装路径(如C:\Program Files\Java\jdk1.8.0_202)
3、编辑Path变量,在最后面加上%JAVA_HOME%\bin 和 %JAVA_HOME%\jre\bin
4、验证Java环境是否配置好:进入DOS界面,输入命令java -version,如显示版本号即代表配置成功。
jmeter环境搭建
2.1.JMeter下载地址
点击跳转,下载后无需安装,解压后即可使用。
2.2.环境变量配置(可自行百度)
2.组件介绍/运行原理(做一个线程的设计来讲解一下)
X1-X5是一个模拟负载的过程
Y1:模拟过程,模拟用户请求
Y2:验证结果准确性(响应码/body)
Z:收集测试结果数据
运行原理:jmeter基础原理是建立一个线程池,多线程运用取样器产生大量负载,在过程中通过断言验证结果准确性,在通过监听器来记录测试结果。如果取样器有参数话的需求,可以通过配置原件/前置处理器来完成。需要关联的话,用过后置处理器来完成。如果要模拟用户场景,模拟多少用户,运行多长时间,就需要设置线程组。模拟并发,利用定时器来完成。模拟一些特定场景,我们就需要用到控制器来完成。
3.功能介绍
创建线程--模拟场景
1.创建线程组
3.1.创建线程组
测试计划上右键-->添加-->线程(用户)-->线程组。
3.2.配置线程组
(1)线程数:虚拟用户数、模拟的用户数量。
(2)Ramp-Up时间:启动时长,所有虚拟用户数的总启动时间。表示总线程数在几秒内进行初始化创建完毕。
(3)循环次数:每个线程发起请求的循环次数。如果次数设置为10,线程数200;则总的请求数为200 * 10。
(4)调度器:需先把循环次数勾选永远才会生效。
2.创建请求
4.1.创建 HTTP请求 线程组上右键-->添加-->取样器-->HTTP请求。
4.2.配置HTTP请求 (1)协议:不填默认使用http协议。
(2)服务器名称或IP:请求发送的目标服务器名称或IP地址(域名)。
(3)端口号:目标服务器的端口号,默认值为80。
(4)HTTP请求:请求的方式,常用的有GET、POST、Put...等。
(5)路径:目标URL路径(不包括服务器地址和端口)。
(6)内容编码:默认值iso8859。当请求参数中包含中文时,可填写utf-8防止乱码。
(7)同请求一起发送参数:GET请求时URL中附带参数时可以通过此方式添加。
(8)消息体数据:POST/PUT请求时,编写JSON数据{“Key”:“Value”}。
3.创建监听器
5.1.添加监听器 线程组上右键→添加→监听器→察看结果树、聚合报告等(也可在测试计划下添加,则同时监听多个线程组;或在http请求下,监听一个请求)
5.2.察看结果数
查看请求的总数量、取样器结果(状态码,响应信息等)、请求内容、响应数据。
5.3.聚合报告
a样本:总测试数量
b平均值:单个请求的平均响应时间
c中位数:50%用户的响应时间
d90%百分位:90%用户的响应时间
e95%百分位:95%用户的响应时间
f99%百分位:99%用户的响应时间
g最小值:最小的响应时间
h最大值:最大的响应时间
i异常%:请求异常所占百分比
j吞吐量(TPS):每秒完成的请求数,吞吐量=请求数/总时间
kQPS:每秒查询率,请求数/秒
l接收:每秒从服务器段接受到的数据量
m发送:每秒从客户段发送的请求数量
4.添加后置提取器
多个接口涉及到关联时,如计划查询前需要登录,则先获取登录接口的token给到下一个接口使用,可以使用后置提取器解决。 常用的后置提取器:Json提取器、正则表达式提取器。
6.1.添加JSON提取器
HTTP请求上右键-->添加-->后置处理器-->JSON提取器
Names of created variables:创建变量名称,给后面需要关联引用的接口
JSON Path expressions:JSON路径表达式,从响应数据中提取需要的值,用$.
Match No.(0 for Random):匹配号
6.2.添加正则表达式提取器
HTTP请求上右键-->添加-->后置处理器-->正则表达式提取器
5.设置集合点
真正的并发是不存在的,为了更真实的实现并发这感念,可以在需要压力的地方设置集合点。
7.1添加同步定时器
HTTP请求上右键-->添加-->定时器-->同步定时器。
7.2配置同步定时器
模拟用户组数量:虚拟用户达到指定数量时,同时对目标网址进行访问。
6.参数化
8.1CSV数据文件设置
1、适用于参数取值范围较大的时候使用,该方法具有更大的灵活性。
2、线程组(取样器)上右键添加-->配置元件-->CSV数据文件设置。
文件名:文件存放的绝对路径。
文件编码:数据中涉及到中文时,选择UTF-8
变量名称:引用时用到的变量名,如username,password
忽略首行:如果文件中没有变量名,需要从第一行开始读取,选择False;如果需要忽略第一行,从第二行开始读取,选择True。
分隔符:文件中的分隔符,如“,”
其他项按实际情况选择或默认即可。
3、在引用的地方用${变量名}来代替。
8.2用户参数
1、适用于参数取值范围很小的时候使用。
2、线程组(取样器)上右键添加-->前置处理器-->用户参数。
8.3用户定义变量
1、一般用于Test Plan中不需要随请求迭代的参数设置,如:Host、Port Number。
2、线程组(取样器)上右键添加-->配置元件-->用户定义变量,添加变量名和变量值。
3、在引用的地方用${变量名}来代替。
8.4函数助手*
可作为其他参数化方式的补充项,如:随机数生成的函数${__Random(,,)}
7.录制
自带http录制
3.1添加HTTP代理服务器 测试计划上右键→添加→非测试元件→HPPT代理服务器。
3.2配置HTTP代理服务器(TestPlan Creation)
(1)端口:默认8888,可修改,要确保端口不被占用。
(2)目标控制器:选择要把脚本录制到哪个线程组下面。
(3)分组:录制的脚本是否需要分组存放。
3.3配置HTTP代理服务器(Requests Filtering)
排除模式:手动填写需使用正则表达式。点击添加建议排除即可,过滤无用脚本(如css、js、bmp)
3.4设置浏览器代理
(谷歌浏览器为例,浏览器设置中搜索代理,跳转到系统设置)
(1)打开手动设置代理,填写代理地址及端口。
地址:jmeter所在服务器地址(本地浏览器测试填127.0.0.1或localhost)。
端口:与jmeter代理设置的端口号一致,然后点击保存。
录制:
*注意:录制https脚本时,需导入CA安全证书:
1)JMeter中点击选项→SSL管理器,导入jmeter/bin目录下的证书文件(有效期一般7天,记得随时更换)ApacheJMeterTemporaryRootCA.crt。
浏览器中点击设置,搜索“证书”,在证书管理器中导入上述证书文件到受信任的组织*
1、HTTP代理服务器-->点击启动-->弹出窗口,点击确定。
2、操作浏览器进行脚本的录制,录制完毕后,弹窗上点击停止。
3、查看录制到的脚本。
badboy录制/回放
下载与安装: www.cnblogs.com/xiaogongjin…
1.在输入框输入我们要录制的网址
2.点击录制
3.点击跳转,进行操作
4.我们可以根据要录制的内容在右侧界面进行操作录制
5.录制OK,我们可以进行数据导出,导出的文件格式jmx,可直接导入jmeter
遇到的问题及解决:
一、修改默认录制状态
二、提示 "当前页面的脚本发生错误"
解决方案: www.pianshen.com/article/297…
小记
1.链接数据库jdbc
2.分布式压测
3.监控服务器性能指标
4.BeanShell后置处理器,二次开发
小伙伴们可基础知识透彻之后自行学习。。。尤其是jmeter的二次开发,即刻开启你的学习之路吧!!