性能测试指导规范_第1页
性能测试指导规范_第2页
性能测试指导规范_第3页
性能测试指导规范_第4页
性能测试指导规范_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、后台性能测试指导规范文档信息文档名称测试指导规范文档编号创建日期部门名称信息技术部测试组修订文档历史记录日期版本说明修订人目录1. 测试工具及安装配置31.1. JDK31.2. loadrunner1131.3. DataFactory41.4. Nmon41.5. Jvisualvm52. 测试准备工作72.1. 确认测试范围72.2. 梳理各接口后台依赖逻辑,为压测构造数据做准备72.3. 确认测试环境,规避压测产生的影响82.4. 编写测试脚本,构造测试数据82.5. 构造测试数据123. 测试执行134. 测试进度反馈及测试报告144.1. 测试日报144.2. 最终测试报告145.

2、 测试脚本及测试文档归档146. 附录151. 测试工具及安装配置1.1. JDKLoadrunner JAVA类型脚本需要,在测试机上安装。由于受LR版本限制,只能使用1.6版本,通过官网下载或者内部FTP获取01/性能测试工具/jdk-6u39-windows-i586-.rar。1.2. loadrunner11性能测试工具,在测试机上安装。通过官网下载或者内部FTP获取01/性能测试工具/loadrunner-11.zip,用户名和密码都是mime。安装方法网上很多,可以百度,安装完后需要破解并发数限制,请从FTP下载补丁ft

3、p:/01/性能测试工具/lr通用破解.rar,并按说明操作。v 添加java环境配置打开Virtual User Generator,在Vuser菜单下选择Run-time Settings,打开界面如下在classpath里面添加jdk的配置如图,另外测试dubbo接口需要添加封装的jar包dubbo-GenericService_fat.jar,可以从FTP下载01/性能测试工具/dubbo-GenericService_fat.jar。Java VM中指定正确的JDK,如下图1.3. DataFactory大批量数据构造工具,在本地安装

4、。可以通过官网下载,不过需要破解,可以通过FTP下载01/性能测试工具/Quest DataFactory v5.6 英文正式版(含教程).zip,有安装教程。此工具可以操作sqlserver和mysql数据库,对于msyql数据库,需要安装odbc驱动,驱动可以通过FTP下载01/性能测试工具/mysql-connector-odbc-5.1.13-win32.msi,连接mysql请参考文档1.4. NmonLinux服务器资源监控工具,在被测应用服务器及数据库服务器上安装。Ubuntu系统直接在服务器上使用apt-get ins

5、tall nmon安装,需要root权限。其他系统可以到官网下载页面安装完,输入nmon,打开如下界面表示安装成功1.5. Jvisualvm查看JVM相关信息,测试机上安装。该工具JDK自带,但是需要通过jstatd或者jmx方式连接。v 在被测应用服务器上开启jstatd agent进入/$java.home/binVi jstatd.all.policy写入如下内容grant codebase file:$java.home/./lib/tools.jar permission java.security.AllPermission; ;启动nohup jstatd -J-Djava.s

6、ecurity.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=68 -p 8888 &v 在被测应用服务器上添加JMX参数只需要在TOMCAT_HOME/bin/找到catalina.sh 加上以下参数,重新启动tomcat就可以了:JAVA_OPTS=$JAVA_OPTS -Djava.rmi.server.hostname=68-Dcom.sun.management.jmxremote.port=8889-Dcom.sun.management.jmxremote.ssl=false-D

7、com.sun.management.jmxremote.authenticate=false本地启动Jvisualvm右击远程 选择添加远程主机:如果重新指定了jstatd端口,选择高级设置修改端口,如下图:如果同时配置了JMX,可以在添加JMX连接如下图:添加后如图所示:2. 测试准备工作2.1. 确认测试范围整理需要压测的接口,填入附件1-测试场景及进度反馈表,见下面示例。2.2. 梳理各接口后台依赖逻辑,为压测构造数据做准备v 接口比较独立,数据获取和更新都是直接操作数据库,该类接口只需要列出受影响的数据库及表v 接口不独立,依赖其他接口获取或更新数据,这里的其他接口包括本系统和外部系

8、统的接口,该类接口需要列出依赖的所有接口及依赖关系,并列出最终受影响的数据库及表。2.3. 确认测试环境,规避压测产生的影响v 选定压测环境,确认测试服务器的资源信息、被测应用版本信息、数据库版本信息,tomcat、dubbo、redis等中间件的JVM参数、最大线程数、最大连接数等配置。v 分析压测对同服务器上其他应用以及数据库产生的影响,周边关联业务的影响,提前做好规避措施,比如提前通知可能受影响的周边应用,选定固定时间段进行压测,错开业务测试高峰,定期清理应用日志,防止应用服务器磁盘空间不足,数据库服务器也需要考虑。v 对于调用外部的接口(公司外),要确认压测环境上,该接口是否收费,大批

9、量数据请求是否会对对方产生影响。2.4. 编写测试脚本,构造测试数据根据测试接口类型,编写相应的LR测试脚本,主要分为HTTP类型的C脚本和DUBBO类型的java脚本。v C脚本示例如下=vuser_init()#define TEST_ENV sit /测试环境sit或uatif (TEST_ENV = sit) lr_save_string(sit, env);else if (TEST_ENV = uat) lr_save_string(uat, env);elselr_error_message(TEST_ENV测试环境选择错误,必须为sit或uat);lr_abort();web_

10、save_timestamp_param(tStamp, LAST);/生成时间戳tStampreturn 0;/vuser_init部分Action()web_reg_save_param_ex(ParamName=sign,LB=sign:,RB=,SEARCH_FILTERS,LAST);web_custom_request(get_sign,URL=:18181/getsign,Method=POST,TargetFrame=,Resource=0,Mode=HTTP,Referer=,EncType=application/json,RecContent

11、Type=application/json,Body=phone:phone,verifyCode:5555,smsSerialNo:8,timestamp:tStamp,LAST);web_add_header(mmChannel,mmdApp_android);web_add_header(mmClientId,364d25f495bd429ef8d550f04);web_add_header(mmAppId,2f152d08eae8f96d8139d0269fa05bb8);web_add_header(mmRid,bfcbae613dbc0f68337acdec.3ecfc4609ae

12、0c1f33d263b5d4);web_add_header(mmDeviceId,8653);web_add_header(mmAppVer,2.0.0.);web_add_header(mmTs,63);web_add_header(Content-Type,application/json; charset=utf-8);web_add_header(Accept-Encoding,gzip);lr_start_transaction(phoneLogin接口);web_reg_save_param_ex(ParamName=response,LB=,RB=,SEARCH_FILTERS

13、,LAST);web_reg_save_param_ex(ParamName=accessToken,LB=accessToken:,RB=,SEARCH_FILTERS,LAST);web_reg_save_param_ex(ParamName=return_code,LB=code:,RB=,SEARCH_FILTERS,LAST);web_custom_request(phoneLogin,URL=https:/envMethod=POST,TargetFrame=,Resource=0,Mode=HTTP,Referer=,EncType=application/json,RecCon

14、tentType=application/json,Body=phone:phone,verifyCode:5555,smsSerialNo:8,timestamp:tStamp,sign: sign,LAST);if(strcmp(lr_eval_string(return_code),000)=0)lr_output_message(lr_eval_string(获得phone:phone);lr_output_message(lr_eval_string(获得accessToken:accessToken);lr_end_transaction(phoneLogin接口, LR_PASS

15、);elselr_convert_string_encoding(lr_eval_string(response),utf-8,gb2312,str);lr_output_message(lr_eval_string(服务器返回:str);lr_end_transaction(phoneLogin接口, LR_FAIL);return 0;/action部分vuser_end()return 0;/vuser_end部分=v Java脚本示例如下vuser_init和vuser_end不用管Actions代码=/* * LoadRunner Java script. (Build: _buil

16、d_number_) * * Script Description: * */import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import com.alibaba.dubbo.demo.consumer.DubboServiceFactory; import .ut

17、il.MapTools;import .util.TimeTools;import lrapi.lr; import lrapi.web;public class Actions DubboServiceFactory client; public int init() throws Throwable client =DubboServiceFactory.getInstance(); return 0;/end of init public int action() throws Throwable /接口入参是自定义类型 String parameterTypes = cn.mime.c

18、redit.limit.facade.param.CreditUseParam ; /接口jar中入参类型路径 String json = transNo:,memberId:405,categoryId:2,useLimit:232; lr.start_transaction(useCreditLimit); Object result = client.genericInvoke(cn.mime.credit.limit.facade.business.IDubboCreditLimitBusiness, useCreditLimit, 1.0.0, parameterTypes, new

19、 Object MapTools.parseJSON2Map(json) );/方法入参为接口名、接口方法、接口版本号、入参类型、入参对象 System.out.println(result); lr.end_transaction(useCreditLimit, lr.PASS); /接口入参是单个Integer 类型 String parameterTypesInt = java.lang.Integer; lr.start_transaction(getInsuranceInfo); Object result2 = client.genericInvoke(cn.mime.ma.api

20、.service.InsuranceService, getInsuranceInfo, 1.0, parameterTypesInt, new Object ); System.out.println(result2); lr.end_transaction(getInsuranceInfo, lr.PASS); /接口入参是多个基本类型 String parameterTypes3Str =java.lang.String,java.lang.String; lr.start_transaction(isOnline); Object result3 = client.genericInv

21、oke(cn.mime.ma.api.service.MerchandiseService, isOnline, , parameterTypes3Str, new Object 1, 1); System.out.println(result3); lr.end_transaction(isOnline, lr.PASS); /对接口返回结果进行断言 HashMap mapResult = (HashMap)result3; /System.out.println(mapResult.get(code); /code为接口返回结果中关键字段名,根据字段名获取值然后判断值是否正确,如resul

22、t3=message=order existed, data=null, class=cn.mime.credit.trade.audit.facade.domain.CTAResponse, code=2001 if (result3!=null&!result3.equals() if (mapResult.get(code).equals(000) ) lr.end_transaction(isOnline, lr.PASS); else lr.end_transaction(isOnline, lr.FAIL); else lr.end_transaction(isOnline, lr

23、.FAIL); return 0; /end of action public int end() throws Throwable return 0; /end of end=2.5. 构造测试数据v 需要依赖步骤2中的接口后台逻辑分析,数据量根据测试并发数和测试时间来评估,要考虑系统和数据库层面的缓存机制,如查询类接口,尽量使用不同数据,模拟真实场景。v 有些前置数据是接口共用的,比如登录token,这些数据可以提前构造,根据后台定义的更新周期,定期更新。v 有些接口会对入参进行校验,比如手机验证码、手机号等,在对业务功能无影响的情况下,可以由后台提供跳过逻辑,如果不对验证码校验、手机号段添加白名单等。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论