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