性能测试基础
本质:服务器端的性能测试。基于协议模拟用户发送请求(业务的模拟),对服务器形成一定的负载来测试服务器性能指标是否满足要求。与界面无关
性能指标的分类:空间性能,时间性能
性能测试的分类
性能测试(特定条件下验证系统的能力状态),
并发测试(并发访问,是否存在死锁或其他性能问题),
可靠性测试(给系统加载一定业务压力的情况下,使系统运行一段时间,已检测系统是否稳定)72hour
负载测试{极限测试},
压力测试(强度测试)
配置测试(对系统软硬件环境的调整)
性能测试的指标
并发用户数:同一时间向服务器发送请求的用户数量;(与每秒的并发请求数不同,一定要确认需求的目的是并发用户数还是并发请求数)
响应时间(网络传输时间+服务器处理时间)(不包含前端页面渲染时间, 到浏览器收到请求后响应数据截止
tps:每秒处理的事务数 吞吐量:描述服务器的处理能力
资源利用率: 在一定的负载情况下,服务器资源占用情况。CPU利用率(不超过70%,队列长度),MEM利用率(80%以下,页交换频率),带宽利用率(if资源利用率太小,会造成资源浪费)
性能测试流程
- 需求分析
- 测试计划
- 测试方案
- 用例设计
- 测试设计
- 定位分析问题
需求分析
测试对象(常用的,核心的重要的,数据量并发量)(登录,注册,搜索,下单deng)
确定性能指标(并发用户数,资源利用率,tps,响应时间)
测试场景:单一场景(登录,注册,下单)/混合场景(用户使用场景,系统使用场景)
测试计划
测试目标
测试人员组织
压测进度安排
压力机(测试机)(配置,要求,数量)
风险
测试方案
测试工具(loadrunner,Jmeter)
测试环境(数据库,服务器,架构设计,有条件的情况下尽量满足和线上环境一致)
测试策略(单一场景/混合场景)
监控工具(linux{nmon,rpc.Spotlight})(windows{Spotlight,perfmon.exe})
用例设计
测试脚本
场景设计
测试执行
脚本编写
场景监控设计
运行场景
监控场景
测试报告
定位分析问题
后端(代码/软件:数据库,应用服务器/硬件)
前端
网络
性能测试报告总结(bug不会很多,但是修改起来比较困难)
1.性能测试需求覆盖情况,性能测试过程中出现的问题,如何分析,调优,解决的(回顾 )
2.测试人员,进度控制,实际执行偏差和性能测试过程中遇到各类风险是如何控制的(管理角度)
3.经过该项目性能测试后,有那些经验和教训等内容(总结)
loadrunner
说明
工业级标砖性能测试负载工具,可以模拟上万用户实施测试,并在测试可实时检测 (应用服务器和服务器硬件各种工具,来确认和查找存在的瓶颈)
支持多协议,web(http/HTML ),windows,Socket,ftp,oobc,ms,sql,server等协议
c语言编写
缺点
收费
体积度大
无法定制功能
优点
多用户(支持单位:万)
详细分析报表
支持IP欺骗
jmeter
基于java开发的一款性能测试软件
多协议(http/https,jdbc,java)
可以用于对服务器,网络或对象模拟巨大的负载
通过创建带有断言的脚本来验证程序是否能返回期望的预期
- 优点
开源免费,跨平台,支持多协议,小巧,功能强大,易上手,应用广泛,丰富学习资料及扩展组件
- 缺点
不支持IP欺骗
使用JMeter无法验证JS程序,也无法验证页面UI,则需和Selenium配合使用
jmeter环境搭建
- 安装jdk
- 安装JMeter
下载与安装
官方下载地址:https://jmeter.apache.org/download_jmeter.cgi
下载好安装包后,解压到你想要安装的目录,打开bin目录下的APacheJMeter文件,这种方式叫做图形化启动入口
jmeter的功能概要
- jmeter文件目录介绍
- bin目录
存放可执行文件和配置文件
jmeter.bat:window的启动文件
jmeter.log:日志文件
jmeter.sh:linux的启动文件
jmeter.properties:系统配置文件
jmeter-server.bat:windows分布式测试要用到的服务器配置
jmeter.serve:linux分布式测试要用到服务器配置
- docs目录
docs:jmeter的api文档,可打开api/index.html页面查看 - printable_docs目录
printable_docs的usermanual子目录下的内容是jmeter的用户手册文档
usermanual下的component_reference.HTML是最常用的核心元件帮助文档 - lib目录
该目录下存放jmeter依赖的jar包和用户扩展所依赖的jar包
- 修改默认配置
汉化配置:实现jmeter界面的汉化包括两种方式:1.临时性 2.永久性
主题修改:选项–主题–选择对应的主题,并重启
- jmeter基本操作步骤
需求:
使用jmeter访问百度首页接口,并查看接口请求和响应信息
操作步骤:
1.启动jmeter
2.在“测试计划”下添加“线程组”
3.在“线程组”下添加“http请求”取样器
4.填写“http请求”的相关请求数据
5.在“线程组”下添加“查看结果树”监听器
6.点击“启动”按钮运行,并查看结果
- jmeter元件及基本作用域
目标
1.熟悉元件之间彼此作用域
2.掌握元件执行顺序
名词科普
1.元件:多个类似功能组建的容器统称
2.组件:实现独立某个功能的统称(类似于函数)
3.取样器:不同协议实现的组件
- 元件的作用域
在jmeter中,元件的作用域是靠测试计划的树形结构中元件的父子关系来确定的
提示:核心是“取样器”,其他组件都是以取样器为核心运行的,组件添加的位置不同,生效的取样器也不同
取样器的原则
1.取样器:元件不和其他元件相互作用,因此不存在作用域的问题
2.逻辑控制器:元件只对其子节点的取样器和逻辑控制器作用
其他六大组件:除取样器和逻辑控制器元件外,如果是某个取样器的子节点,则该元件对其父子节点起作用
4.如果其父节点不是取样器,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)
提示:以上元件中还没有开始学习,暂时理解jmeter这种树形结构影响作用域即可
- 元件执行顺序
1.配置元件(config elements)
2.前置处理程序(Per-processors)
3.定时器(timers)
4.取样器(sampler)
5.后置处理程序(post-processors)
6.断言 (assertyions)
7.监听器(listeners)
提示:
1.前置处理器,后置处理器,断言等元件功能对取样器起作用(如果在他们的作用域内没有任何取样器,则不会被执行)
2.如果在同一作用域内有多个同一类型的元件,则这些元件按照他们在测试计划中的上下顺序依次执行
- 重要组件
线程组
http取样器
查看结果树
提示:无论哪个案例基本都需要以上三个组件。
7.1 线程组
说明:线程组是控制jmeter将用于执行测试的线程数,也可以把一个线程理解为一个测试用户
添加线程组
位置:右键点击测试计划—添加—线程(用户)----线程组
线程组的特点
设定线程数(模拟多人操作)
取样器(请求)和逻辑控制器必须依赖线程组才能使用
线程组可以添加多个,多个线程组可以并行或串行
线程组下可以添加其他元件下组件
线程组分类
1.线程组:
普通的,常用的线程组。可以看作一个虚拟用户组,线程组中的每一个线程都可以理解为一个虚拟用户
2.setup线程组(前置)
一个特殊类的线程组,可用于执行预测试操作
3.tearDown线程组(后置)
一种特殊类型的线程组,可用于执行测试后工作
线程组参数详解
线程数:模拟虚拟用户数
Ramp-up时间:虚拟用户启动所需要的时间
循环次数:
配置指定次数:控制脚本循环执行的次数。
配置循环永远:需要调度器配置使用,运行时间:脚本执行的时间 延迟启动时间:脚本等待特定的时间才能开始运行
线程数m和循环次数n的关系:如果同时配置,实际发送HTTP请求为m*n;虽然发送请求的次数相同,单不能互相替换(线程数:代表并发用户数,体现服务器的负载量。循环次数:代表执行时间)
7.2取样器