• 性能测试基础及练习


     1、性能测试的理解

    性能测试:多用户高并发访问服务器来测试服务器的性能

    可以从多个角度理解性能测试:响应时间,失败率

    2、性能测试的分类

    负载测试强调开展性能测试的一种方法,一种手段,使用增加或者减小压力的形式来开展性能测试,找出最大容量,即最高的用户并发数(例如测试一个网站,先采取100个用户量,如果没问题,再往上加用户量),初级性能测试基本上都在测这个东西

    压力测试压力测试是在负载测试开展完成之后,测试服务器超过最大容量的性能情况(就比如我们已经知道这个服务器的最大容量是500,我们就去测1000,1500容量的时候,因为我们不知道一个网站在秒杀或者抢券的时候有多少用户量,需要去做这样的测试——瞬时并发),去测试服务器崩溃的情况,压到崩溃为止

    强度测试(疲劳测试):长时间运行性能测试,执行标准:3*24h*最大容量的80%

    并发测试:偏重于使用性能测试的手段来测功能,例如测订单超发:抢超出了库存的订单却成功

    。。。。

    这些概念了解即可,负载测试最重要

    3、性能测试指标:(三个)

    在testplan下右键--->添加--->监听器--->聚合报告

    3.1、响应时间(单位毫秒) 

    • 平均响应时间(Average):统计所有请求的平均值(聚合报告中的Average,一般都是参考的这个值,响应时间越小越好

    怎样通过平均响应时间来判断测试的结果是否通过?平均响应时间业内有258原则:x<2s,明显快;2s<x<5s,比较快,明显卡顿;5s<x<8s,明显慢,指的一等;x>8s,特别卡。在工作中,如果没有明确需求,就使用258原则判断,即average<8秒即可判断通过

    • 90%line(包分之90的请求在这个时间点完成,即统计大部分人的响应时间)

    3.2、事务失败率(Error%)

    事务的失败率可以理解为请求的错误率,越小越好,判断标准:x<5%

    在jmeter中,事务=一个或者多个请求,是统计性能测试指标的最小单元,jmeter会自动把每个请求都当成一个事务来

    3.3、tps

    tps:即每秒事务数(服务器每秒返回的请求数),它直接反映了服务器的性能状况,数值越大越好(在负载测试中用不到这个指标,但是在性能调优的时候,它是直接观察的参数)

    例如:tps指标:服务器A:100/s;服务器B:200/s。则服务器B的性能好(服务器A每秒返回100个请求数,服务器B每秒返回200,个请求数)

    3.4、服务器的CPU使用率

    服务器的CPU使用率:即服务器的繁忙程度,数值越小越好,对于服务器的CPU使用率有个监控原则,不要持续100%,数值在85%-90%之间,如果持续100就没有办法接收别的请求,就会卡顿,甚至会有失败率

    CPU:电脑中央处理器,计算机的大脑,任何软件想要运行,都要被cpu执行,CPU有一个指标叫CPU使用率:CPU的繁忙程度

    4、如何判断性能测试是否通过

    如何判断单次请求通过:平均响应时间、事务失败率、CPU使用率同时满足算通过,有任何一个不满足都不通过

    面试题:如何判断性能测试是否通过?从平均响应时间、事务失败率、CPU使用率这三个指标来判断,这三个指标能综合的反应服务器的性能,平均响应时间反映的是用户请求的快慢,事务失败率是从用户的成功率来进行考量的,服务器的CPU使用率是从服务器的繁忙程度来考虑的。

    5、如何来做性能测试——负载测试

    负载测试是在找最大容量,肯定会运行多次(负载测试其实就是多次判断单次请求是否能通过),so找最大容量:不断去增加压力,直到不通过,例如100 >pass;200>pass;300>pass;400> failed,则最大容量就是300(当然如果时间充足的情况下,可以更精确)

    5.1、负载测试测试步骤

    1.需求分析,知道测试的目的,熟悉被测系统(要理解系统业务,从技术层面讲,要知道软硬件结构,即这个系统是由哪些东西组成的,例如软件redis,nginx,gunicorn等,硬件:单机还是集群)

    2.设计场景(测试用例):从场景角度来看,明确要执行的case以及场景的每个步骤;从策略上,即我们需要知道采用什么方法来测——一般都是负载测试

    3.编写脚本,用jmeter或者loadrunner,前面学习的什么关联啊乱七八糟的就是在编写脚本

    4.执行测试(要在终端执行),jmeter必须要配置好环境变量才能在终端执行(即能终端打开jmeter环境变量就配置好了)

    5.指标监控

    • tps/响应时间/失败率——jmeter或者lr会搜集
    • CPU使用率

    有以下两种方式可以去查看CPU使用率:

    ①需要我们去连接上Linux,使用top命令

    ②还可以使用工具:zabbix(一款运维工具)

    6.分析&报告:就是在Excel表格中将多次运行结果的值记录下来,找出最大容量(最高用户并发数),如下图所示:

    5.2、以测试测谈网完成留言评论的业务流程的最大容量为例:

    5.2.1.需求分析

    首先明确,这是在测试业务流程,里边会涉及到多个接口,此处涉及到12个接口,整个业务流程包括了:登录-跳转到首页-浏览文章详情-评论文章

    5.5.2.设计场景:在不用登录的情况下,可以正常的浏览首页以及点进去具体的文章,从业务流程上分为了四步,第一步,登录,第二步,刷新首页,第三步,点进去具体的文章,第四步,留言评论文章;从接口层面,登录调用了一个接口,刷新首页调用了六个接口,点进具体的文章调用了三个接口,评论调用了两个接口,并且,有的接口是需要保在登录的前提下,例如浏览文章详情部分功能和评论全部功能,都需要保持在登录的前提下。

    刷新首页需要的接口数:

        

    文章详情需要的接口数:

    注意:在做负载测试的时候,如果有多个接口,我们一定是通过抓包查看具体的参数,请求数据之类的,不能只看接口文档上的数据,接口文档只是一个辅助

    5.2.3.编写脚本

    ①添加一个线程组,取名用户浏览文章

    ②分别添加http请求(填数据,添加请求头,运行一下,断言:每个http请求下都应该添加断言,但是可以共用嘛,就把他拉到当前线程组下边,请求头也是一样的道理)

    这里有个坑,路径那块,一定不能有空格,不然就会报404错误

    还可以添加一个总的事务,把小的两个事务给检测到

    按照顺序应该考虑是否需要关联和做参数化了:由于登录后返回的token值后边的接口会调用到,此处需要做关联,步骤:设置后置正则表达式

    引用token值,这一步可以直接设置在最前方的头文件里即可

    接下来就是参数化:添加CSV数据文件,注意变量名和数据文件的值要一一对应,之后再引用变量${变量名}

    注意:什么时候需要关联,什么时候需要参数化:前面返回值需要作为参数传给后面接口,则说明需要做关联每个用户(线程)都需要单独的数据,则说明需要参数化

    ③设置并发:分清应该做瞬时并发还是平均并发(具体需求具体分析,一般涉及到秒杀、抢券之类的才会是瞬时并发)

    基准测试(冒烟),一般用户量设置为100为起点,此处设置为10为起点,循环数设置为100

    5.2.4.执行测试

    打开命令行,输入cd /d 脚本文件位置(到文件夹即可,不用选定脚本)——dir(Windows下边的ls):可以查看脚本文件名

     之后在命令行中输入:jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder],后面的 -l [results file] -e -o [Path to web report folder]可以省略不写,不写就没有对应的每次运行的报告

    例如:jmeter -n -t 脚本名 -l 10-100-01.jtl -e -o ./10-100-01

    10-100-01.jtl:文件名随便起,后缀是.jtl文件,此处为了方便查看起名规则为:10个线程,循环100次的第1次运行

    ./10-100-01:运行完成之后对应的测试报告存放目录,自己定的

     刚跑起来的样子:

    跑完之后的样子:

    5.2.5.指标分析:

    查看跑完之后的图,上边会有tps,平均响应时间,事务失败率等指标,在zabbix上监测服务器CPU占用率

    5.2.6.分析&报告

    将以上数据整理成Excel表格,分析得出最大容量

  • 相关阅读:
    专题1
    HDU-6968(DP,和DP)
    ios环境下H5 input 选择图片在函数回调中失效的问题
    vue自定义组件的坑:数组绑定与引号的使用
    关于布局的胡言乱语
    flex布局小结
    微信小程序中overflow:scroll失效的问题
    微信小程序图片的比例问题
    vue用多了反而疏忽了选择器的使用
    在vue项目中做一个类ctrl+f的搜索功能
  • 原文地址:https://www.cnblogs.com/bzbz/p/13928466.html
Copyright © 2020-2023  润新知