对于产品和技术型公司来说产品是根本,产品精品化是快速推进项目的重要指标,因此产品要体系化。我们公司产品已经形成了体系化,公司产品在一个个项目中不断迭代升级,逐渐成熟稳定,这对于我们公司来说是一个重要突破,也是以后发展的重要环节。
产品是否是精品要从很多角度评价,需要从功能性、易用性、扩展性、稳定性、高性能等不同维度考察,其中高性能是检测产品运行是否流畅的指标,产品在测试阶段压力性能测试是重要环节。最近在完善集成底座项目流程,进行IDM压力测试,这就需要外围工具JMeter,本文既是通过JMeter对监控提醒功能性能的检验的介绍,也是对JMeter的介绍。IDM产品叫做统一身份管理平台,主要用于解决企业5A功能的需求,5A主要包括:Account账号管理、Authentication认证管理、Authorization授权管理、Audit审计管理、Application Control应用管控。
IDM身份管理平台满足对企业信息系统的统一用户管理、统一身份认证、统一授权管理以及安全审计的要求,能够实现各业务系统的统一登录和集中访问,实现用户身份和权限的统一认证与授权管理,为企业不同的业务系统提供统一的用户管理和认证服务。IDM的功能架构主要是从5A管控的角度出发总结的架构模型,5A分别是统一认证、统一授权、统一账户、统一审计、统一应用管控,其中统一应用管控包含对各个应用系统账户的下发情况的管控(统一账户)、对当前业务系统的用户认证情况管控(统一认证)以及对当前系统的权限资源同步监控管控(统一权限)。本次性能测试的测试策略是使用JMeter结合IDM平台,通过模拟IDM统一认证登录跳转的运行,测试业务场景的事务响应时间和相关服务器的资源消耗情况,为客户提供一份完整的测试报告,本篇报告着重对云平台性能进行压测和记录结果,从并发量、稳定性两方面测试,确保功能服务达到实际生产标准。通过上述描述,相信大家已经知道产品性能的重要性,在开发时不仅需要注意开发规范,产品性能测试也是必须要做的事情,开发功能要进行一次压测,压测需要工具,而工具就要用JMeter。注:在安装JMeter之前,请先检查下电脑有没有装JDK:开始→运行→然后输入cmd→进入命令行界面,输入java -version , 出现以下信息就是此电脑已安装了JDK。
http://JMeter.apache.org/download_JMeter.cgi
1.首先在JMeter官网下载一个压缩包,解压放到自己创建的文件夹路径下。2.然后点击JMeter目录下bin文件夹里的JMeter.bat就可以打开JMeter,具体最后打开的界面如下:
当出现这个页面,就说明JMeter环境已经搭建好了。1.GUI启动(主要用于编写,调试脚本)双击JMeter.bat启动界面模式。
-n 非 GUI 模式→在非GUI模式下运行JMeter;-t 测试文件→要运行的JMeter测试脚本文件;-P 代理端口→设置JMeter使用的代理主机的端口号。JMeter -n -t test1.jmx -l logfile1.jtl -H 192.168.1.1 -P 8080
a)编辑apache-JMeter-3.1\bin下JMeter.properties文件,多台ip用逗号隔开;
b)复制一份JMeter应用到配置ip的机器上,并启动apache-JMeter-3.1\bin下JMeter-server.bat作为slaver;



1.测试计划:是使用JMeter测试的开始,是其他元件的容器;通常根据项目来为测试计划重命名。2.用户定义的变量:可以赋予动态获取值,使用${变量名} 引用。3.线程组:用来设置发送请求的用户数,即并发数,还有线程的时间间隔、循环次数。4.取样器(HTTP请求):填写HTTP请求的协议,方法以及参数。5.监听器:负责收集测试结果,并给出结果显示方式,常用查看结果树和聚合报告。6.控制器:结合采样器sampler使用,可以模拟复杂的请求序列;常见的分逻辑控制器,循环控制器以及事务控制器。7.断言:用来判断响应结果是否如用户所预期的,自动化测试接口,基本上都要加断言来判断响应结果。8.配置元件:主要是参数化中用到CSV Data Set Config。9.前置处理器:负责在生成请求之前完成工作,常用来修改请求设置。10.后置处理器:负责在生成请求之后完成工作,常用来处理响应数据,主要是在动态关联中用到后置处理器的正则表达式。12.参数化设置,两种类型:一种是利用函数助手中的_Random 函数进行参数化设置;另一种利用配置元件中的CSV Data Set Config 进行参数化设置。13.动态数据关联:在HTTP 请求的参数中会遇到一些参数的值是从服务器响应返回的动态数据,这些数据需要进行关联才能使得下一次请求能成功地被服务器接收。在JMeter中,采用正则表达式提取器来获取这些动态数据。JMeter是一款非常流行和受欢迎的开源性能测试工具,像LoadRunner一样,它也提供了一个利用本地Proxy Server(代理服务器)来录制生成测试脚本的功能。JMeter测试我们首先要准备测试所需要的数据,账户信息如下:
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”。1.[view Resuls Tree]中可查看每个线程的运行情况,包括请求和返回两部分。绿色的代表线程运行成功,红色的代表线程运行失败。
3.可在相应数据体中查看线程运行失败的原因,查看是否报错。
3.90% Line:所有线程中90%的线程响应时间都小于xx的值。7.Throughput:吞吐量。吞吐量以”requests/second、requests/minute、requests/hour”来衡量。CAS认证是传统的CAS拦截认证,通过页面的强制拦截跳转,实现统一认证的效果,但是这种访问具有侵入性,非常不友好,并且一部分企业除了IDM本身的登录情况并没用到CAS的登录认证。1.AuthenticationFilter:当用户访问应用时首先会被AuthenticationFilter拦截,判断assertion是否为空,如果为空会跳转到登录页面。
2.Cas20ProxyReceivingTicketValidationFilter:在登录页面输入用户名密码提交表单进行CAS认证返回ticket票据。被Cas20ProxyReceivingTicketValidationFilter拦截,通过TicketValidator中的validate方法校验ticket票据是否合法。3.HttpServletRequestWrapperFilter:ticket票据校验通过后HttpServletRequestWrapperFilter会将用户信息放到AttributePrincipal对象中,然后将AttributePrincipal对象放到session中。4.XXXUserCasFilter:应用中扩展UserCasFilter拦截器,从session中获取AttributePrincipal对象实现登录认证过程。首先我们需要把线程数和循环次数以及Ramp-Up时间设置为1如下所示:


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,详情如下:
Oauth2.0接口是IDM集团认证所用的接口,如果业务系统在进场时不需要子公司、分公司进行访问,那么他们可以进行这个接口的认证对接。所以在对接之前需要明确业务系统是通过哪种方式来与我们对接的。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,返回至用户登录成功。首先我们需要把线程数和循环次数以及Ramp-Up时间设置为1如下所示:

1.Oauth认证500并发5分钟,JMeter聚合报告:异常率正常,平均值正常,吞吐量2134.2,详情如下:
2.Oauth认证1000并发5分钟,JMeter聚合报告:异常率正常,平均值正常,吞吐量2003.7,详情如下:
3.Oauth认证1500并发5分钟,JMeter聚合报告:异常率正常,平均值正常,吞吐量1448.7,详情如下:
一般来说性能调优有一个前提条件,就是可以让本身产品在正常运行下不会暴露出来的问题,通过这种压力测试的情况将问题扩大化、明显化,这种方式不仅是在为后续的工作排查问题,也能在排查调优的过程中发现产品的不足。当压测过程中出现问题时可以通过以下几个方面进行排查:3.检查日志,报错信息是否记录到了日志中,针对于报错问题进行相关的排查;4.如果在压测的过程中出现了问题但是服务器并没有崩溃,那么可以打开后台日志查看错误时的报错信息,针对于报错信息进行排查;5.在压测过程中也可以检查mysql,查看是否有sql堵塞的情况,根据堵塞问题进行处理和排查;6.最后如果都没有问题可以看率减轻并发量,可能是已经达到了服务器的瓶颈。2.产品中数据库的连接数调大,保证压测时并发执行的数据量;3.IDM的用户在线人数计算时间降低,保证在线人数的数量;4.检查接口是否在对数据库进行读写,如果读写需要进行调整。压力测试是有很多技巧的,例如本次的认证接口的压测,在压测过程中对日志表的读写量是非常大的,那么在每次重新测试时需要清空日志表,保证日志表的量,其次在压测过程中也要考虑到产品本身的使用情况、服务器的存储等等。由于是压测,所以这些东西涨起来是非常快的,可以在每次压测之前针对日志的记录及不必要的日志文件进行清除,保证服务器在一个优质的环境中运行。通过使用进行JMeter环境压测的过程中学到很多的知识也有了很多的感悟与认知,将自己的心得体会做出以下几个方面的总结。JMeter是一个比较强大的测试工具,可以便捷地为测试人员提供自动化测试脚本,减少人员的工作量,但是在业务环节、业务脚本创建、模拟的过程中需要经过全面的考虑、设计,需要针对不同业务场景进行测试设计,通过本次的压测学习中对JMeter有了新的认知,并了解了一些常用的组件并对其进行简单的应用。在新工具学习的时候首先要了解工具的用途,通过快速看、相关查的模式,迅速了解工具的使用说明及典型的应用场景;结合工具自身所带样例模式搭建,了解样例运行方式;自己进行基于样例的扩展或者自己学习配置使用,输出相关记录文档及学习心得,避免人工的大量投入及漏测、测错的情况。首先在工作中要拓宽自己的理论知识面,加强自己对理论知识的应用,在日常工作中,遇问题多查阅资料,熟悉相关知识,从而进一步地提高自己在工作中解决实际问题的能力。努力提升业务素质和解决问题的能力,做到加强学习、更新观念,对待日常工作,不要总找借口,要从自身出发,不断加强学习更新观念,不断分析认识提高自己,改变不执行不作为的不良习惯,自动自发地做好本职工作。在实际工作中,要更加积极主动地向领导请教遇到的问题,并多与同事们进行沟通,学习他们处理实际问题的方法及工作经验。通过多学、多问、多想来不断提高自己的实际工作能力。