多测师_肖sir_性能测试之性能测试了解001(jmeter)

一、了解jmeter
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 /登录成功 !/
 
本帖最后由 杨鹏 于 2020-2-7 11:39 编辑

六、Jmeter线程组中元器件的作用
1.  逻辑控制器:业务上有需要循环去处理一些数据。
2.  配置元器件:处理一些默认请求所需要携带的数据如http 的头部信息和cookie 信息的处理。
3.  前置处理器:http 请求之前需要完成的一些工作,如数据库测试中的连接数据库的功能。
4.  后置处理器:关联需要用后置处理器,需要对响应数据做处理需要用到后置处理器
5.  断言:对结果进行校验
6.  监听器:作用范围的每一个sample 元件的信息并呈现。
7. CSV Data Set Config
8. 定时器:(重点)
  loadrunner 中集合点可以设置多个虚拟用户等待到一个点,同时触发一个事务, 以达到模拟真实环境下多个用户同时操作, 实现性能测试的最终目的。jmeter 中使用Synchronizing Timer 实现Lr 中集合点的功能,模拟多用户并发测试,即多个线程在同一时刻并发请求。
  1)添加同步定时器
  线程组右击-> 定时器->Synchronizing Timer
  2)参数设置
  a. Number of Simulated Users to Group by: 此处填写并发数量
  b. Timeout in milliseconds: 超时时间设置
  Jmeter默认没有超时时间,如果没有设置,一旦没有达到集结数量的请求系统就一直等待。计算超时时间方法参考(毫秒): 并发数量* 1000 / (线程数/在多少时间启动这么多线程)
  3)定时器的作用域
  作用于该定时器之后的所有请求,也就是说定时器是在请求执行前起作用的并发数和线程数一致时,并发启动时间,一定要大于线程组启动的时间,如果小于这个时间,并发数量不准确(注意:线程组里的启动时间单位是秒,定时器里的等待时间是毫秒,要注意单位换算,1秒=1000毫秒)
  4)常用的性能指标插件
  jp@gc - BytesThroughput Over Time:不同时间吞吐量展示(图表)聚合报告里,Throughput是按请求个数来展示的,比如说1.9c,就是每s发送1.9个请求;而这里的展示是按字节Bytes来展示的图表
  jp@gc - Composite Graph 混合图表在它的Graphs 里面可以设置多少个图表一起展示,它可以同时展示多个图表
  jp@gc - Hits perSecond:每秒点击量
  jp@gc - PerfMonMetrics Collector:服务器性能监测控件,包括CPU,Memory,Network,I/O等等
  jp@gc - ReponseLatencies Over Time:记录客户端发送请求完成后,服务器端返回请求之前这段时间
  jp@gc - Reponse TimesDistribution: 显示测试的响应时间分布,X轴显示由时间间隔分组的响应时间,Y轴包含每个区间的样本数
  jp@gc - Transactionsper Second: 每秒事务数,服务器每秒处理的事务数




七、常见的性能指标(重点)
1 )什么是吞吐量?
  吞吐量,指的是单位时间内处理的客户端请求数量。通常情况下,吞吐量用请求数/秒Or页面数/秒来衡量。从业务角度看,吞吐量也可以用访问人数/天Or页面访问量/天来衡量。

2 )什么是吞吐率?
  吞吐率通常指单位时间内从服务器返回的字节数,也可以单位时间内客户提交的请求数。吞吐率是大型web系统衡量自身负载能力的一个重要指标,一般来说,吞吐率越大,单位时间内处理的数据就越多,系统的负载能力也强。吞吐率与很多因素有关,服务器的硬件配置,网络的宽带及拓扑结构,软件的技术架构。

3 )什么是事务?
  定义一:某个用户操作步骤(功能)的集合。
  定义二:性能测试中,事务是指从端到端,一个完整的操作过程,比如一次登录、一次筛选条件查询,一次支付,一次发朋友圈;无论流程步骤是多是少,一定要保证事务存在的意义性。

  事务是脚本的一个特性,每个事务都包含开始事务和结束事务。事务用来衡量脚本中一行代码或多行代码的执行所耗费的时间。
将开始事务放置在脚本中某行代码的前面,将结束事务放置在该行代码的后面,在该脚本的虚拟用户运行时,这个事务将衡量该行代码的执行花费了多长时间。

4 )什么是响应时间?
  对请求作出响应所需要的时间。

5 )什么是每秒点击事务数?
  TPS表示服务器每秒处理的事务数,他是衡量系统处理能力的一个非常重要的指标,在性能测试中,通过检测不同用户的TPS,可以估算出系统处理能力的拐点。

6 )什么是每秒点击次数?
  每秒点击数是指每秒钟向web服务器提交的HTTP请求数,它是衡量服务器处理能力的一个常用指标。需要注意的是,这里的相应时间并非鼠标的一次单击操作,因为在一次单击操作中,客户端可能向服务器发出多个HTTP请求,切勿混淆。

7 )并发:
  同一时间内向服务器发送同一请求
  并发的3 种情况:
  Ø a、所有用户同一时间内做同一件事情或者同一个操作,这里同一个操作是指同一个业务类型,如同时提交订单(流程性)
  Ø b、所有用户同一时间内做同一件事情或者同一个操作,同时修改一个数据,同时一个操作(一个流程中的具体环节)
  Ø c、所有用户同一时间内对系统做不同的操作
  所有用户包含如下:
  a 、注册用户:当前平台有多少人注册了
  b 、在线用户:当前平台有多少人在线
  c 、并发用户:测试过程中需要进行测试同一时刻操作的用户(测试数据)

8 )什么是断言/ 检查点?
  响应会有2 种情况:
  第一:正确的响应
  第二:错误的响应

  jmeter 中有个元器件叫做断言(Assertion) ,它的作用和loadrunner 中的检查点类似,用于检查测试中得到的响应数据等等是否符合预期结果,用以保证性能测试中的数据交互与预期一致。
  使用断言的目的:在request 的返回层增加一层判断机制;因为request 成功了,并不代表结果一定正确; 所谓的检查点,就是系统根据用户输入,按照业务要求的逻辑处理后产生的数据,不同的业务场景、不同的结果会有不一样的要求;部分输出是在客户的需求中明确要求展示;比如展示的字段可以直接观察到或者获取到,部分输出是服务于系统维护人员、客服人员;当然还有部分输出也不包括不能输出或者加密输出;比如客户的银行账号要求部分数字用* 号来代替,客户的密码不能在日志中输出等等;检查点的检查包括客户或者系统质量要求的必须输出的或者不应该输出的两种情况。

9 )什么是参数化?
  参数化是自动化测试脚本中的一种常用技巧。简单来说,参数化的一般用法就是将脚本中的某些输入使用参数来代替,在脚本运行时指定参数的取值范围和规则;这样脚本在运行时就可以根据需要选取不同参数值作为输入。
  这种方式通常被称为数据驱动测试(Data Driven Test),参数的取值范围被称为数据池(Data Pool)



八、性能调优
1、硬件上的调优
  一般指的是CPU、内存、磁盘I/O 方面的问题,分为服务器硬件瓶颈、网络瓶颈(对局域网可以不考虑)、服务器操作系统瓶颈(参数配置)、中间件瓶颈(参数配置、数据库、web服务器等)、应用瓶颈(SQL 语句、数据库设计、业务逻辑、算法等)。
2、应用软件上的性能瓶颈
  一般指的是应用服务器、web服务器等应用软件,还包括数据库系统。
  例如:中间件weblogic平台上配置的JDBC连接池的参数设置不合理,造成的瓶颈。
  注意:JDBC连接池: 连接池的作用:连接池是将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对数据库进行访问。这样省略了创建连接和销毁连接的过程。这样性能上得到了提高。
3、应用程序上的性能瓶颈
  一般指的是开发人员新开发出来的应用程序。
  例如,程序架构规划不合理,程序本身设计有问题(串行处理、请求的处理线程不够),造成系统在大量用户方位时性能低下而造成的瓶颈。
4、操作系统上的性能瓶颈
  一般指的是windows、UNIX、Linux等操作系统。
  例如,在进行性能测试,出现物理内存不足时,虚拟内存设置也不合理,虚拟内存的交换效率就会大大降低,从而导致行为的响应时间大大增加,这时认为操作系统上出现性能瓶颈。
5、网络设备上的性能瓶颈
  一般指的是防火墙、动态负载均衡器、交换机等设备。
  例如,在动态负载均衡器上设置了动态分发负载的机制,当发现某个应用服务器上的硬件资源已经到达极限时,动态负载均衡器将后续的交易请求发送到其他负载较轻的应用服务器上。在测试时发现,动态负载均衡器没有起到相应的作用,这时可以认为网络瓶颈。

猜你喜欢

转载自www.cnblogs.com/xiaolehua/p/13390577.html