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

技术干货 | 优麒麟上的 JMeter 性能测试实战分享

bigegpt 2024-08-04 11:21 9 浏览

关注优麒麟,更多干货等着你!

JMeter 是由 Apache 公司开发的一个纯 Java 的开源项目,用来进行负载功能测试和性能测试。我们可以使用 JMeter 对 Web 应用或各种各样服务的性能进行分析和度量。JMeter 最初被设计用于 Web 应用或 FTP 应用测试,现在扩展到功能测试、数据库服务器测试等。

本文将为大家介绍在优麒麟操作系统上使用 JMeter 模拟多个用户同时登录网站进行 Web 端多用户并发的性能测试

01 JMeter 基础介绍

开源JMeter 完全免费,允许开发者使用源代码进行二次开发。

平台独立JMeter 是100%纯 Java 桌面应用程序,所以可以多平台运行。

完全多线程框架JMeter 允许通过多个线程并发取样和通过单独的线程组对不同的功能同时取样。

可视化的测试结果测试结果可以用不同的报表显示,如:图表、表格、树和日志文件。

仿真:JMeter 可以模拟多用户并发线程,在性能测试时可以给 Web 应用程序创建沉重的负担。

支持多协议:JMeter 不仅测试支持 Web 应用程序,还可以评估数据库服务器的性能。JMeter 基本支持所有的协议(如:HTTP、JDBC、LDAP、SOAP、JMS、和 FTP)。


02 在优麒麟上安装 JMeter

在优麒麟操作系统上安装 JMeter 需要先安装 Java 环境和 JMeter 安装包。

2.1. 部署 Java 运行环境

  • 可以通过以下方法验证 JDK 及 Java 环境是否集成。

查看是否能运行 Java、查看 Java 的版本:java -version,如果有 JDK 相关的版本信息,输出结果如图1所示。

  • 若系统未集成 Java 环境,则需要从 Oracle 官网上下载 JDK 并安装,下载地址如下:

https://www.oracle.com/java/technologies/javase-downloads.html

2.2. 安装 JMeter

  • 下载并安装 JMeter,下载地址如下:

https://jmeter.apache.org/download_jmeter.cgi

  • 安装完成后使用 source jmeter 启动 JMeter 图形化界面。

2.3. 设置 JMeter 语言为中文环境

(1) 临时设置,重启软件后失效:JMeter 菜单栏选择 Options->Choose Language->Chinese (Simplified)

(2) 永久设置:进入 bin 目录,在“jmeter.properties”文件中添加“language=zh_CN”,保存之后再打开 JMeter 永久设置中文环境生效,如图2所示。


03 JMeter 主要元件

本节中将介绍 JMeter 中主要元件的基本概念。

3.1. 测试计划

测试计划是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。

“独立运行每个线程组”选项解释如下:

  • 未勾选时:有多个线程组时,其随机启动执行;
  • 勾选后:多个线程组时,等待前一个线程组执行完成后才开始下一个线程组。

3.2. 线程组

一个线程组看做一个虚拟用户,线程组中的每个线程都可以理解为一个虚拟用户。多个虚拟用户去执行相同的一批任务。每个线程之间都是隔离的,互不影响。以下是线程属性:

(1)线程数:线程数也就是并发数,每个线程将会完全独立的运行测试计划,互不干扰。多个线程用于模仿对服务器的并发访问。

(2)Ramp-Up 时间:用于设置启动所有线程所需要的时间。假设设置线程数为10、时间设定为100s,则 JMeter 将使用100s 使10个线程启动并运行。每个线程将在前一个线程启动后10(100/10)s 后启动。

(3)循环次数:设置线程组在结束前每个线程循环的次数。假设设置线程数为5、时间设定为5s、每个线程执行循环2次,则每秒启动一个线程、每次循环执行1个请求。

3.3. 配置元件

配置元件是维护取样器(Sampler)需要的配置信息,并根据实际的需要修改请求的内容。

本文中使用到了配置元件中的 HTTP 请求信息头管理器。

信息头:请求头,传 Cookie、Token 或者其他信息的时候使用。

该属性管理器用于定制 Sampler 发出的 HTTP 请求的请求头的内容。

3.4. 前置处理器

前置处理器负责在请求之前工作,常用来修改请求的设置。

3.5. 定时器

定时器负责定义请求之间的延迟间隔。

3.6. 取样器(Sampler)

取样器是性能测试中向服务器发送请求,记录响应信息、响应时间的最小单元,如:HTTP Request Sampler、FTP Request Sample、TCP Request Sample、JDBC Request Sampler 等,每一种不同类型的 sampler 可以根据设置的参数向服务器发出不同类型的请求。

本文中使用到了 HTTP 请求及调试取样器。

3.6.1. HTTP 请求

添加方式:线程组-添加-取样器-HTTP 请求。

以下为 HTTP 请求中的各项设置的基本概念:

(1) 协议:向目标服务器发送 http 请求时的协议,http/https,大小写不敏感,默认 http;

(2) 服务器名称或 IP:http 请求发送的目标服务器名称或者 IP 地址,比如 http://www.baidu.com;

(3) 端口号:目标服务器的端口号,默认值为80,可不填;

(4) 方法:发送 http 请求的方法,可用方法包括 GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE 等;

(5) 路径:目标的 URL 路径(不包括服务器地址和端口);

(6) Content encoding:内容的编码方式

(Content-Type=application/json;charset=utf-8);

(7) 参数消息/消息体数据/文件上传:具体使用哪一个,主要取决于在 HTTP 信息头管理器中 Content-Type 设置的什么类型。

3.6.2. 调试取样器

使用调试取样器查看使用 JSON 提取器或正则表达式提取器结果是否正确。在开发脚本时添加调试取样器,可在查看结果树中能看到在脚本中所有参数化变量所取的值,这样有利于排错。

3.7. 后置处理器

后置处理器负责在请求之后工作,常用获取返回的值。本文中介绍了 JSON 提取器和正则表达式提取器获得请求返回结果中的 Token 值。Token 的基本概念将在第4节进行介绍。

3.8. 断言

断言是用来判断请求响应的结果是否如用户所期望的。

3.9. 监听器

监听器负责收集测试结果,同时确定结果显示的方式。本文使用到了:查看结果树、聚合报告及图形结果。

3.10. 逻辑控制器

逻辑控制器可以自定义 JMeter 发送请求的行为逻辑,它与取样器(Sampler)结合使用可以模拟复杂的请求序列。



04 Token

Token 是服务端生成的一串字符串,以作为客户端进行请求的一个标识,当第一次登录后,服务器生成一个 Token 便将此 Token 返回给客户端,以后客户端只需带上这个 Token 前来请求数据即可,无需再次带上用户名和密码。

Token 是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token 便应运而生。Token 的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

很多业务场景需要依赖 Token 接口,而账号登录之后返回一个动态的 Token,因此需要提取到登录的 Token,才不会导致出现用户未登录等现象。



05 JMeter 模拟多用户并发性能测试

下面为大家介绍在优麒麟操作系统上使用 JMeter 进行 Web 端多用户并发性能测试。

在集群监控项目中,模拟20个用户同时登录集群监控管理网站并发访问【主机监控】页面,测试多用户并发平均响应时间,主机监控页面如图3所示,在 JMeter 中执行的测试计划(Test plan)总览如图4所示。

图3 主机监控页面

图4 多用户并发测试计划总览


06 Web 端多用户并发测试步骤详解


6.1. 测试计划

在本测试中,有2个线程组,需要按顺序执行,需要勾选独立运行每个线程组选项,如图5所示。

图5 测试计划设置

6.2. 线程组

登录集群监控管理网站后,测试20个用户并发访问【主机监控】页面。

对不同用户访问网站进行登录,还是相同用户在不同设备上进行登录访问不做要求,所有线程组1只登录一次即满足要求,设置参数如下。

线程组1-登录 login 所在线程组设置如图6所示。

图6 线程组1-登录 login 设置

线程组2-点击【监控管理】-【主机监控页面】返回的 getMonitHosts 所在线程组设置如图7所示。

图7 线程组2-getMonitHosts 设置

6.3. HTTP 请求

在地址栏中输入集群监控管理网站地址:端口号(172.17.66.91:5000),按 F12打开【开发人员工具】页面查看请求,根据请求中的参数填写 HTTP 请求。

(1) 登录 login 的请求参数及 HTTP 请求设置如图8、图9所示。

输入用户名密码登录后,在【网络】-【所有】中找到【login】,根据【消息头】、【参数】填写【HTTP请求】。

图8 login的请求参数

图9 login的HTTP请求设置

其中,checkTime 为时间戳,每次都会变化。参数需要为时间戳或者是日期格式的数据。针对此问题,可以使用 JMeter 自带的_time 函数来解决以上问题,通过函数助手,生成一个_time 函数,如图10所示。

图10 使用函数助手生成_time 函数

(2) getMonitHosts 的请求参数及 HTTP 请求设置如图11、图12所示。

点击【监控管理】-【主机监控页面】,在【网络】-【所有】中找到【getMonitHosts】,根据【消息头】、【参数】填写【HTTP请求】。

图11 getMonitHosts 的请求参数

图12 getMonitHosts的HTTP请求设置

其中,currentPage 为【主机监控页面】选择哪一页,用户登录后任意点击到某一页(20个用户通过接口任意访问【主机监控】页面的1-500页中的任意页)。针对此问题,通过函数助手,生成一个 Random 函数,如图13所示。

图13 使用函数助手生成 Random 函数

6.4. 获取登录响应中的 Token 参数

登录 login 请求响应中可查看到 Token 值,如图14所示。

图14 login 请求响应中的 Token 参数

可通过 JSON 提取器或正则表达式提取器获得 data 中的 Token 参数,将获取的参数结果命名为 login_data。

(1) JSON 提取器

JSON 提取器中的参数格式如图15所示。

图15 通过 JSON 提取器获得 Token

(2) 正则表达式提取器

正则表达式提取器中的参数格式如图16所示。

图16 通过正则表达式提取器获得 Token

6.5. 跨线程组传递参数

JMeter 的线程组之间是相互独立的,各个线程组互不影响,所以线程组1中输出的参数,是无法直接在线程组2中被调用的。

在线程1中添加后置处理器 BeanShell PostProcessor,后置处理器中程序设置如图17所示。

图17 后置处理器中的程序设置

在线程2中添加前置处理器 BeanShell PostProcessor,前置处理器中程序设置如图18所示。

图18 前置处理器中的程序设置

6.6. HTTP 请求信息头管理器

getMonitHosts 请求头里需要有 Authorization,就是 login 请求中传递的 Token,设置如图19所示。

图19 HTTP 请求信息头管理器设置

6.7. 监听器

通过查看结果树可以看到正确获取到 Authorization 参数,如图20所示。

多用户并发平均响应时间即为聚合报告及图形结果中的平均值,单位 ms,如图21、图22所示。

图20 查看结果树

图21 聚合报告

图22 图形结果

以上就是在优麒麟操作系统上如何使用 JMeter 进行 Web 端多用户并发测试的介绍,如果你想了解更多有关优麒麟上的开发经验或技术分享,也可以留言告诉小优哦

相关推荐

当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厂商和全球各地媒体的热烈关注,全球存储新势力—影驰,也积极参与其中,为广大玩家朋友带来了...