07 - 性能测试讲堂
2022-02-15 15:10:24 3 举报
AI智能生成
性能测试脑图及案例资源,主要包括性能测试理论指导,开源翘楚之 JMeter 应用,基于 Python 栈的 Locust 应用
作者其他创作
大纲/内容
教学目标
掌握性能测试理论
能够开展性能测试工作
理论篇
概述
被测对象
客户端性能
移动APP的性能
前端性能
服务器端的性能
基本特点
以功能实现正确为前提
通常有一定的并发用户
重点考察服务器端在一定并发压力下的性能指标
主要目的
验证软件系统是否能够达到预期的性能指标
发现软件系统中存在的性能瓶颈,从而实现性能调优
性能测试方法
基准测试(Standard Testing)
指的是模拟单个用户执行业务场景时,考察系统的性能指标
负载测试(Load Testing)
指的是模拟系统在正常负载压力场景下,考察系统的性能指标
压力测试(Stress Testing)
为了发现在多大并发压力下系统的性能会变得不可接受,或者出现性能拐点(崩溃)
稳定性测试(Endurance Testing)
在一定的软硬件环境下,长时间运行一定负载,确定系统在满足性能指标的前提下是否运行稳定
核心
性能测试手段的重点在于加压的方式和策略
性能瓶颈定位
业务性能指标
并发用户数
事务吞吐率(TPS/RPS)
事务平均响应时间
事务成功率
系统资源性能指标
服务器
CPU利用率、处理器队列长度、内存利用率、内存交换页面数、磁盘IO状态、网卡带宽使用情况等
数据库
数据库连接数、数据库读写响应时长、数据库读写吞吐量等
网络
网络吞吐量、网络带宽、网络缓冲池大小
缓存
静态资源缓存命中率、动态数据缓存命中率、缓存吞吐量等
测试设备
CPU利用率、处理器队列长度、内存利用率、内存交换页面数、磁盘IO状态、网卡带宽使用情况等
核心
性能瓶颈定位的重点在于性能指标的监控和分析
性能测试工具
常见工具
JMeter
Locust
Gatling
HP LoadRunner
Rational Performance Testing
核心的模块
压力生成器(Virtual User Generator)
业务脚本
负载控制器(Controller)
场景设计
性能指标采集
系统资源监控器(Monitor)
业务指标采集器(Result Collector)
结果分析器(Analysis)
数据采集结果
性能测试流程
业务学习
通过查看文档,手工操作系统来了解系统功能
需求分析
分析系统非功能性需求,圈定性能测试范围,了解系统性能指标
工作评估
工作量分解,评估工作量,计划资源投入
设计模型
圈定性能测试范围后,将业务模型映射为测试模型
计划编写
计划测试工作,明确列出测试范围、人力、持续时间、工作内容、风险评估、风险应对策略等
脚本开发
录制或者编写性能测试脚步
测试环境准备
服务器和负载机准备
测试数据准备
根据数据模型来准备被测系统的主数据与业务数据
测试执行
根据设计模型设计测试场景,执行测试脚本
缺陷管理
对性能测试过程中发现的缺陷进行跟踪管理
性能分析
对性能测试过程中暴露出来的问题进行分析、定位
性能调优
性能测试工程师与开发人员一起协同解决性能问题
测试报告
测试工作的重要交付件,对测试结果进行报告
评审
对性能报告中的内容进行评审,确认问题、评估上线风险
案例驱动
Web 的旅行社系统 - HP Web Tours
系统功能
HP Web Tours 用户可以连接到 Web 服务器,搜索航班,预订航班并检查航班路线。
性能需求
HP Web Tours 必须能够成功处理 50 家旅行社同时在线操作。
HP Web Tours 必须能够同时处理 10 家旅行社的航班预订业务,且响应时间不超过3秒。
HP Web Tours 必须能够同时处理 10 家旅行社的行程检查业务,且响应时间不超过5秒。
HP Web Tours必须能够同时处理 10 家旅行社的登录和登出系统操作,响应时间不超过2秒。
学以致用
任务一:常见性能指标
任务描述:通过查阅文档,了解常见的性能指标,如:业务性能指标、系统资源性能指标。
任务二:测试数据制造
任务描述:针对 HP Web Tours 站点,准备至少 100+ 的用户。
任务描述:通过查阅文档,了解常见的性能指标,如:业务性能指标、系统资源性能指标。
任务二:测试数据制造
任务描述:针对 HP Web Tours 站点,准备至少 100+ 的用户。
JMeter 篇
JMeter 简介
什么是JMeter?
https://jmeter.apache.org/index.html
为什么选择JMeter?
免费工具:JMeter是免费工具,可以在Apache网站上轻松获得
用户友好界面:JMeter的界面高度用户友好,测试人员可以轻松地熟悉其大部分组件。工具中提供了每个组件的帮助文档
高度可扩展:用户可以使用JSR223创建自己的采样器(一种请求),并且有许多适用于采样器的插件,这些插件使测试人员能够提高测试能力
协议支持:JMeter不仅用于应用程序性能测试,还支持所有主要协议,例如FTP,HTTP,JDBC,LDAP,SOAP等
录制和回放:在浏览器上记录用户活动,并使用JMeter在Web应用程序中模拟它们
安装简单:安装JMeter非常容易。您需要在计算机上安装Java并下载JMeter并运行.bat文件
可视化测试结果:测试结果可以以不同的格式显示,如图表,表格,树和日志文件
多种测试策略:JMeter支持许多测试策略,如负载测试 ,分布式测试和功能测试
与Selenium集成:您还可以将JMeter与Selenium集成以进行自动化测试
工作原理
发送请求
服务器响应请求
保存服务器响应
收集并分析数据
测试报告
起步
必要条件
开箱即用
目录结构
运行第一个脚本
JMeter 脚本
测试计划
用来描述一个性能测试,包含与本次性能测试所有相关的功能。也就说JMeter创建性能测试的所有内容是于基于一个计划的。
线程/用户(Threads/Users)
线程组
取样器(Sampler)
模拟请求
逻辑控制器(Logic Controller)
控制请求的执行情况
测试片段(Test Fragment)
逻辑控制器复用区
配置元件(Config Element)
取样器中使用的一些数据配置
定时器(Timer)
时间约定,根据时间选择采取操作
前置处理器(Pre Processors)
请求的前置操作
后置处理器(Post Processors)
请求的后置操作
断言(Assertions)
请求的检查
监听器(Listener)
采集测试数据并生成报告
脚本编写
Badboy 录制
录制业务行为
导出为 JMeter 脚本
JMeter 录制
自己编写脚本
脚本增强
关联
解决动态会话值
第一次访问被测站点时,服务器返回一个唯一标识身份值
定位出错的请求,分析该请求的参数是否包含动态值
分析该动态值,是在前置请求响应数据中查找该值
在产生动态值请求之后插入正则表达式提取器
通过正则提取该动态值,存储在一个变量中,供后续请求使用
后置处理器
正则表达式提取器
提取该动态值,存储在一个变量中
变量的取值
${parameter_name}
XPATH 提取器
CSS/jQuery 提取器
JSON提取器
检查点
断言
用于判断请求是否得到预期的效果,只有必要时才使用
参数化
实现方式
用户参数
每次更新
用户自定义变量
仅第一次更新
CSV 文件数据
场景用途
先准备测试数据
在后续的请求中使用已经准备好的测试数据
模拟不同用户,或者模拟相同用户的不同行为
自定义函数
创建自定义 java 的工具库
导出为可运行 的 jar 包
将 jar 包放置到 JMeter 的 lib/ext 中
可以在 JMeter 编程中使用
JMeter 配置文件
jmeter-xxx/bin/jmeter.properties
JMeter界面语言
language=zh_CN
察看结果树中文乱码
sampleresult.default.encoding=UTF-8
学以致用
任务三:当用户业务脚本创建
任务描述:针对被测站点 HP Web Tours 的业务功能创建业务脚本,业务脚本场景如下:
1. 通过 badboy 录制登录、航班预订、行程检查、登出场景脚本
2. 对登录场景做登录成功验证
3. 在虚拟用户登录系统后,进行三次航班预订,一次行程检查操作
4. 对三次航班预订的时间(当前日期之后时间)、出发地、目的地、座位、仓位进行参数化
任务四:多用户业务脚本创建
任务描述:JMeter中通过线程数来模拟用户数量,基于任务三,尝试模拟 3 位不同的用户同时在线进行操作,业务同任务三。
任务描述:针对被测站点 HP Web Tours 的业务功能创建业务脚本,业务脚本场景如下:
1. 通过 badboy 录制登录、航班预订、行程检查、登出场景脚本
2. 对登录场景做登录成功验证
3. 在虚拟用户登录系统后,进行三次航班预订,一次行程检查操作
4. 对三次航班预订的时间(当前日期之后时间)、出发地、目的地、座位、仓位进行参数化
任务四:多用户业务脚本创建
任务描述:JMeter中通过线程数来模拟用户数量,基于任务三,尝试模拟 3 位不同的用户同时在线进行操作,业务同任务三。
场景设计
事务
事务控制器
记录请求的响应时间
业务逻辑
逻辑控制器
定时器
思考时间
操作与操作之间的间隔时间
集合点
定时器 --> Synchronizing Timer
IP限制
负载机设置固定 IP
负载机创建所需数量的 IP
netsh interface ip add address "网卡名称" ip netmask
netsh interface ip delete address "网卡名称" ip
IP 池配置
用户参数
CSV数据文件
Sampler 中 IP 的参数化
Advanced
Implementation
非 Java 即可
Source address
${ip}
WebTours 日志开启
修改 WebTours\conf\httpd.conf
取消注释行:LoadModule logio_module modules/mod_logio.so
重启 WebTours 服务
多机联合负载
控制机
jmeter.properties 配置
remote_hosts=load_pc_ip:1099,load_pc_ip:1099[,...]
脚本和参数文件放置到固定的位置
推荐放置到 jmeter 的 bin 目录
推荐使用相对路径
运行远程负载
JMeter 4.x+
原因:自JMeter 4.0以来,RMI的默认传输机制将使用SSL,SSL需要密钥和证书才能工作。
解决方案
方法一:修改 jmeter.properties
server.rmi.ssl.disable=true
方法二:点击 create-rmi-keystore.bat 回车自动生成密钥
密钥文件 --> rmi_keystore.jks
负载机
获取本机 IP
jmeter-server.bat 自动识别的 ip
手工设置需要启用的 ip
修改一下 jmeter 启动时使用的IP
jmeter.bat
在 jmeter.bat 中查找 set ARGS 这一句
向上一行添加:set RMI_HOST=-Djava.rmi.server.hostname=你要启用的IP
然后在 set ARGS 这行最后加上 %RMI_HOST%
参数文件的目录结构需要和控制机相同
启动 jmeter-server.bat 服务
JMeter 4.x+
原因:自JMeter 4.0以来,RMI的默认传输机制将使用SSL,SSL需要密钥和证书才能工作。
解决方案
方法一:修改 jmeter.properties
server.rmi.ssl.disable=true
方法二:拷贝控制机密钥文件(非必要)
联合负载
控制机上运行脚本
运行 --> 远程启动
场景监控
JMeter 插件管理器
业务性能指标采集
JMeter 监听器
系统资源性能指标采集
安装插件:PerfMon (Servers Performance Monitoring)
线程组中添加 PerfMon 采集器
服务器端要开启 ServerAgent 服务
指标采集
JMeter 监听器
JMeter + Telegraf + InfluxDB + Grafana
JMeter
添加后端监听器
安装 InfluxDB
启动服务
创建数据库
安装 Telegraf
配置需要采集的指标项及写入源
启动服务
安装 Grafana
http://server_ip:3000
配置数据源
导入 JMeter 面板
CLI 模式
脚本修正
jmeter 界面中,在 PerfMon 中
手动填写保存文件:webtours\resource.jtl
CLI 运行
运行脚本
jmeter -n -t jmeter_script.jmx -l result.jtl
jmeter界面中,在 PerfMon 中浏览 webtours\resource.jtl
测试结果图
生成报告
jmeter.bat -g result.jtl -o ./result
报告汉化
jmeter4.x中文报告模版
jmeter5.x中文报告模版
LoadRunner 篇
LR 简介
定位
支持业内最广泛的技术和协议,简化负载测试
优势
直观且易用的界面让各种水平的性能测试人员都能轻松将其用于多种用途
适用于所有类型的 Web、移动和套装应用程序,无需大量定制
实施广泛而灵活的测试场景,以评估对每个应用组件的影响
通过灵活的硬件使用,将实际工作负载应用于任何应用程序
在单一视图内一目了然地查看最终用户响应时间、基础设施级别和网络明细数据
在 CI/CD 流程中轻松集成持续性能测试
产品线
LoadRunner Professional
LoadRunner Enterprise
LoadRunner Cloud
LoadRunner Developer
LR 组件
Virtual User Generator
记录最终用户业务流程,并创建一个自动化的性能测试脚本,称为Vuser脚本
Controller
组织、驱动、管理和监控负载测试
Analysis
查看、分析和比较负载测试的结果
Load Generators
运行用户业务脚本,扮演负载机角色的计算机
LR 负载测试流程
负载测试计划
定义性能测试需求,例如,并发用户的数量、典型的业务流程和所需的响应时间
创建用户脚本
使用 VuGen 将最终用户活动捕获到自动化脚本中
定义场景
使用 Controller 设置负载测试环境
运行场景
使用 Controller 来驱动、管理和监视负载测试
分析结果
使用 Analysis 创建图表和报告,并评估系统性能
VuGen 脚本
选择协议
Single Protocol
Multiple Protocols
Mobile
Popular
Recent
录制
脚本结构
vuser_init
登录/服务器初始化
vuser_action
操作,可重命名
vuser_end
退出/注销
录制选项
常规
脚本
协议
录制
HTML_based script
被测程序基于浏览器
URL_based script
被测程序基于浏览器,使用了 HTTPS 安全协议
被测程序基于浏览器,包含了 JS 并与服务端进行了交互
被测程序基于非浏览器
数据格式扩展
网络
端口映射
配置目标服务器捕获策略
HTTP 属性
高级
首选项
录制引擎
录制方案
关联
关联规则设置
录制模式
Web 浏览器
注意浏览器版本支持
Windows 应用程序
LoadRunner 代理录制
验证
运行时设置(Run-time Setting)
常规
运行逻辑
Action 的迭代次数
针对脚本
1次
单用户单循环
N次
单用户多循环
针对场景
1次
多用户单循环
N次
多用户N次循环
步
两次迭代之间的时间规则
针对脚本
As soon as
针对场景
设置模拟真实的延迟时间
日志
针对脚本
针对场景
首次调试场景
选择扩展日志
场景运行
选择标准日志
思考时间
脚本动作之间的思考时间
针对脚本
忽略思考时间
针对场景
设置模拟真实的思考时间
其他属性
全局参数配置
其他
错误处理
脚本执行中出现错误后的自动处理机制
多线程
以线程启动脚本
以进程启动脚本
自动事务
网络
速度模拟
浏览器
浏览器模拟
Internet 协议
代理服务器
首选项
启用图像何文本检查
下载筛选器
内容检查
数据格式扩展
关联设置
解决被测程序每次会话产生的动态值匹配问题
解决方法
自动关联
手动关联
增强功能
事务
度量每个用户执行一个或多个操作所需的时间
参数化
模拟用户不同行为,使用变量替换常量值
内容检查
检查Web服务器返回的内容是否正确
准备加载
迭代
循环执行操作
并发用户
设置运行同一业务流程的用户数量
方法
在 Controller 中设置用户数目
完成
Controller 场景
原理
按照设定的模式(虚拟用户数+负载方式+运行方式+观察指标)来执行单个或多个脚本
IP 欺骗
IP 类别
A类、B类、C类
根据不同的 Vuser 数量来选择合适的 IP 类别
设置步骤
查询 Controller 所在主机的 IP 地址
设置主机 IP 地址为固定 IP,完善 DNS 服务器地址
打开 LR 的 "IP Wizard" 向导,设置所需数量的 IP
维护脚本:脚本中访问地址修改为主机 IP 地址
菜单 -> 场景 -> 启用 IP 欺骗器
菜单 -> 工具 -> 专家模式
菜单 -> 工具 -> 选项 -> 常规 -> 选择 IP 欺骗的方式
手动场景
原理
手动指定每个脚本的虚拟用户数和场景的运行时间
集合点
运行包含集合点的脚本的手动场景,需要先设置集合点
设置方法
菜单 -> 场景 -> 集合
允许集合点 -> 设置集合点使用规则
运行步骤
选择脚本
场景设置
场景组
组名称
脚本路径
Vusers 数量
负载生成器
向被测系统加压(即产生大量用户的电脑或服务器)
连接方式
本地负载机
远程负载机
远程负载机必须安装 LoadRunner Agent 代理
启动 Agent Process
添加远程负载机的 IP 地址
点“更多”进行配置
运行时配额
Unix 环境
场景计划
场景计划维护
创建多个场景计划
选择场景
设定场景计划开始时间
实际计划
模拟真实场景
计划方式
全局场景
把单个或多个脚本作为一个整体场景来计划调度
设置
初始化
设置 Vusers 初始化的方式
启动 Vuser
设置 Vuser 启动方式
持续时间
设置场景运行时间
停止 Vuser
设置 Vusers 停止的方式
组场景
把每一个脚本作为单独场景来计划调度
设置
启动组
设定组内脚本启动的时间顺序规则
其余4项设置与全局场景相同
基本计划
标准场景运行
服务水平协议
为负载测试场景定义的具体目标
创建方法
新建 -> 按步骤创建针对脚本中某些事务的性能测试目标
使用方法
当手动产经测试达到设定的目标,则 SLA 通过,否则不通过
运行监控
场景运行状态
正在运行的虚拟用户数
运行时间
每秒点击数
通过的事务
失败的事务
错误数
可用图表
运行时图
事务图
网页资源图
系统资源图
Windows 资源
CPU
内存
磁盘读写
......
Unix/Linux 资源
网络图
Web服务器资源图
数据库资源图
面向目标场景
原理
设定测试要达到的并发数和虚拟用户的增长模式,场景自动按照这种模式运行直到达到设定的目标
运行步骤
选择脚本
场景设置
脚本名称
脚本路径
目标百分比
负载生成器
场景目标
目标配置文件名
场景开始时间
定义场景目标
目标类型
虚拟用户
每秒点击次数
服务器请求响应数
每秒事务数
每秒完成某操作数量
事务响应时间
某操作的耗时
每分钟页数
每分钟页面刷新次数
设定要达到的目标值
设定每分钟启动的虚拟用户数
场景设置
设置达到设定的目标后运行的时长
设置未达到设定目标后的运行方式
负载行为
设置为了达到目标而采取的加压方式
运行监控
Analysis 结果
概要报告
Analysis Summary
Statistics Summary
Scenario Behavior Over Time
Transaction Summary
HTTP Responses Summary
详细图表
0 条评论
下一页
为你推荐
查看更多