百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

面试必杀技:Jmeter性能测试攻略大全(第二弹)

bigegpt 2024-08-04 11:22 11 浏览

1. JMeter介绍与安装

JMeter介绍

  1. JMeter是Apache组织开发的基于Java的压力测试工具。具有开源免费、框架灵活、多平台支持等优势。除了压力测试外,JMeter也可以应用的接口测试上。
  2. JMeter下载、安装及启动

下载:

访问JMeter官网:https://jmeter.apache.org/download_jmeter.cgi



点击下载windows版本apache-jmeter-5.1.1.zip

安装:

解压到D盘即可使用,目录结构:

bin目录:启动命令

  • jmeter.bat 在Windows可启动的批处理文件
  • jmeter.sh 在Linux可执行的shell脚本
  • jmeter.properties: 核心配置文件(配置中文编码)
  • lib目录:存放Jmeter依赖的jar包,同时安装插件放于lib中的ext目录中



启动:

  • 进入bin目录,双击jmeter.bat文件即可启动jmeter

(如果打不开,则说明其工作环境JDK没搭建好,原因:JMeter需要基于Java环境)

  • 在dos中进入到apache-jmeter的bin目录中,然后执行命令:jmeter也可以启动

3、配置jmeter工作环境

方式:安装jdk并配置环境变量

1)安装jdk,要求是1.8级以上版本

在安装jdk的过程中,记得把路径复制一份,方便后面使用。

2)配置jdk的系统环境变量:

a》java_home:jdk的安装路径,(需要新建)

b》path:增加jdk的工作目录bin ( %java_home%\bin; )

(只需编辑,往里添加工作路径)

3)验证:

A、在dos中输入命令:javac,显示javac命令的格式及选项

B、启动bin目录中jmeter.bat能正常打开。

设置界面为简体中文,如下:



2、使用JMeter来做接口功能测试

过程:测试计划-》线程组-》http请求-》响应断言-》断言结果-》参看结果树!



其中测试计划是自带的。

测试计划:相当于项目,某某项目-测试计划

添加线程组:相当于功能点、或者接口,某某接口-线程组

在“测试计划”上右键–>添加–>线程(用户)–>线程组。



然后可以对线程组进行设置(一般在做性能测试时才需要去设置,接口几乎不用)

线程组参数详解:

名称:根据业务来设置合适名称,接口测试就是接口名称,性能测试就是功能点2. 遇错误的动作:默认“继续”,忽略错误继续完成请求3. 线程数:虚拟用户数,默认是1个,一个用户占用一个线程。多用户并发测试时就需要在这里设置并发用户数,也就是设置多少个线程数。

Ramp-Up 时间(秒):启动所有虚拟用户所需的时间。含义如下: 比如:如果线程数为10,启动时长为2秒,那就意味着2秒内需启动10个用户,平均下来就是每秒启动5个用户。启动时间为0,则代表同时启动 ,并发。

循环次数:每个用户发送请求的次数,好比参数化。如果线程数为10,循环次数为5, 那么每个线程(用户)发送5次请求。总请求数为10*5=50 如果勾选了“永远”, 那么所有线程会一直发送请求,直到手动停止运行或者设置了调度器。

调度器:设置线程组启动的持续时间和延迟时间(调度器需勾选循环次数为永远才有效) 持续时间(秒):测试持续的时间:24小时=24*3600秒 启动延迟(秒):测试延迟启动的时间

添加HTTP请求:相当于测试用例中的测试步骤,某某-HTTP请求

在“线程组”上右键–>添加–>取样器–>HTTP请求



设置HTTP请求信息:

基本》

2.1. Web服务器

协议:向目标服务器发送HTTP请求的协议,可以是HTTP或HTTPS,默认为HTTP

服务器名称或IP :HTTP请求发送到的目标服务器名称或IP ,比如:www.jd.com

端口号:目标服务器的端口号,默认值为80 ,可以不写,https为443。

注意: “ 服务器名称或IP”中不用输入http://, 请求时会自动加入 ;

2.2. Http请求

方法:发送HTTP请求的方法,包括GET、POST等。

路径:目标URL路径(服务器名称与参数之间的部分)

内容编码 :编码方式默认值为iso8859,改为utf-8支持中文。跟随重定向:当HTTP请求的响应是302/301时,JMeter会跟随重定向到目标页面。

使用keepAlive :jmeter 和目标服务器之间使用 Keep-Alive方式进行HTTP通信保持长 连接,减少连接的次数,进而缩短了连接时间****

2.3. 请求参数

A)参数: get请求所携带的数据列表,名值对 (同请求一起发送参数)

B)消息体数据: post请求所携带的请求数据是json格式数据,类似于字典

C)文件上传: post请求本地文件上传,文件类型一定是file说明:所添加的参数中有中文时需要勾选“编码”

Http请求 示例 : https://www.jd.com/,打开京东首页get请求



添加响应断言

在“HTTP请求”上右键–>添加–>断言–>响应断言(检查请求后的响应是否正确)



需要设置的断言的内容:



包括:适用范围(那个请求),响应的字段,匹配规则以及添加要检查的测试模式

3.1、apply to: 表达的是断言那个请求,默认是只断言主请求(main sample only)

3.2、测试字段: 表达的是断言的内容,有响应文本,响应代码,响应信息等等,一般都是断言响应文本

3.3、模式匹配规则: 表达的是断言的方式,有包括、匹配、相等等等,一般使用包括或者相等

3.4、测试模式: 根据业务来编写,可以理解为我们的预期结果

4. 添加断言结果

在“HTTP请求”上右键 -> “添加”-> “监听器” -> “断言结果” ,查看断言的结果



【断言】又名:检查点

含义: 检查预期数据与实际数据是否匹配

方式: 先添加响应断言再添加断言结果,是一个组合

断言成功 : 断言结果只有一行,为请求的名称,则表示成功。

断言失败 :断言结果有两行,第二行显示失败的原因。

5. 察看结果树, 目的是查看请求发送后 的结果:

在“HTTP请求”上右键–>添加–>监听器–>察看结果树



点击发送请求,image.png结果如下:





第四章 JMeter模拟多用户同时发送请求

1、一个简单的压力测试实战

现有一个http请求接口http://localhost:8080/goods/to_list, 要使用Jmeter对其进行压测,测试步骤如下:

a.新建一个线程组。



b. 设置线程组参数。这里配置为:10个线程,同时启动,循环一次。



c. 新增http请求默认值。 在上一步创建的线程组上,新增http请求默认值,所有的请求都会使用设置的默认值,这设置协议为http,IP为localhost,端口为8080。





d. 添加要压测的http请求。



下图第一个红框内的协议、IP、端口不需要设置,会使用步骤c中设置的默认值,只需设置请求路径Path即可,这里填入/goods/to_list。



e. 新增监听器,用于查看压测结果。这里添加三种:聚合报告、图形结果、用表格查看结果,区别在于结果展现形式不同。



f. 点击运行按钮开始压测,并查看结果。



五、如何查看系统负载何性能瓶颈

服务器上执行以下命令:

top


如下图所示,可以看到系统负载load average情况,1分钟平均负载,5分钟平均负载,15分钟平均负载分别是1.58, 0.50, 0.23;同时可以看到最耗费资源的进程为mysql。



如何创建带参数的请求

1. 首先新建一个http请求。



2.设置请求路径,并添加参数。 如下图所示,Path中填写请求路径,点击Add添加参数,有一个名为token的参数。



至此给带参数请求已创建完成,点击运行即可开始压测。

3、如何模拟设置多个变量,模拟多个用户请求接口

新建Csv Data Set Config设置。



2.新建配置文件config.txt,配置用户信息。 文件名随便写,里面数据每行有两个值,userId和userToken,中间用逗号隔开,我这里设置了两个用户的信息。



3.引用配置文件。 Csv Data Set Config中引用配置文件config.txt,并定义变量名为userId和userToken。



4.请求中引用配置文件中的变量。 在填写参数Value的地方不要将值写死,而是写为 变量名这种格式,我这里想要引用配置文件中 u s e r T o k e n 的值,所以写为 {变量名}这种格式,我这里想要引用配置文件中userToken的值,所以写为 变量名这种格式,我这里想要引用配置文件中userToken的值,所以写为{userToken}。



至此配置完毕,点击运行按钮,即可开始压测。

3. jmeter模拟多用户并发

一. 100个真实的用户

一个账号模拟100虚拟用户同时登录和100账号同时登录

区别

1个账号100个人用,同时登录;

100个人100个账号,同时登录。

相同

两个都是100人同时登录,具体看项目需求。

账号来源

利用“注册”或“创建”账号接口,创建100个用户;

“查询”接口,保存100个账号的账号、密码到一个文件。

3、提取100个账号、密码的文件

meter脚本整体布局

线程组(一级)---->请求默认值、请求头、http请求、察看结果树(二级)----->正则表达式、BeanShell 后置处理程序(三级)。


HTTP请求默认值:是存放系统通用ip的位置(协议:http; 服务名称或ip:127.0.0.1);

HTTP信息头管理:接口请求之前需要带的信息,部分接口不带不能运行(Authorization、Content-Type、Accept、User-Agent),例如必须带的token就在信息头中存放;

登录请求:请求方法、请求路径、消息体;正则表达式提取token

创建请求:请求方法、请求路径、消息体;参数化用户名,创建多个用户;

查询账号:请求方法、请求路径、消息体;正则表达式提取用户名、密码;BeanShell 后置处理程序存储返回值到文件中



(2)查询请求中的正则表达式和BeanShell 后置处理程序

正则表达提取----->获取想要的字段内容



BeanShell 后置处理程序---->将提取到的字段内容存储在指定文件4.csv中

FileWriter fs=new FileWriter("D://近期//4.csv",true);

BufferedWriter out =new BufferedWriter(fs);

out.write(vars.get("username")+","+vars.get("id")); //username、id为正则定义名称

out.write(System.getProperty("line.separator")); //相当于"\n"自动换行

out.close();

fs.close();




线程组线程数设置数目等于提取到的条数,执行脚本得到100个用户的账号和密码



二、100个用户同时登录

设置线程组

线程数:并发用户数

Ramp-up时间(秒):启动所有线程所需要的时长

0---->代表同时并发;

100---->线程数100,时间100秒。代表每隔1s启动一个线程(100/100=1)

循环次数:Loop Count

默认值是1;

2---->线程数100,循环次数2。代表启动200个线程;

勾选“永远”,会一直执行,需要人工停止,一般配合调度器使用。



补充:同步定时器:

作用:阻塞线程,直到指定的线程数量到达后,在一起释放,可以瞬间产生很大的压力;

使用同步定时器时,循环次数要勾选为永远



2. 模拟多用户登录

线程组下添加----->CSV 数据文件设置

将存储用户账号、密码的文件引入,并命名变量名称,在登录时调用。



调用,传参${name}

注释:本系统账号密码一致,所以只需要调用一列值

/api/v1/oauth/token?username=${name}&password=${name}&scope=all&grant_type=password


执行测试,查看结果

100用户同时登录



未完待续,你的点赞是我更新的最大动力!

相关推荐

当Frida来“敲”门(frida是什么)

0x1渗透测试瓶颈目前,碰到越来越多的大客户都会将核心资产业务集中在统一的APP上,或者对自己比较重要的APP,如自己的主业务,办公APP进行加壳,流量加密,投入了很多精力在移动端的防护上。而现在挖...

服务端性能测试实战3-性能测试脚本开发

前言在前面的两篇文章中,我们分别介绍了性能测试的理论知识以及性能测试计划制定,本篇文章将重点介绍性能测试脚本开发。脚本开发将分为两个阶段:阶段一:了解各个接口的入参、出参,使用Python代码模拟前端...

Springboot整合Apache Ftpserver拓展功能及业务讲解(三)

今日分享每天分享技术实战干货,技术在于积累和收藏,希望可以帮助到您,同时也希望获得您的支持和关注。架构开源地址:https://gitee.com/msxyspringboot整合Ftpserver参...

Linux和Windows下:Python Crypto模块安装方式区别

一、Linux环境下:fromCrypto.SignatureimportPKCS1_v1_5如果导包报错:ImportError:Nomodulenamed'Crypt...

Python 3 加密简介(python des加密解密)

Python3的标准库中是没多少用来解决加密的,不过却有用于处理哈希的库。在这里我们会对其进行一个简单的介绍,但重点会放在两个第三方的软件包:PyCrypto和cryptography上,我...

怎样从零开始编译一个魔兽世界开源服务端Windows

第二章:编译和安装我是艾西,上期我们讲述到编译一个魔兽世界开源服务端环境准备,那么今天跟大家聊聊怎么编译和安装我们直接进入正题(上一章没有看到的小伙伴可以点我主页查看)编译服务端:在D盘新建一个文件夹...

附1-Conda部署安装及基本使用(conda安装教程)

Windows环境安装安装介质下载下载地址:https://www.anaconda.com/products/individual安装Anaconda安装时,选择自定义安装,选择自定义安装路径:配置...

如何配置全世界最小的 MySQL 服务器

配置全世界最小的MySQL服务器——如何在一块IntelEdison为控制板上安装一个MySQL服务器。介绍在我最近的一篇博文中,物联网,消息以及MySQL,我展示了如果Partic...

如何使用Github Action来自动化编译PolarDB-PG数据库

随着PolarDB在国产数据库领域荣膺桂冠并持续获得广泛认可,越来越多的学生和技术爱好者开始关注并涉足这款由阿里巴巴集团倾力打造且性能卓越的关系型云原生数据库。有很多同学想要上手尝试,却卡在了编译数据...

面向NDK开发者的Android 7.0变更(ndk android.mk)

订阅Google官方微信公众号:谷歌开发者。与谷歌一起创造未来!受Android平台其他改进的影响,为了方便加载本机代码,AndroidM和N中的动态链接器对编写整洁且跨平台兼容的本机...

信创改造--人大金仓(Kingbase)数据库安装、备份恢复的问题纪要

问题一:在安装KingbaseES时,安装用户对于安装路径需有“读”、“写”、“执行”的权限。在Linux系统中,需要以非root用户执行安装程序,且该用户要有标准的home目录,您可...

OpenSSH 安全漏洞,修补操作一手掌握

1.漏洞概述近日,国家信息安全漏洞库(CNNVD)收到关于OpenSSH安全漏洞(CNNVD-202407-017、CVE-2024-6387)情况的报送。攻击者可以利用该漏洞在无需认证的情况下,通...

Linux:lsof命令详解(linux lsof命令详解)

介绍欢迎来到这篇博客。在这篇博客中,我们将学习Unix/Linux系统上的lsof命令行工具。命令行工具是您使用CLI(命令行界面)而不是GUI(图形用户界面)运行的程序或工具。lsoflsof代表&...

幻隐说固态第一期:固态硬盘接口类别

前排声明所有信息来源于网络收集,如有错误请评论区指出更正。废话不多说,目前固态硬盘接口按速度由慢到快分有这几类:SATA、mSATA、SATAExpress、PCI-E、m.2、u.2。下面我们来...

新品轰炸 影驰SSD多款产品登Computex

分享泡泡网SSD固态硬盘频道6月6日台北电脑展作为全球第二、亚洲最大的3C/IT产业链专业展,吸引了众多IT厂商和全球各地媒体的热烈关注,全球存储新势力—影驰,也积极参与其中,为广大玩家朋友带来了...