• 多测师讲解jmeter _概念总结_高级讲师肖sir



    1、Jmeter的概念?
    JMeter是Apache组织开发的基于Java的压力测试工具。具有开源免费、框架灵活、多平台支持等优势。除了压力测试外,JMeter在接口测试方面也有广泛的应用。

    2、常见的接口测试工具有哪些?
    手工测试的话可以用postman ,自动化测试多是用到Jmeter(开源)、soupUI(开源&商业版)。

    二、性能测试
    1、什么是性能测试?
    1)软件的性能是软件的一种非功能特性,它关注的不是软件是否能够完成特定的功能,所以一般来说性能测试介入的时机是在功能测试完成之后。另外,由定义中的及时性可知性能也是一种指标,可以用时间或其它指标来衡量,通常我们会使用某些工具或手段来检测软件的某些指标是否达到了要求,这就是性能测试。
    2)指通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
    2、为什么要做性能测试?
    1) 评估系统的能力
    2) 验证系统的稳定性和可靠性
    3) 识别系统中的弱点
    4) 系统调优

    3、性能测试的流程有哪些?
    1)需求的分析
    2)性能场景的设计
    3)性能计划的编写
    4)脚本的开发
    5)性能环境和数据的准备
    6)性能的执行
    7)性能结果分析
    8)性能总结报告

    4、性能测试的类型
    1)基准测试:给系统施加较低压力时,查看系统的运行状况并记录相关数做为基础参考。
    2)负载测试:是指对系统不断增加压力或增加一定压力下的持续时间,直到系统性能达到安全临界值。
    3)压力测试:关注点在于系统在峰值负载或超出最大载荷情况下的处理能力。
    4)稳定性测试:在给系统加载一定业务压力的情况下,检验系统正常运行一段时间后是否稳定。
    5)并发测试:测试多个用户同时访问同一个功能时是否出现性能问题。

    三、搭建jmeter环境(Windows平台为例)
    1)在jmeter官网(https://jmeter.apache.org/download_jmeter.cgi),选择合适的版本,点击下载,如Apache Jmeter 5.2 zip sha512p版本。
    2)将下载后的ApacheJmeter 5.2进行解压、安装。

    四、jmeter目录以及常见文件介绍
    找到安装路径,进入安装包里,可以看到以下内容:
    1)bin
    Bin目录:核心可执行文件(二进制),包含配置文件
    Jmeter.bat:Windows启动文件
    Jmeter-server.bat:分布式压测使用的启动文件
    Jmeter.properties:核心配置文件
    Examples(例子):该目录下存放jmeter的报告模板
    Report-template(报告模板):该目录下存放Jmeter的报告模板(Jmeter是有自己的报告的)
    Templates(模板):该目录下存放Jmeter的各类配置模板,例如:JDBC、Beanshell、ThinkTime等
    2)docs
    docs:api :Jmeter是开源的,此处便是它的API文档。
    3)extras
    extras:存放Build等配置,用于第三方集成构建
    4)lib
    lib:存放各类jar包,组件类函数类等
    5)licenses
    licenses:许可证等
    6)printable_docs
    printable_docs:用户手册
    7)backups
    backups(备份):顾名思义,该目录是个备份目录,是将自己的各个Jmx脚本进行备份,所谓备份便是每次保存都会将该脚本进行保存到该目录下,如果保存多次便会保存多个同样的文件,文件名进行默认递增更改。

    五、jmeter工具基本结构介绍
    1)test plan(测试计划):测试计划是用来描述本次性能测试的需求,所有相关的内容都是基于该测试计划展开的。
    2)thread group(线程组):线程组可以理解为虚拟用户的组线程组包括哪些内容:
    线程数:表示虚拟用户-----20个虚拟用户
    ramp-up period:用来设置虚拟用户多久时间加载完成-----10s(表示20个虚拟用户在10s内完成加载,每秒加载2个虚拟用户)
    循环次数:每个线程发送请求的次数------2(线程循环2次总共循环40次,就是发送了40次请求,时间等于20)
    3)添加一个http请求
    注:http请求设置-保持默认即可

    添加http请求后页面字段介绍
    名称:本属性用于标识一个取样器,建议根据实际场景来取
    服务器名称或ip:http请求发送的目标服务器名称或者ip地址
    端口号:目标服务器的端口号,默认为80,后面的超时定义可以不写
    协议:向目标服务器发送http请求的协议,可以是http或者https,默认值为
    http方法:发送http请求的方法,可用方法包括:get、post、head,put等
    路径:目标URL路径(不包括服务器地址和端口)
    自动重定向:如果选择该选项,当发送http请求后得到的响应是301和302时,jmeter自动重定向到新的页面
    use keep alive(持久长链接):勾选后,jmeter和目标服务器采用keep-alive方式通信
    usemultipart/from-data for http post:当发送http post请求,需要勾选
    同请求一起发送文件:在请求中发送URL参数,对于带参数的URL,jmeter提供一个简单的对参数的方法从html文件获取所有有内容含资源:当该项被选中时,jmeter在发出http请求并获取得响应的html文件内容后,还对该html进行parse(解析)并获取html中包含的所有资源(图片,flash等),默认不选中,如果用户希望获取特定资源,可以在下方的embedded urls must match文本框中填入需要下载的特定资源表达式。

    添加观察结果树以及聚合报告字段介绍
    1、查看结果树:监控http请求结果的详细结果
    2、聚合报告:生成此次性能的测试数据报告
    Samples:测试一共发出的请求,虚拟用户循环次数
    Average:平均响应时间,是单个Request 的平均响应时间
    Median:中位数,50%用户的响应时间在小于该值,这个值是指把所有数据
    按由小到大将其排列,就是排列在第50%的值。
    90%line:90%用户的响应时间小于该值,这个值是指把所有数据按由小到
    大将其排列,就是排列在第90%的值。
    Min:最小响应时间
    Max:最大响应时间
    error%:错误的请求数/请求总数
    Throughput:吞吐量---每秒完成的请求数
    KB:耗流量,每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec


    添加一个断言来判断接口是否请求成功:添加步骤如下:
    1) 右键http请求-添加-断言-响应断言
    2) 在响应断言中 要测试的模式 里输入想要验证的内容

    在接口中添加断言结果:
    1) 右键(如cms平台用户注册接口)-添加-监听器-断言结果
    2) 添加成功后,接口去运行时,如果响应体返回的值和期望值不一致时,会打印出期望值,如:
    Cms平台登录接口
    响应断言:Testfailed ;text expected to contain /登录成功 !/

    六、数据库+jmeter
    操作流程
    1.jmeter不能直接连接数据库,先安装一个jmeter连接mysql数据库的文件mysql-connector-java-5.1.7-bin.jar ,在测试计划页面下点击浏览找到对应的jar包进行添加
    2.添加线程组,测试计划-添加-Threads-线程组
    3.添加配置元件,线程组右键-配置元件- JDBC Connection Configuration
    4。JDBC Connection Configuration进行配置
    allowMultiQueries=true&characterEncoding=UTF-8
    allowMultiQueries=true解决可以执行多条sql
    characterEncoding=UTF-8解决插入数据为乱码的问题
    5.添加JDBC Request,线程组右键-添加-sampler-JDBC Request
    6.JDBC Request配置
    7.添加查看结果树,线程右键-添加-监听器-查看结果树
    8.点击运行按钮,查看运行结果

    1. 启动Jmeter,找到Jmeter安装路径下的bin文件夹,双击jemeter.bat文件,进入测试计划页面
    2. 添加测试计划,输入名称(订单取消),点击【添加】按钮,点击其他内容区域,名称修改成功
    3. 添加线程组,线程组是用来设置要模拟的用数量,请求发送的频率,以及请求发送的次数。
    右键点击计划名称->【添加】->【Threads】->【线程组】,打开线程组配置界面
    4.(1) 添加HTTP请求,右键点击线程组名称【线程组】->【添加】->【Sample】->【HTTP请求】,添加HTTP类型
    (2) 参数化,如果测试一台设备正常上面的serialNo号为具体的值,但是我们要测试200台机器,所以需要进行参数化
    首先,Body date下以这种格式填写"serialNo": "${serialNo}"
    右键点击线程组名称【线程组】->【添加】->【配置元件】->【CSV Data Set Config】
    前提:在电脑某一文件夹下以dat文件形式存储参数内容,如F:123.DAT
    5. HTTP信息头管理器,因为项目是以JSON数据格式传输,所以要填写一下格式传输的形式
    右键点击线程组名称【线程组】->【添加】->【配置元件】->【信息头管理器】
    6. 察看结果数、聚合报告,这两项是为了察看性能测试结果
    【线程组】->【添加】->【监听器】->【察看结果数】,同理聚合报告,默认空白无内容功能,下图测试完成的结果作为参考,察看结果参考(内存、cpu、磁盘使用率、error数等)
    7. 保存并运行,点击工具栏下的保存按钮 ,取名,最后点击运行按钮 ,如果测试1个小时,1小时后点击暂停,察看测试结果

    使用jmeter实现对一个接口进行压力测试
    实例:
    1.设置线程组
    线程数:模拟虚拟用户的,你可以理解模拟并发用户。
    ramp-up:启动线程的时间,单位是秒
    每启动一个线程,间隔时间
    循环次数:循环次数不代表虚拟用户,但是代表线程循环执行。
    [img=599,0]F:SaveWordsaveYNoteqqAA2BFFAD1117218A577C57E1A26B21D594976ee01a84eddbdb03cf26a561a70h(a[rv%613{jnz@mx0l_p3c.png[/img]

    2.添加监听器-聚合报告
    [img=620,0]F:SaveWordsaveYNoteqqAA2BFFAD1117218A577C57E1A26B21D552d53a060e6744d99378ee437105621bia~`pgp2z7d5$731{kup[9t.png[/img]
    2.1 中位数:统计学概念
    假设有100个数字,这100个数字需要从小到大进行排序,中位数指的是第50个数字,90%line指的是第90个数字,95%line指的是第95个数字。(一般取90%line)
    2.2 错误率:请求失败的个数/请求总数,一般2-5/10000
    3.线程数 :100 ramp-up:10s ;实际每条执行的时间:10ms/条
    线程数100在10秒内完成一轮次,平均每个0.1秒,实际结果平均每个0.01秒,想要第1个和第100个并发登录(也就是100个并发请求),那么需要执行1000轮次

    一个请求的时间
    一个请求的响应的时间 5ms
    5ms=0.005s

    10s启动500个线程
    10s/500=0.02s 每隔0.02s启动一个线程
    当启动第500个线程,启动的时间9.98
    9.98/0.005=2000 循环的次数

    请求的数量(虚拟用户的数量)=线程数*循环次数=1000000

    非GUI模式查看性能测试的数据
    F:SaveWordsaveYNoteqqAA2BFFAD1117218A577C57E1A26B21D510e150f7a5954f0f845e090fcdd73cabclipboard.png

    F:SaveWordsaveYNoteqqAA2BFFAD1117218A577C57E1A26B21D5c753990c09da49fba4e1d38b29478e9bclipboard.png
    线程数太多时,不看聚合报告
    jmeter中使用非GUI模式查看性能测试的数据
    jmeter -n -t [jmx file] -l [results file] -e -o [Path to output folder]

    -n 非GUI模式
    -t 指定jmx脚本文件 H:个人文档测试学习资料多测试第二个月jmetercms.jmx
    -l 指定log结果文件名称 xxx.txt
    -e (不用理)
    -o 结果以html文件指定输出路径(注意点,这个路径不允许有其他的文件)
    在dos中进入jmeter的bin目录,输入如下命令
    jmeter.bat -n -t H:个人文档测试学习资料多测试第二个月jmetercms.jmx -l H:个人文档测试学习资料多测试第二个月jmeter esult.txt -e -o H:个人文档测试学习资料多测试第二个月jmeterhtml

    执行第二次的时候,需要删除result.txt和html里面的所有文件


    badboy工具
    主要的作用:录制脚本
    Loadrunner本身支持录制脚本
    jmeter+badboy工具 组合一起使用,就可以实现录制脚本,然后把录制的脚本导入到jmeter,然后再在jmeter去优化脚本。
    QTP:自动化测试工具,主要是录制
    自动化的定义:
    通过录制脚本或者编写脚本 来模拟人工操作的行为,通过回放脚本或者执行脚本 来实现自动化测试。
    录制脚本----》回放脚本
    编写脚本----》执行脚本

    在badboy中录制脚本,保存xxx.jmx文件,用jmeter工具,打开xxx.jmx

    性能测试 Performance Testing
    含义:性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
    通常小公司用jmeter(开源免费),大公司用loadrunner(商业软件)。

    loadrunner是一款性能测试工具,主要是模拟成千上万的用户数对系统进行负载测试,并实时监控性能,查找系统的性能问题,loadrunner主要是对系统的架构进行测试。(了解)
    测试组件:VuGen Load Generator 虚拟用户生成器(重要)


    面试:性能测试?
    有专门的部门负责性能测试,有了解过但是主要还是擅长接口,自动化测试。

    jemter和loadrunner 的区别:
    相同点:
    1.架构原理相同:都是通过代理监听、监控客户端发送服务端发送的请求、命令,把监控结果进行展示,生成图表。
    2.支持分布式代理:分布式代理是指一台pc机控制多台pc机,主要目的是减轻并发对服务器的压力。
    不同点:
    1.jmeter安装简单,loadrunner安装包大概1-2个G,安装大概要一个多小时,安装盗版的很多功能无法实现,麻烦且花时间长。
    2.jmeter不支持ip欺骗,loadrunner支持ip欺骗。
    #ip欺骗是指一台pc机模拟多个ip地址提供给并发用户,模拟并发场景更加真实。
    3.jmeter的图形报表非常少,loadrunner支持强大的图表、报表功能。
    4.jmeter是一款开源软件,loadrunner是一款商业软件。
    C:UsersAdministratorAppDataLocalYNotedataweixinobU7VjihG6UAeM6kpBbkdlxzE-tE7b505fc36818439dab22d80e8535c64eclipboard.png

    性能测试主要应用在客户端、网络端、服务端性能的测试。
    性能测试包含压力测试和负载测试。

    负载测试 Load Testing
    含义:模拟系统在不同负载情况下系统的性能,通过不断的增加负载,查看系统性能指标的变化,然后发现性能中存在的缺陷。
    负载测试主要是用户数多,是一种性能测试方法或技术,通过不断对系统增加负载,查看CPU、内存的使用情况。
    主要作用:获得系统在正常工作时承受最大负载重量。

    压力测试 Stress Testing(掌握)
    含义:在强负载下的测试(大数据量,大量并发用户),查看系统在峰值情况下性能指标,发现系统可能存在的缺陷。
    主要作用是测试在强负载的情况下长时间运行系统的稳定性。

    负载测试:大用户数
    压力测试:大数据量,大用户数

    面试题:负载测试和压力测试的区别?
    负载测试是为了获得系统在正常工作时承受的最大负载,压力测试是测试系统在强负载下长时间运行系统的稳定性。


    Security?Testing? 安全测试
    Regression?Test? 回归测试
    Smoke?Test? 冒烟测试
    Function?Testing 功能测试
    Acceptance?Test 验收测试


    响应时间:系统对请求作出响应的时间。
    接口响应时间:客户发起请求,web server 接受请求,进行处理,web server 向DB获取数据,web server生成用户页面,返回给用户的过程。 响应时间都是针对事务而言的。这个过程使用的时间就是响应时间。

    事务:用户自定义的一个标识。
    事务响应时间是针对用户而言,用户操作某个事务系统响应的时间。
    例子:转账时间,下单、支付时间。

    响应时间:
    2秒以内:非常好
    2-3秒:好
    3-5秒:一般
    5-10秒:无法接受
    性能一般测响应时间。

    思考时间:为了更好的模拟用户行为,在不同操作之间等待的时间,相当于休眠时间。例如:当用户收到服务器返回的数据,可能需要等待几秒的查询数据,然后在作出响应,这种延迟的时间就是思考时间。


    并发用户:在某个物理时间同时向系统发送请求的用户。
    并发请求:同一系统,同一时间做相同操作。
    并发场景:
    1.广义并发:同一系统,同一时间,两个用户在做不同操作。
    2.狭义并发:同一系统,同一时间,两个用户都进行登录操作。
    3.特殊并发:同一系统,同一时间,两个用户都对同一类的业务做相同操作,例如两个人都同时修改资料保存,或者同时提交订单。

    系统用户数:在某个系统上面注册的用户数。
    在线用户数:在某个时段属于登录状态的用户数。

    性能指标:吞吐量,TPS,QPS
    吞吐量 throughput
    含义:系统在单位时间内传输和返回的数据大小 ,以字节(B)为单位,或者理解为单位时间内网络上传输的数据量的总和。
    bit 位/比特(b)是表示信息的最小单位。
    byte 字节(B)一个Byte由8 bits组成,是数据存储的基础单位,1Byte又称为一个字节。

    吞吐量大小能衡量一个系统并发处理的能力。
    吞吐率=吞吐量/传输时间,代表每秒钟系统处理请求的数量、传输数据的大小。
    TPS (Transaction Per second):每秒钟系统处理事务的个数,是一个衡量系统处理能力的指标。
    QPS (Queries Per Second):每秒钟系统查询事务的个数。

    TPS和QPS的异同?
    一个事务中包含多个请求,单一个事务中只有一个请求的时候,那么TPS和QPS是相同的;
    当一个事务中有多个请求的时候,那么TPS和QPS 是不同的:
    一个提交订单的事务,比如说1秒钟能提交2个,那么就是2TPS;
    一个提交订单的事务中包含2个请求,1秒能处理4个请求,那么4QPS。

    在工作中怎么开展性能测试工作?
    经常会遇见的问题:
    1.测试经理:小张你去测一下性能。
    回答:经理我之前项目中主要负责功能,接口,自动化等方面,性能我也只会一些压测,那么去测系统性能具体是要测哪一块?
    2.测试经理:具体的那5个接口测一下性能。
    回答:经理,测哪几个接口我知道了,具体通过的性能指标数据有哪些,这边有提供吗?
    3.测试经理:把具体的那5个接口测试一下,测下响应时间,吞吐量,cpu使用情况。
    回答:经理,具体的性能指标我知道了,具体的通过的标准数据有没有?具体的并发用户量多少?具体的响应时间最长运行多少?具体的吞吐量数据是多少?


    cms 登录接口
    支持并发数 至少500
    响应时间 3s以内

    我们设计性能测试场景
    分两种方向去设计场景
    1.根据用户的数量进行设计
    2.根据目标进行设计

    大多数采用根据用户的数量进行设计的偏多
    1个用户做登录请求,持续时间5分钟,分析性能的指标
    2个用户做登录请求,持续时间10分钟,分析性能的指标
    4个用户做登录请求,持续时间20分钟,分析性能的指标
    8个用户做登录请求,持续时间40分钟,分析性能的指标
    16个用户并发登录请求,持续时间80分钟,性能指标有下降的趋势,那么我们考虑8-16之间再选择一个数据12,进行测试。

    针对是目标来设计测试用例的
    并发用户数设置500,查看系统的响应时间,以及其他的性能指标,测试的次数要非常多,取一个平均值。

    使用jmeter实现对一个接口进行压力测试。
    线程数:模拟虚拟用户的,可以理解模拟并发用户。
    ramp-up:启动线程的时间,单位是秒。
    每启动一个线程,间隔时间。
    循环次数:循环次数不代表虚拟用户,但是代表线程循环执行。
    请求的数量=线程数*循环次数
    监听器--聚合报告
    C:UsersAdministratorAppDataLocalYNotedataweixinobU7VjihG6UAeM6kpBbkdlxzE-tE251615b3917b445f8da74e6d6185205fclipboard.png
    samplers:请求的数量=线程数*循环次数
    average:请求的平均响应时间
    median:中位数
    90%line,95%line,99line
    min:最小请求时间
    max:最大请求时间
    error:错误率=请求失败的个数/请求的总数
    throughput:吞吐量
    reciver:接受的数据大小
    sent:发送的数据大小


    例子:
    线程数100,ramp-up 10s
    10s启动100个线程
    每隔0.1秒启动一个线程
    10ms 一个请求从开始到结束
    10ms=0.01s
    第100个线程在启动,第1个线程还没有执行结束?
    9.9s/0.01s=990

  • 相关阅读:
    函数—函数进阶(二)
    函数—函数进阶(一)
    函数(三)
    函数(二)
    函数(一)
    人丑就要多读书、三元运算、文件处理
    第二章练习题
    Python bytes类型介绍、Python3与2字符串的区别、Python3与2编码总结
    进制运算、字符编码、Python3的执行流程
    去除inline-block元素间间距,比较靠谱的两种办法
  • 原文地址:https://www.cnblogs.com/xiaolehua/p/13831743.html
Copyright © 2020-2023  润新知