• 性能测试实战


    记录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收集器参数,开发同事提醒这些参数得小心点改,不然没什么效果,小白弱弱的表示不会改。。。

    性能测试原则

  • 相关阅读:
    Python学习——模块的基本知识
    Python学习-软件目录结构规范
    路径追踪的理论与实现:复合重要性采样
    路径追踪的理论与实现:渲染方程
    记一个C++随机数导致的bug
    Gamma矫正的原理和实现
    聊一聊Python的sort函数
    BVH树的构建与遍历
    Cocos动画系统
    Cocos事件分发系统
  • 原文地址:https://www.cnblogs.com/Ryana/p/8250385.html
Copyright © 2020-2023  润新知