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

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

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

01 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所示。

图1 验证 JDK 及 Java 环境已集成

  • 若系统未集成 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所示。

图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 端多用户并发测试的介绍,如果你想了解更多有关优麒麟上的开发经验或技术分享,也可以留言告诉小优哦!

投稿作者 作者网站

评论

 
 

发表评论

 
你的昵称*
电子邮件*
网址(选填)
我的评论*
  • 发表评论
  • 为您推荐


    请支持IMCN发展!

    谁在捐赠

    微信捐赠 支付宝捐赠
    微信捐赠 支付宝捐赠




    微信公众号二维码

    归档