zoukankan      html  css  js  c++  java
  • 性能测试浅谈

    性能测试的目的,简单来说是响应时间,吞吐量,稳定性,容量等;

    在实际工作中,性能测试一般会从以下几个方面着手:

    1.基准测试,单一用户 或 无用户情况下的测试;目的:a.查看结果是否符合预期;b.建立可度量的参考标准,为后续调优等提供对比参考;

     

    2.日常压力测试,基准测试通过后,进行较小压力测试;如系统平均访问量,平均在线人数,每日完成事务数等;目的:发现一些较表面性能问题并处理;

     

    3.峰值压力测试,在日常压力测试通过后,进行更大压力测试;

    此压力一般为未来几年后的预期压力,可根据历史日均压力,日最高压力等信息,估算出未来几年的日均及日最高压力;

    再通过一些常用估算法,如二八原则(80%的工作,在20%的时间内完成),将日压力转化为峰值压力(可预期的最大负载压力);目的:系统满足未来几年增长的压力;

     

    4.容量测试,验证系统满足预期压力后,还需要知道系统能承受的最大压力,即容量;

    通过增大压力(如用户),查看吞吐量失败率,利用率,响应时间;

     

    5.稳定性测试,为了缩短工期,可以将预期1天完成的事情,2h完成(二八原则),那么连续测试10h,相当于测试5天;主要监控各种性能指标是否平稳;

     

    性能测试阶段

    从实际层面来看,测试过程一般分为这么几个阶段:

    1.测试确认  理解被测系统(如海量并发,数据也是海量的,但基本都是简单查询,如5份蛋糕,2个人同时购买,如何处理?如果同时10个人同时购买,又如何处理?),寻找测试点,确定测试范围,测试环境等,

       一些重要信息需要同需求人员,设计人员讨论确认,如用户最常用哪些功能,最关注哪的性能,程序上哪可能是压力点,哪些数据需模拟到真实的量级;

     

    2.明确通过标准  客户期望一般是页面上的响应时间(满足多少人同时在线,一分钟能处理多少订单,用户最大等待时间是几s?);

      业务需求是系统的处理能力,一般为吞吐量或TPS(每秒完成事务数);一般是同需求人员,业务人员,技术负责人一起制定;

     

    3.测试设计 主要从上面提到的几个方面进行分析,针对系统的特点设计出合理的测试场景(基本流,备选流),只有知道真实用户是如何对系统产生压力,才可以设计出有代表性的压力测试场景。这就涉及到很多信息,如用户群的分布、各类型用户用到的功能、用户的使用习惯、工作时间段、系统各模块压力分布等(理想的下单:登录,查看商品,付款;实际上可能是这样的登录(一次登录不进去,重复多次),查看商品(a,b),付款(成功,提示无货))。 

      测试数据的设计也是一个重点且容易出问题的地方。生成测试数据量达到未来预期量只是最基础的一步,需要考虑的是数据的分布是否合理,需要仔细的确认程序中使用到的各种查询条件;

     4.测试环境准备 部署测试环境;

     5.测试执行、监控   准备测试脚本,执行之前设计好的用例,监控收集需要的数据,出现问题,保留相关日志;

     6.问题分析定位、调优  发现问题或性能指标达不到预期,及时的分析定位,处理后重复测试过程;

     7.性能报告 将测试过程中记录的各种数据汇总成报告,将各方面需要的结果清楚的展现出来;

     

    性能测试最难做好的,是如何能够有效的模拟真实世界的压力,即系统使用模型;其次是性能问题的分析、定位、调优;

    并发用户:线程组线程;

     HPS 每秒点击数

    TPS 服务器每秒处理的事务数;一个事务是指客户机向服务器发送请求然后服务器作出反应的过程;客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数;(评价系统性能)

    RPS 客户端每秒发出的请求数;

    QPS 每秒查询数;

    响应时间(RT):从发起请求到完全接收到应答的时间消耗;

    问题1:什么是压力测试?

    jmeter 增加线程数,循环次数等;

    实际上是通过RPS来向服务器施压;rps每秒请求数;它由并发数和响应时间决定;并发数过低,可能达不到预期的rps,并发数过高,可能把服务器压垮;

    从用户角度考虑,rps就是每秒的点击数;

    从客户端考虑,rps就是每秒向服务端发出的请求数;

    使用工具的目的是通过线程数,循环次数,模拟出和用户每秒点击相匹配的压力值,向服务器施压,得到性能数据;

    问题2:jmeter怎么调节压力?即调节rps,jmeter中无rps的监听器;单个请求,hps=rps;

    ramp-up时间(秒),表示启动所有线程(线程数*循环次数)需要的时间;

    如下图,20s启动100*1个线程,那么每s启动5个线程,每个线程启动间隔时间为200ms,20/100=0.2s/线程=200ms/线程;换个理解方式,它表示了我们预期给服务器的压力就是每秒钟发送5个请求,也就是说预期RPS=5/s;

     

     

     

     

     

     如下图,20秒启动100个线程并循环5次;相当于20s启动500个线程,每秒启动25个线程;rps=25/s;观察聚合报告,jmeter在20s内用100个线程发起来500次请求;

     

     

     

     

     

     

    预期rps=线程数 * 循环次数 / ramp-up period(s),假如预期rps值过大(如,线程数100,循环次数100,ramp-up periond 20),则最终rps达不到该值;

     问题3:jmeter中throughput到底是什么?

    throughput是用来衡量吞吐量的指标,通常由TPS和QPS来表示;

    TPS表示每秒通过的事物数,QPS表示每秒查询接口数;

    jmeter中有很多吞吐量的元件,如,吞吐量控制器、常数吞吐量定时器、Transactions per Second、 Throughput Shaping Timer等;

    如下,吞吐量控制器,无论线程组是如何设置线程数和循环次数,该控制器下某请求数控制在30%;

     常数吞吐量定时器;

    下图,聚合报告中的吞吐量表示无限迭代下的业务吞吐量TPS,大约是62/s。意思是每秒响应完成的请求时62;

     所有活动线程,目标吞吐量360请求/分钟,也就是6/s;接下来运行的结果可以看到,无论我们预期的吞吐量有多大,实际TPS都约为6/s;

     

     

     Throughput Shaping Timer

    它是来控制RPS的,也就是每秒请求数;如下图,需要在60s内将RPS均匀的从1提到100;jmeter运行时间取线程组运行时间 与 Throughput Shaping Timer的duration时间最短时间;

     

     

    越努力,越幸运!!! good good study,day day up!!!
  • 相关阅读:
    nginx 负载均衡
    nginX 安装 启动
    nginx 简介
    使用ASDM 管理 ciscoASA设备
    OSPF配置实验(一)
    VRRP
    HSRP 详解
    Rip 动态路由协议
    配置ASA防火墙 远程管理方式
    Oracle 重启监听
  • 原文地址:https://www.cnblogs.com/canglongdao/p/12397300.html
Copyright © 2011-2022 走看看