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

JMeter集成底座项目压测心得

bigegpt 2024-08-26 11:07 2 浏览

对于产品和技术型公司来说产品是根本,产品精品化是快速推进项目的重要指标,因此产品要体系化。我们公司产品已经形成了体系化,公司产品在一个个项目中不断迭代升级,逐渐成熟稳定,这对于我们公司来说是一个重要突破,也是以后发展的重要环节。

产品是否是精品要从很多角度评价,需要从功能性、易用性、扩展性、稳定性、高性能等不同维度考察,其中高性能是检测产品运行是否流畅的指标,产品在测试阶段压力性能测试是重要环节。

整体介绍

最近在完善集成底座项目流程,进行IDM压力测试,这就需要外围工具JMeter,本文既是通过JMeter对监控提醒功能性能的检验的介绍,也是对JMeter的介绍。

1.产品介绍

IDM产品叫做统一身份管理平台,主要用于解决企业5A功能的需求,5A主要包括:Account账号管理、Authentication认证管理、Authorization授权管理、Audit审计管理、Application Control应用管控。

IDM身份管理平台满足对企业信息系统的统一用户管理、统一身份认证、统一授权管理以及安全审计的要求,能够实现各业务系统的统一登录和集中访问,实现用户身份和权限的统一认证与授权管理,为企业不同的业务系统提供统一的用户管理和认证服务。

2.功能架构

IDM的功能架构主要是从5A管控的角度出发总结的架构模型,5A分别是统一认证、统一授权、统一账户、统一审计、统一应用管控,其中统一应用管控包含对各个应用系统账户的下发情况的管控(统一账户)、对当前业务系统的用户认证情况管控(统一认证)以及对当前系统的权限资源同步监控管控(统一权限)。

3.需求说明

本次性能测试的测试策略是使用JMeter结合IDM平台,通过模拟IDM统一认证登录跳转的运行,测试业务场景的事务响应时间和相关服务器的资源消耗情况,为客户提供一份完整的测试报告,本篇报告着重对云平台性能进行压测和记录结果,从并发量、稳定性两方面测试,确保功能服务达到实际生产标准。

JMeter介绍

通过上述描述,相信大家已经知道产品性能的重要性,在开发时不仅需要注意开发规范,产品性能测试也是必须要做的事情,开发功能要进行一次压测,压测需要工具,而工具就要用JMeter。

1.环境搭建

注:在安装JMeter之前,请先检查下电脑有没有装JDK:开始→运行→然后输入cmd→进入命令行界面,输入java -version , 出现以下信息就是此电脑已安装了JDK。

JMeter下载官网:http://JMeter.apache.org/download_JMeter.cgi

1.首先在JMeter官网下载一个压缩包,解压放到自己创建的文件夹路径下。

2.然后点击JMeter目录下bin文件夹里的JMeter.bat就可以打开JMeter,具体最后打开的界面如下:

当出现这个页面,就说明JMeter环境已经搭建好。

启动方式:

1.GUI启动(主要用于编写,调试脚本)双击JMeter.bat启动界面模式。

2.命令行启动(用于压力测试):

-h 帮助→打印出有用的信息并退出;

-n 非 GUI 模式→在非GUI模式下运行JMeter;

-t 测试文件→要运行的JMeter测试脚本文件;

-l 日志文件→记录结果的文件;

-r 远程执行→启动远程服务;

-H 代理主机→设置JMeter使用的代理主机;

-P 代理端口→设置JMeter使用的代理主机的端口号。

例如:

JMeter -n -t test1.jmx -l logfile1.jtl -H 192.168.1.1 -P 8080

3.远程启动(用于分布式压力测试)

a)编辑apache-JMeter-3.1\bin下JMeter.properties文件,多台ip用逗号隔开;

b)复制一份JMeter应用到配置ip的机器上,并启动apache-JMeter-3.1\bin下JMeter-server.bat作为slaver;

c)master上远程启动slaver。

2.功能说明

下图是需要调用请求操作:

选择线程组后右键添加,然后选择取样器:

1.序号1:填写协议:http、https。

2.序号2:要调用服务器的ip或者域名。

3.序号3:端口。

4.序号4:请求方法:get、post。

5.序号5:访问路径。

启动时要选择相关压测指标:

1.序号1:线程数,是添加并发多少。

2.序号2:时间,多长时间。

3.序号3:调用次数。

3.组件介绍

典型、常用组件介绍:

1.测试计划:是使用JMeter测试的开始,是其他元件的容器;通常根据项目来为测试计划重命名。

2.用户定义的变量:可以赋予动态获取值,使用${变量名} 引用。

3.线程组:用来设置发送请求的用户数,即并发数,还有线程的时间间隔、循环次数。

4.取样器(HTTP请求):填写HTTP请求的协议,方法以及参数。

5.监听器:负责收集测试结果,并给出结果显示方式,常用查看结果树和聚合报告。

6.控制器:结合采样器sampler使用,可以模拟复杂的请求序列;常见的分逻辑控制器,循环控制器以及事务控制器。

7.断言:用来判断响应结果是否如用户所预期的,自动化测试接口,基本上都要加断言来判断响应结果。

8.配置元件:主要是参数化中用到CSV Data Set Config。

9.前置处理器:负责在生成请求之前完成工作,常用来修改请求设置。

10.后置处理器:负责在生成请求之后完成工作,常用来处理响应数据,主要是在动态关联中用到后置处理器的正则表达式。

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

12.参数化设置,两种类型:一种是利用函数助手中的_Random 函数进行参数化设置; 另一种利用配置元件中的CSV Data Set Config 进行参数化设置。

13.动态数据关联:在HTTP 请求的参数中会遇到一些参数的值是从服务器响应返回的动态数据,这些数据需要进行关联才能使得下一次请求能成功地被服务器接收。在JMeter中,采用正则表达式提取器来获取这些动态数据。

测试过程

JMeter是一款非常流行和受欢迎的开源性能测试工具,像LoadRunner一样,它也提供了利用本地Proxy Server(代理服务器)来录制生成测试脚本的功能。

1.数据准备

JMeter测试我们首先要准备测试所需要的数据,账户信息如下:

2.脚本录制

下面以CAS认证脚本为例:

1.右键[测试计划]-[添加]-[线程]-[线程组]。

2.右键[线程组]-[配置元件]-[HTTP信息头管理器]。

3.右键[线程组]-[配置元件]-[HTTP Cookie管理器]。

4.右键[线程组]-[配置元件]-[用户定义的变量]。

5.右键[线程组]-[配置元件]-[CSV Data Set Config](添加数据文件配置)。

6.右键[线程组]-[取样器]-[HTTP请求](填写跳转CAS登录地址)。

7.右键[HTTP请求]-[后置处理器]-[正则表达式提取器](这里添加两个正则提取器:提取lt和execution后面登录要用到)。

8.右键[线程组]-[取样器]-[HTTP请求](填写CAS登录地址:这里我们需要添加passWord、empCode、service三个参数其中passWord和empCode是从数据文件中提取出来的)。

9.右键[线程组]-[取样器]-[HTTP请求](填写CAS登录请求地址:这里我们用到username、password、lt、execution、_eventld这5个参数其中lt和execution是第一个cas登录入口中通过正则提取出来的)。

10.右键[测试计划]-[添加]-[监听器]-[察看结果树]。

11.右键[测试计划]-[添加]-[监听器]-[聚合报告]。

12.在HTTP测试脚本录制下,填写代理服务器的端口:

a)Target Controller 修改为: “Test Plan>Thread Group>Recording Controller”;

b)Grouping 修改为: “Put each group in a new controller”。

13.设置完成后,可点击[启动],开始脚本录制。

3.结果说明

1.[view Resuls Tree]中可查看每个线程的运行情况,包括请求和返回两部分。绿色的代表线程运行成功,红色的代表线程运行失败

2.可在请求体中查看请求是否正确。

3.可在相应数据体中查看线程运行失败的原因,查看是否报错。

Sample:本次测试场景共运行了多少线程。

1.Average:平均响应时间。

2.Median:统计意义上的响应时间中值。

3.90% Line:所有线程中90%的线程响应时间都小于xx的值。

4.Min:最小响应时间。

5.Maximum:最大响应时间。

6.Error:出错率。

7.Throughput:吞吐量。吞吐量以”requests/second、requests/minute、requests/hour”来衡量。

CAS认证

CAS认证是传统的CAS拦截认证,通过页面的强制拦截跳转,实现统一认证的效果,但是这种访问具有侵入性,非常不友好,并且一部分企业除了IDM本身的登录情况并没用到CAS的登录认证。

1.认证流程

1.AuthenticationFilter:当用户访问应用时首先会被AuthenticationFilter拦截,判断assertion是否为空,如果为空会跳转到登录页面。

2.Cas20ProxyReceivingTicketValidationFilter:在登录页面输入用户名密码提交表单进行CAS认证返回ticket票据,被Cas20ProxyReceivingTicketValidationFilter拦截,通过TicketValidator中的validate方法校验ticket票据是否合法。

3.HttpServletRequestWrapperFilter:ticket票据校验通过后HttpServletRequestWrapperFilter会将用户信息放到AttributePrincipal对象中,然后将AttributePrincipal对象放到session中。

4.XXXUserCasFilter:应用中扩展UserCasFilter拦截器,从session中获取AttributePrincipal对象实现登录认证过程。

5.CAS认证报错原因主要为以下两方面

a)网络不通请求不到。

b)ticket票据过期。

2.测试脚本

首先我们需要把线程数和循环次数以及Ramp-Up时间设置为1如下所示:

点击启动按钮进行脚本的测试。

点击查看结果树查看是否登录失败等问题。

3.测试结果

1.CAS认证500并发,5分钟,JMeter聚合报告:异常率正常,平均值正常,吞吐量666.5,详情如下:

2.CAS认证外网1000并发,5分钟,JMeter聚合报告:异常率正常,平均值正常,吞吐量774.4,详情如下:

3.CAS认证外网1500并发,5分钟,JMeter聚合报告:异常率正常,平均值正常,吞吐量729.8,详情如下:

4.CAS认证2000内网并发,5分钟,JMeter聚合报告:异常率正常,平均值正常,吞吐量1506.5,详情如下:

5.CAS认证3000内网并发,5分钟,JMeter聚合报告:异常率正常,平均值正常,吞吐量1103.9,详情如下:

Oauth认证

Oauth2.0接口是IDM集团认证所用的接口,如果业务系统在进场时不需要子公司、分公司进行访问,那么他们可以进行这个接口的认证对接。所以在对接之前需要明确业务系统是通过哪种方式来与我们对接的。

1.认证流程

1.用户在访问业务系统登录时发起认证请求,通过URL跳转的方式请求IDM身份管理平台认证界面,传入client_id、redirect_uri、response_type、state,IDM根据参数返回code及state;

注意:state为状态位参数,请求系统在传递调用页面跳转时将state存储缓存中,后续调用请求是先判断state是否在缓存中已经存在,如果存在则为有效请求。

2.系统发起请求传入参数client_id、client_secret、redirect_uri、grant_type及code(页面返回的code),IDM身份管理平台进行认证,返回access_token。

3.系统根据获取的access_token触发IDM身份管理平台认证,IDM认证成功后返回用户信息Profile,返回至用户登录成功。

2.测试脚本

首先我们需要把线程数和循环次数以及Ramp-Up时间设置为1如下所示:

点击启动按钮进行脚本的测试。

我们点击查看结果树一个一个查看是否有出错的节点。

3.测试结果

1.Oauth认证500并发5分钟,JMeter聚合报告:异常率正常,平均值正常,吞吐量2134.2,详情如下:

2.Oauth认证1000并发5分钟,JMeter聚合报告:异常率正常,平均值正常,吞吐量2003.7,详情如下:

3.Oauth认证1500并发5分钟,JMeter聚合报告:异常率正常,平均值正常,吞吐量1448.7,详情如下:

问题总结

一般来说性能调优有一个前提条件,就是可以让本身产品在正常运行下不会暴露出来的问题,通过这种压力测试的情况将问题扩大化、明显化,这种方式不仅是在为后续的工作排查问题,也能在排查调优的过程中发现产品的不足。

1.问题排查

当压测过程中出现问题时可以通过以下几个方面进行排查:

1.检查产品是否已经停止运行;

2.服务器的内存是否已经满载;

3.检查日志,报错信息是否记录到了日志中,针对于报错问题进行相关的排查;

4.如果在压测的过程中出现了问题但是服务器并没有崩溃,那么可以打开后台日志查看错误时的报错信息,针对于报错信息进行排查;

5.在压测过程中也可以检查mysql,查看是否有sql堵塞的情况,根据堵塞问题进行处理和排查;

6.最后如果都没有问题可以看率减轻并发量,可能是已经达到了服务器的瓶颈。

2.压测调试

1.检查数据库的连接数配置;

2.产品中数据库的连接数调大,保证压测时并发执行的数据量;

3.IDM的用户在线人数计算时间降低,保证在线人数的数量;

4.检查接口是否在对数据库进行读写,如果读写需要进行调整。

3.压测技巧

压力测试是有很多技巧的,例如本次的认证接口的压测,在压测过程中对日志表的读写量是非常大的,那么在每次重新测试时需要清空日志表,保证日志表的量,其次在压测过程中也要考虑到产品本身的使用情况、服务器的存储等等。由于是压测,所以这些东西涨起来是非常快的,可以在每次压测之前针对日志的记录及不必要的日志文件进行清除,保证服务器在一个优质的环境中运行。

1.实时查看IDM日志表,保证日志表的数据量。

2.调整产品日志写入级别。

3.数据库最大连接数和最小连接数调整。

4.对服务器参数进行优化。

5.清除没必要的压测日志记录。

心得总结

通过使用进行JMeter环境压测的过程中学到很多的知识也有了很多的感悟与认知,将自己的心得体会从以下几个方面进行总结。

1.知识收获

JMeter是一个比较强大的测试工具,可以便捷地为测试人员提供自动化测试脚本,减低人员的工作量,但是在业务环节、业务脚本创建、模拟的过程中需要经过全面的考虑、设计,需要针对不同业务场景进行测试设计,通过本次的压测学习中对JMeter有了新的认知,并了解了一些常用的组件并对其进行简单的应用。

2.意识形态

在新工具学习的时候首先要了解工具的用途,通过快速看、相关查的模式,迅速了解工具的使用说明及典型的应用场景;结合工具自身所带样例模式搭建,了解样例运行方式;自己进行基于样例的扩展或者自己学习配置使用,输出相关记录文档及学习心得,避免人工的大量投入及漏测、测错的情况。

3.能力提升

首先在工作中要拓宽自己的理论知识面,加强自己对理论知识的应用,在日常工作中,遇问题多查阅资料,熟悉相关知识,从而进一步地提高自己在工作中解决实际问题的能力。

努力提升业务素质和解决问题的能力,做到加强学习、更新观念,对待日常工作,不要总找借口,要从自身出发,不断加强学习更新观念,不断分析认识提高自己,改变不执行不作为的不良习惯,自动自发地做好本职工作。

在实际工作中,要更加积极主动地向领导请教遇到的问题,并多与同事们进行沟通,学习他们处理实际问题的方法及工作经验。通过多学、多问、多想来不断提高自己的实际工作能力。

本文由@数通畅联原创,欢迎转发,仅供学习交流使用,引用请注明出处!谢谢~

相关推荐

Docker篇(二):Docker实战,命令解析

大家好,我是杰哥上周我们通过几个问题,让大家对于Docker有了一个全局的认识。然而,说跟练往往是两个概念。从学习的角度来说,理论知识的学习,往往只是第一步,只有经过实战,才能真正掌握一门技术所以,本...

docker学习笔记——安装和基本操作

今天学习了docker的基本知识,记录一下docker的安装步骤和基本命令(以CentOS7.x为例)一、安装docker的步骤:1.yuminstall-yyum-utils2.yum-con...

不可错过的Docker完整笔记(dockerhib)

简介一、Docker简介Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,...

扔掉运营商的 IPTV 机顶盒,全屋全设备畅看 IPTV!

其实现在看电视节目的需求确实大大降低了,折腾也只是为了单纯的让它实现,享受这个过程带来的快乐而已,哈哈!预期构想家里所有设备直接接入网络随时接收并播放IPTV直播(电信点播的节目不是太多,但好在非常稳...

第五节 Docker 入门实践:从 Hello World 到容器操作

一、Docker容器基础运行(一)单次命令执行通过dockerrun命令可以直接在容器中执行指定命令,这是体验Docker最快捷的方式:#在ubuntu:15.10容器中执行ech...

替代Docker build的Buildah简单介绍

Buildah是用于通过较低级别的coreutils接口构建OCI兼容镜像的工具。与Podman相似,Buildah不依赖于Docker或CRI-O之类的守护程序,并且不需要root特权。Builda...

Docker 命令大全(docker命令大全记录表)

容器生命周期管理run-创建并启动一个新的容器。start/stop/restart-这些命令主要用于启动、停止和重启容器。kill-立即终止一个或多个正在运行的容器rm-于删除一个或...

docker常用指令及安装rabbitMQ(docker安装rabbitmq配置环境)

一、docker常用指令启动docker:systemctlstartdocker停止docker:systemctlstopdocker重启docker:systemctlrestart...

使用Docker快速部署Storm环境(docker部署confluence)

Storm的部署虽然不是特别麻烦,但是在生产环境中,为了提高部署效率,方便管理维护,使用Docker来统一管理部署是一个不错的选择。下面是我开源的一个新的项目,一个配置好了storm与mono环境的D...

Docker Desktop安装使用指南:零基础教程

在之前的文章中,我多次提到使用Docker来安装各类软件,尤其是开源软件应用。鉴于不少读者对此有需求,我决定专门制作一期关于Docker安装与使用的详细教程。我主要以Macbook(Mac平台)为例进...

Linux如何成功地离线安装docker(linux离线安装httpd)

系统环境:Redhat7.2和Centos7.4实测成功近期因项目需要用docker,所以记录一些相关知识,由于生产环境是不能直接连接互联网,尝试在linux中离线安装docker。步骤1.下载...

Docker 类面试题(常见问题)(docker面试题目)

Docker常见问题汇总镜像相关1、如何批量清理临时镜像文件?可以使用sudodockerrmi$(sudodockerimages-q-fdanging=true)命令2、如何查看...

面试官:你知道Dubbo怎么优雅上下线的吗?你:优雅上下线是啥?

最近无论是校招还是社招,都进行的如火如荼,我也承担了很多的面试工作,在一次面试过程中,和候选人聊了一些关于Dubbo的知识。Dubbo是一个比较著名的RPC框架,很多人对于他的一些网络通信、通信协议、...

【Docker 新手入门指南】第五章:Hello Word

适合人群:完全零基础新手|学习目标:30分钟掌握Docker核心操作一、准备工作:先确认是否安装成功打开终端(Windows用户用PowerShell或GitBash),输入:docker--...

松勤软件测试:详解Docker,如何用portainer管理Docker容器

镜像管理搜索镜像dockersearch镜像名称拉取镜像dockerpullname[:tag]列出镜像dockerimages删除镜像dockerrmiimage名称或id删除...