基础知识:
认识jmeter:
JMeter是Apache组织开发的基于Java的压力测试工具。具有开源免费、框架灵活、多平台支
持等优势。除了压力测试外,JMeter在接口测试方面也有广泛的应用。
常见的接口测试工具有哪些?
手工测试的话可以用postman ,自动化测试多是用到 Jmeter(开源)、soupUI(开源&商业版)
什么叫做性能测试?
1、 软件的性能是软件的一种非功能特性,它关注的不是软件是否能够完成特定的功能,所以一般来说性能测试介入的时机是在功能测试完成之后。另外,由定义中的及时性可知性能也是一种指标,可以用时间或其它指标来衡量,通常我们会使用某些工具或手段来检测软件的某些指标是否达到了要求,这就是性能测试。
2、指通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系
统的各项性能指标进行测试
为什么要做性能测试?
1、评估系统的能力
2、验证系统的稳定性和可靠性
3、识别系统中的弱点
4、系统调优
针对上面这几种目的,针对不同的结果,给出不同的应对方案和措施,这才是性能测试的最终目标
• a、测试中得到的负荷和响应时间数据可以被用于验证所计划的模型的能力,并帮助作出决策
•b、受控的负荷可以被增加到一个极端的水平,并突破它,从而修复体系的瓶颈或薄弱的地方。
• c、重复运行测试,验证调整系统的活动得到了预期的结果,从而改进性能。
• d、检测软件中的问题:长时间的测试执行可导致程序发生由于内存泄露引起的失败,揭示程序中的隐含的问题或冲突。
• e、在一个生产负荷下执行测试一定的时间是评估系统稳定性和可靠性是否满足要求的唯一方法
性能测试的流程:
1、需求的分析
2、性能场景的设计
3、性能计划的编写
4、脚本的开发
5、性能环境和数据的准备
6、性能的执行
7、性能结果分析
8、性能总结报告
性能测试的类型:
1. 基准测试:在给系统施加较低压力时,查看系统的运行状况并记录相关数做为基础参考
2. 负载测试:是指对系统不断地增加压力或增加一定压力下的持续时间,直到系统的某项或多项性能指标达到安全临界值,例如某种资源已经达到饱和状态等 。
3. 压力测试:压力测试是评估系统处于或超过预期负载时系统的运行情况,关注点在于系统在峰值负载或超出最大载荷情况下的处理能力。
4. 稳定性测试:在给系统加载一定业务压力的情况下,使系统运行一段时间,以此检测系统是否稳定。
5. 并发测试:测试多个用户同时访问同一个应用、同一个模块或者数据记录时是否存在死锁或者其他性能问题
jmeter安装环境:
在Windows平台下搭建jmeter步骤如下:第一步:打开浏览器,在jmeter官网https://jmeter.apache.org/download_jmeter.cgi,选择合适的版本,点击下载
jmeter目录基本介绍已经常见文件:
1、bin目录:核心可执行文件(二进制文件),包含配置文件
jmeter.bat:windows启动文件
jmeter-server.bat:分布式压测使用的启动文件
jmeter.properties:核心配置文件
examples(例子):该目录下存放Jmeter官方给的请求模板
report-template(报告模板):该目录下存放Jmeter的报告模板
(Jmeter是有自己的报告的)
templates(模板):该目录下存放Jmeter的各类配置模板,
例如:JDBC、Beanshell、ThinkTime等
2、docs:api:前面谈到Jmeter是开源的,此处便是它的API文档。
3、extras:存放Build等配置,用于第三方集成构建
4、lib:存放各类jar包,组件类函数类等
5、licenses:许可证等
6、printable_docs:用户手册
7、backups(备份):顾名思义,该目录是个备份目录,是将自己的各
个Jmx脚本进行备份,所谓备份便是每次保存都会将该脚本进行保存到
该目录下,如果保存多次便会保存多个同样的文件,文件名进行默认递
增更改。
使用教程:
jmeter工具基本结构:
1、test plan(测试计划):测试计划是用来描述本次性能测试的需求,所有相关
的内容都是基于该测试计划展开的。
2、thread group(线程组):线程组可以理解为虚拟用户的组线程组包括哪些
内容:
(1)线程数:表示虚拟用户-----20个虚拟用户
(2)ramp-up period:用来设置虚拟用户多久时间加载完成-----10s
(表示20个虚拟用户在10s内完成加载,每秒加载2个虚拟用户)
(3)循环次数:每个线程发送请求的次数------2(线程循环2次总共循环
40次,就是发送了40次请求,时间等于20)
3、添加一个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方式通信
use multipart/from-data for http post:当发送http post请求,需要勾选同请求一起发送文件:在请求中发送URL参数,对于带参数的URL,jmeter提供一个简单的对参数的方法从html文件获取所有有内容含资源:当该项被选中时,jmeter在发出http请求并获取得响应的html文件内容后,还对该html进行parse(解析)并获取html中包含的所有资源(图片,flash等),默认不选中,如果用户希望获取特定资源,可以在下方的embedded urls must match文本框中填入需要下载的特定资源表达式。
4、查看结果树:监控http请求结果的详细结果
5、聚合报告:生成此次性能的测试数据报告
Samples:测试一共发出的请求 ,虚拟用户循环次数
Average:平均响应时间,是单个 Request 的平均响应时间
Median:中位数,50%用户的响应时间在小于该值,这个值是指把所有数据
按由小到大将其排列,就是排列在第50%的值。
90%line:90%用户的响应时间小于该值,这个值是指把所有数据按由小到
大将其排列,就是排列在第90%的值。
Min:最小响应时间
Max:最大响应时间
error%:错误的请求数/请求总数
Throughput:吞吐量---每秒完成的请求数
KB:耗流量,每秒从服务器端接收到的数据量,相当于LoadRunner中的
Throughput/Sec
性能术语:
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)常用的性能指标插件
1. jp@gc - Bytes Throughput Over Time:不同时间吞吐量展示(图表) 聚合报告里,Throughput是按请求个数来展示的,比如说1.9c,就是每s发送1.9个请求;而这里的
展示是按字节Bytes来展示的图表
2. jp@gc - Composite Graph: 混合图表 在它的Graphs里面可以设置多少个图表一起展示,它可以同时展示多个图表
3. jp@gc - Hits per Second:每秒点击量
4. jp@gc - PerfMon Metrics Collector:服务器性能监测控件,包括CPU,Memory,Network,I/O等等
5. jp@gc - Reponse Latencies Over Time:记录客户端发送请求完成后,服务器端返回请求之前这段时间
6. jp@gc - Reponse Times Distribution: 显示测试的响应时间分布,X轴显示由时间间隔分组的响应时间,Y轴包含每个区间的样本数
7. jp@gc - Transactions per Second: 每秒事务数,服务器每秒处理的事务数(性能测试中,最重要的2个指标之一。该插件的作用是在测试脚本执行过程中,监控查看服务器的TPS表现————比如整体趋势、实时平均值走向、稳定性等。)
8、jp@gc - Response Times Over Time,即TRT:事务响应时间。
性能测试中,最重要的两个指标的另外一个。该插件的主要作用是在测试脚本执行过程中,监控查看响应时间的实时平均值、整体响应时间走向等。
常见的性能指标(重点)
(1)什么是吞吐量
吞吐量,指的是单位时间内处理的客户端请求数量。通常情况下,吞吐量用请求数/秒Or页面数/秒来衡量。从业务角度看,吞吐量也可以用访问人数/天Or页面访问量/天来衡量。
(2)什么是吞吐率
吞吐率通常指单位时间内从服务器返回的字节数,也可以单位时间内客户提交的请求数。吞吐率是大型web系统衡量自身负载能力的一个重要指标,一般来说,吞吐率越大,单位时间内处理的数据就越多,系统的负载能力也强。吞吐率与很多因素有关,服务器的硬件配置,网络的宽带及拓扑结构,软件的技术架构
(3)什么是事务
• 事务是脚本的一个特性,每个事务都包含开始事务和结束事务。事务用来衡量脚本中一行代码或多行代码的执行所耗费的时间。
• 将开始事务放置在脚本中某行代码的前面,将结束事务放置在该行代码的后面,在该脚本的虚拟用户运行时,这个事务将衡量该行代码的执行花费了多长时间。
(4)什么是响应时间
• 对请求作出响应所需要的时间
(5)什么是每秒点击事务数
• TPS表示服务器每秒处理的事务数,他是衡量系统处理能力的一个非常重要的指标,在性能测试中,通过检测不同用户的TPS,可以估算出系统处理能力的拐点。
(6)什么是每秒点击次数
• 每秒点击数是指每秒钟向web服务器提交的HTTP请求数,它是衡量服务器处理能力
的一个常用指标。需要注意的是,这里的相应时间并非鼠标的一次单击操作,因为
在一次单击操作中,客户端可能向服务器发出多个HTTP请求,切勿混淆。
(7)并发:
• 同一时间内向服务器发送同一请求并发的3种情况:
a、所有用户同一时间内做同一件事情或者同一个操作,这里同一个操作是
指同一个业务类型,如同时提交订单(流程性)
b、所有用户同一时间内做同一件事情或者同一个操作,同时修改一个数据,
同时一个操作(一个流程中的具体环节)
c、所有用户同一时间内对系统做不同的操作
所有用户包含如下:
a、注册用户:当前平台有多少人注册了
b、在线用户:当前平台有多少人在线
c、并发用户:测试过程中需要进行测试同一时刻操作的用户(测试数据)
1、什么是事务?
定义一:某个用户操作步骤(功能)的集合
定义二:性能测试中,事务是指从端到端,一个完整的操作过程,比如一次登录、一次筛选条件查询,一次支付,一次发朋友圈;无论流程步骤是多是少,一定要保证事务存在的意义性
2、什么是断言/检查点?
响应会有2种情况:
第一:正确的响应
第二:错误的响应
断言:
jmeter中有个元器件叫做断言(Assertion),它的作用和loadrunner中的检查点类似,用于检查测试中得到的响应数据等等是否符合预期结果,用以保证性能测试中的数据交互与预期一致。
使用断言的目的:在request的返回层增加一层判断机制;因为request成功了,并不代表结果一定正确; 所谓的检查点,就是系统根据用户输入,按照业务要求的逻辑处理后产生的数据,不同的业务场景、不同的结果会有不一样的要求;部分输出是在客户的需求中明确要求展示;比如展示的字段可以直接观察到或者获取到,部分输出是服务于系统维护人员、客服人员;当然还有部分输出也 不包括不能输出或者加密输出;比如客户的银行账号要求部分数字用*号来代替,客户的密码不能在日志中输出等等;检查点的检查包括客户或者系统质量要求的必须输出的或者不应该输出的两种情况。
3、什么是参数化
参数化是自动化测试脚本中的一种常用技巧。简单来说,参数化的一般用法就是将脚本中的某些输入使用参数来代替,在脚本运行时指定参数的取值范围和规则;这样脚本在运行时就可以根据需要选取不同参数值作为输入。
这种方式通常被称为数据驱动测试(Data Driven Test),参数的取值范围被称为数据池(Data Pool)
性能调优
1、硬件上的调优
一般指的是CPU、内存、磁盘I/O 方面的问题,分为服务器硬件瓶颈、网络瓶颈(对局域网可以不考虑)、服务器操作系统瓶颈(参数配置)、中间件瓶颈(参数配置、数据库、web服务器等)、应用瓶颈(SQL 语句、数据库设计、业务逻辑、算法等)。
2、应用软件上的性能瓶颈
一般指的是应用服务器、web 服务器等应用软件,还包括数据库系统。
例如:中间件weblogic 平台上配置的JDBC连接池的参数设置不合理,造成的瓶颈。
注意:JDBC连接池: 连接池的作用:连接池是将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对数据库进行访问。这样省略了创建连接和销毁连接的过程。这样性能上得到了提高。
(1)建立数据库连接池对象(服务器启动)。
(2)按照事先指定的参数创建初始数量的数据库连接(即:空闲连接数)。
(3)对于一个数据库访问请求,直接从连接池中得到一个连接。如果数据库连接池对象中没有空闲的连接,且连接数没有达到最大(即:最大活跃连接数),创建一个新的数据库连接。
(4)存取数据库。
(5)关闭数据库,释放所有数据库连接(此时的关闭数据库连接,并非真正关闭,而是将其放入空闲队列中。如实际空闲连接数大于初始空闲连接数则释放连接)。
(6)释放数据库连接池对象(服务器停止、维护期间,释放数据库连接池对象,并释放所有连接)。
3、应用程序上的性能瓶颈
一般指的是开发人员新开发出来的应用程序。
例如,程序架构规划不合理,程序本身设计有问题(串行处理、请求的处理线程不
够),造成系统在大量用户方位时性能低下而造成的瓶颈。
4、操作系统上的性能瓶颈
一般指的是windows、UNIX、Linux等操作系统。
例如,在进行性能测试,出现物理内存不足时,虚拟内存设置也不合理,虚拟内存
的交换效率就会大大降低,从而导致行为的响应时间大大增加,这时认为操作系统
上出现性能瓶颈。
5、网络设备上的性能瓶颈
一般指的是防火墙、动态负载均衡器、交换机等设备。
例如,在动态负载均衡器上设置了动态分发负载的机制,当发现某个应用服务器上
的硬件资源已经到达极限时,动态负载均衡器将后续的交易请求发送到其他负载较
轻的应用服务器上。在测试时发现,动态负载均衡器没有起到相应的作用,这时可
以认为网络瓶颈。
接口测试思路