性能测试实战

 

记录2018年初,和平台组开发同事开展执行的一次性能测试计划过程。

 

准备阶段

1.公共区域

图一:配置头信息

图二:银行项目每笔交易都需要唯一的交易流水,通过"${ }"可以引用函数、变量或计数器

图三:每个接口的请求内容均由Comm_req、Sys、Input三部分组成,Input区属于业务区,Comm_req区除了交易流水其他字段基本固定,将Comm_req作为变量方便后续调用

图四:http请求默认值设置,eval()函数引用包含变量的变量

图五:响应文本断言,交易成功的标志是"status":"S"和"erorcd":"0000"

图六:将请求报文区的三部分Comm_req、Sys、Input拼接成变量request,eval()调用

 

2.业务区域

图一:以开客户号交易举例,添加线程组,设置为单线程

图二:录入请求报文的input区内容,存在两个需要参数化的变量contact_content1和contact_content2得从外部引用

图三:定义变量contact_content1

图四:定义变量contact_content2

图五:给交易的线程组添加http请求,jmeter自动读取公共区域http请求默认值,每个线程组下必须有请求

图六:提取响应结果赋值给变量cust_no,方便后续交易使用

图七:确认响应结果提取成功

3.验证请求结果

图一:请求参数中需要参数化的字段,通过函数、变量或计数器均已正常生成

图二:响应结果包含请求成功的交易码和标识

 

改进:使用Test Fragment模块化脚本构建

 

执行测试

 

总结

1.点击jmeter启动按钮,请求发不出去,查询结果树没有响应

原因:服务没有注册或启动,测试过程中存在清库等等,服务有时没有启动

 

2.4400交易需要已激活的卡号,得在数据库改状态,可以通过jmeter发送jdbc请求,jdbc连接配置中的变量名与jdbc请求中的变量名一致

注:配置过程中尾部一定不要留空格,否则可能报错:Cannot create PoolableConnectionFactory (Access denied for user 'root '@'localhost

 

3.用计数器生成003301开头的20位卡号,若使用starting value 为1,number format为00330100000000000000,卡号的头两位0会省略掉

解决办法:starting value为00330100000000000001,number format为00000000000000000000

 

4.混合压测中,可能会因为get("prcscd")而随机取交易码,这样会导致不能按要求实现混合并发

解决办法:将BeanShell PreProcessor添加到每个线程组中并取得具体的交易码,String prcscd = vars.get("prcscd交易码")

 

5.监控插件使用

参看:http://www.cnblogs.com/Ryana/p/8377356.html

 

6.慢SQL查询

通过xshell登陆mysql所在的服务器

开启慢查询:set global log_slow_queries = on

查询/设置慢查询参数(查询时间单位:sec):show global  variables like 'long_query_time';     set global long_query_time =1; 

查询慢查询存放日志:show variables like 'slow_query_log_file';

 

eg:4400交易慢查询查找

阀值(ms)

执行时间(ms)

位置(sql)

10

35

TabDpBusiMain.dpa_account.Entity.selectByIndex_odb1

10

  34

TabDpBusiMain.dpa_card.Entity.selectByIndex_odb1

10

  39

DpAcctQuery.selSubAcctRelateRecord

10

  42

TabDpInterest.dpa_interest_rate.Entity.selectByIndex_odb1

10

  28

DpFroze.selWholeBalFrozeSource

10

  36

TabDpProtocol.dpb_withdrawl_protect.Entity.selectByIndex_odb4

10

  39

DpAcctQuery.selSubAcctRelateRecord

 结果定位

1). DpAcctQuery.selSubAcctRelateRecord [命名sql join on 联表查询]

更多分析:http://blog.jobbole.com/107256/

 

7.GC指标及调优:

相关知识学习JVM-GC原理JVM-GC收集器监控GC诊断GC

Minor GC执行迅速(50毫秒以内)

Minor GC执行不频繁(间隔10秒左右一次)

Full GC执行迅速(1秒以内)

Full GC执行不频繁(间隔10分钟左右一次)

【NewRatio=2】老年:新生=2:1

【SuvivorRatio=6】Eden:Survivor=6:1

 注:括号内容并非不可变,需要考虑具体的服务

打开appCtrl文件查看CMS收集器参数,开发同事提醒这些参数得小心点改,不然没什么效果,小白弱弱的表示不会改。。。

性能测试原则

 

posted on 2018-05-09 15:50  Ryana  阅读(2471)  评论(2编辑  收藏  举报