• 记录一次Jmeter性能测试


    一.引言

    之前有总结过如何写Java请求测试用例类,写完测试脚本调通之后,信心满满地以为我准备好可以开始性能测试了。结果在评审测试计划的时候,当即被项目组狠狠的扇了一耳光,各种不确定的点:性能指标不明确;测试场景不合理;测试计划没有交代清楚时间、资源和责任人等等。会后被召唤到老大办公室一通点拨,终于理清了思路,从头开始吧。那么,性能测试一般都有哪几个步骤呢,这里主要根据自己的经验进行的梳理:

    1.需求调研和分析:明确测试对象、测试范围、测试目标

    2.测试计划:测试场景设计,测试时间计划,测试产出及通过标准

    3.测试准备:测试环境搭建,测试脚本及数据准备

    4.测试执行:测试结果分析(日报的形式发送项目组),性能调优

    5.测试报告:完整的测试报告

    二.正文

    1.需求分析

    a. 如果需求明确给出性能指标,并经项目组评估是合理的,则按需求指标进行测试,测试结果达到预期指标,则测试通过;

    b. 如果没有明确的性能指标,则根据历史数据或类似系统,由项目组评估出性能指标;

    c. 以上2点都不满足,则可以进行峰值测试或稳定性测试,测出系统的性能瓶颈,评估是否达到预期。

    2.测试计划

    测试计划中除了例行的项目概述外,重点要明确测试环境、测试目标(测试通过条件)、测试场景、测试时间人员等。

    a.测试环境:生产环境、准生产环境 or 测试环境

    b.测试目标:这里要明确2点,

      一是测试分几个阶段及各个阶段的优先级,如:

    1 )应用的性能满足性能需求指标即可 优先级高

    2 )应用的最高负载指标(TPS趋于稳定)优先级中

    3 )应用的最大压力指标(宕机并发-1) 优先级低

      二是具体的性能指标,如:

           100个并发情况下满足以下性能指标:
                          90%的响应时间:4秒
                          CPU最高平均值:小于80%
                          堆内存GC后平均剩余70%
                          GC间隔时间:15秒以上

    c.测试场景设计:包括每秒钟新增并发数,并发持续时间,还可以结合业务场景对请求进行参数化等。

    d.测试人员和时间:这个就是列个一般的schedule就行

    3.测试准备

    a. 测试环境的搭建,如果是已投产的生产或准生产环境,则测试版本的应用包部署完成即可。

    b. 测试数据准备,包括测试脚本的编写和调试,测试请求参数的准备等。

    4.测试执行

    a.如何监控服务器性能(参考:http://www.cnblogs.com/yangxia-test/p/4019250.html

    这里采用 JmeterPlugins插件:JMeterPlugins-Standard-1.2.0与ServerAgent-2.2.1

    将JMeterPlugins-Standard-1.2.0libextJMeterPlugins-Standard.jar包复制到JMeter的lib目录下面的ext目录下面,重新启动Jmeter

    可以在测试计划中添加该插件提供的线程组了,界面和jmeter自带的线程组有所不同,可以方便地设置并发的场景:总并发数、线程加入,线程退出机制等。

    image

    image

    另外,可以通过该插件提供的各种监视器来监控服务器的cup、networkIO、tps、聚合报告等数据:

    image

    但是,要监控服务器的性能,就要在服务器端运行下ServerAgent-2.2.1这个东西了,将它拷贝到服务器磁盘的任意位置,运行对应操作系统的脚本来启动它即可。

    当然,如果是运行在JVM上的应用,也可以通过Jdk自带的jconsole或jvisualvm(windows系统)来监控服务器端JVM的性能。

    b.采用分布式测试

    在大数据量和高并发的情况下,客户端压力机自身的性能往往会影响测试结果。此前,在测试的过程中,就出现客户端压力机JVM内存溢出和自身networkIO所限,TPS一直上不去的情况。采用多台客户机进行分布式并发,可以更准确地测出系统的性能情况(当然,是否采用分布式还要看实际的业务需求和应用场景)。

    将测试客户端依赖的jar包拷贝到所有客户机Jmeter安装路径的lib下,并启动jmeter-server(Linux系统)或jmeter-server.bat(windows系统)。

    image

    PS:这里在测试过程中遇到2个小问题:

    1. 所有客户机要保证jdk版本一致,否则测试Java请求的时候会报错

    2. Linux下的jmeter-server脚本无法启动(由于时间关系,没有去细究这个问题,待进一步验证)

    客户机都启动好之后,在控制机中修改配置文件jmeter.properties中的remote_hosts,添加所有压力机的IP,默认端口是1099,也可以自己指定。

    image

    所有的准备工作都做好之后,就可以在控制机上打开Jmeter编写好测试脚本,进行测试了,通过远程启动按钮来启动全部客户机:

    image

    c.测试结果分析

    同一个场景,可以通过并发数的增加来获得一组响应数据:

    CPU随并发数的变化

    JVM内存随并发数的变化

    TPS随并发数的变化

    通过分析测试结果,来判断应用的性能是否达到预期指标。如果测试未达到预期指标,则需要分析测试过程中的各个环节对测试结果的影响,排除客户机性能,网络IO等外部因素后,最终确定代码优化方案。优化代码后,重新测试。

    5.测试报告

    测试报告主要包括:项目概述、测试环境、测试资源及时间、测试策略、测试场景、测试数据分析、测试结论及风险反馈等。

  • 相关阅读:
    只知道参数名,要从对象里面获取值,可以使用反射机制获取
    mysql创建存储过程,批量建表分表00到99
    讲讲个人对于系统重构的一些心得
    浅谈线程runnable和callable的使用及区别
    springboot项目线程使用2
    springboot项目线程使用
    推荐一个算法网站
    Centos7.3安装和配置jre1.8转
    向java高级工程师和项目经理的道路进发【转】
    linux 查看日志命令
  • 原文地址:https://www.cnblogs.com/beetle-shu/p/4124783.html
Copyright © 2020-2023  润新知