当前位置:网站首页>PingCode 性能测试之负载测试实践
PingCode 性能测试之负载测试实践
2022-07-04 15:20:00 【InfoQ】
什么是性能测试
性能测试的类型
- 负载测试:通常进行负载测试是为了了解系统在特定预期负载下的行为表现。此负载可以是应用程序上的预期并发用户数,该应用程序在设定的持续时间内执行特定数量的事务。该测试将给出所有重要业务关键事务的响应时间。测试期间还会监控数据库、应用服务器等,这将有助于识别应用软件和安装软件的硬件中的瓶颈
- 压力测试:通常用于了解系统内的容量上限。进行这种测试是为了确定系统在极端负载方面的稳健性,并帮助应用程序管理员确定如果当前负载远高于预期的最大值,系统是否能够充分运行。
- 浸泡测试:也称为耐久性测试,通常用于确定系统是否能够承受持续的预期负载。在浸泡测试期间,会监控内存利用率以检测潜在的泄漏。同样重要但经常被忽视的是性能下降,即确保在长时间持续活动之后的吞吐量和响应时间与测试开始时一样好或更好。它本质上涉及在很长一段时间内向系统施加大量负载。目标是发现系统在持续使用下的行为方式。
- 尖峰测试:通过突然增加或减少大量用户产生的负载,并观察系统的行为来完成的。目标是确定性能是否会受到影响,系统会失败,还是能够处理负载的剧烈变化。
- 断点测试:断点测试类似于压力测试。随着时间的推移施加增量负载,同时监控系统的预定故障条件。断点测试有时被称为容量测试,因为可以说它确定了系统将按照其要求的规范或服务水平协议执行的最大容量。应用于固定环境的断点分析结果可用于根据所需的硬件或应触发云环境中的横向扩展事件的条件来确定最佳扩展策略。
- 配置测试:不是从负载角度测试性能,而是创建测试以确定系统组件的配置更改对系统性能和行为的影响。一个常见的例子是尝试不同的负载均衡方法。
- 隔离测试:隔离测试并不是性能测试所独有的,而是涉及重复执行导致系统问题的测试。这样的测试通常可以隔离和确认故障域。
性能测试基本流程
- 确定测试环境:通过识别可用的硬件、软件、网络配置和工具,测试团队可以设计测试并尽早识别性能测试挑战。性能测试环境选项包括:
- 确定性能指标:除了确定响应时间、吞吐量和约束等指标外,还要确定性能测试的成功标准是什么,具体根据项目内团队规定。
- 计划和设计性能测试:考虑到用户可变性、测试数据和目标度量的性能测试场景,可以创建一个或两个模型。
- 配置测试环境:准备监控资源所需的测试环境机器和工具。
- 开发测试脚本
- 执行测试计划:运行性能测试,监控和捕获生成的数据。
- 分析、报告、重新测试:分析数据并分享得到的性能结论。使用相同的参数和不同的参数再次运行性能测试。
性能测试工具
- JMeter:是一个 Apache 性能测试工具,可以对 Web 和应用程序服务进行负载测试。 JMeter 插件在负载测试中提供了灵活性,并涵盖了图形、线程组、计时器、函数和逻辑控制器等领域。 JMeter 支持集成开发环境 (IDE),用于对浏览器或 Web 应用程序进行测试记录,以及用于负载测试基于 Java 的操作系统的命令行模式。
- LoadRunner:由 Micro Focus 开发,用于测试和测量应用程序在负载下的性能。 LoadRunner 可以模拟成千上万的最终用户,并记录和分析负载测试。作为模拟的一部分,该软件会在应用程序组件和最终用户操作之间生成消息,类似于按键点击或鼠标移动。 LoadRunner 还包括面向云使用的版本。
- NeoLoad:由 Neotys 开发,为 Web 和移动应用程序提供负载和压力测试,专门用于在发布前测试应用程序以实现 DevOps 和持续交付 IT 团队可以使用该程序来监控 Web、数据库和应用程序服务器。 NeoLoad 可以模拟数百万用户,并在内部或通过云执行测试。
性能测试指标
- 吞吐量:系统在指定时间内处理多少个信息单元。
- 响应时间:从用户输入的请求到系统开始响应该请求之间经过的时间量。
- 带宽:每秒可以在工作负载之间移动的数据量,通常是指通过网络。
- 每秒 CPU 中断次数:取的是平均值。指处理器每秒接收和处理的硬件中断数。
- 内存使用:计算机上进程可用的物理内存量。
- 磁盘使用:磁盘忙于执行读取或写入请求的时间量
一次非系统性的性能测试实践
测试类型
测试范围
- 涉及的子产品: Project , Testhub , Wiki , Insight , Goals , Flow 6个子产品。
- 基础服务:Typhon 服务
测试目的
- 保障系统多用户情况下系统的可靠性:通过实施不同的性能测试场景,评估并验证系统在高负载下核心功能的可靠性。
- 提供一轮系统性能测试情况,为下一轮生产环境的性能测试提供基线数据。
- 评估系统部署资源的合理性:不断搜集和分析性能测试过程数据,对接下来的系统部署所需的系统资源进行评估和建议。
- 优化和解决系统性能问题:在测试过程中,优化系统各项参数和解决发现的系统性能问题。
测试指标标准
- 根据运维提供的在线用户数,来计算生产环境的用户 TPS,通过基准环境的测试,来验证真实的 TPS 是否满足生产环境的 TPS 需求,以及我们的运维架构和资源使用是否合理。
- 保证在 CPU 利用率小于80%,内存小于80%,并且没有错误的 Http 请求。
测试实践
测试工具
- 采用 Jmeter + Grafana + Influxdb 的方式来完成性能测试。
- Jmeter GUI 图形界面工具:为了更方便开发和调试,使用图形界面编写所需要测试计划。
- Jmeter NO-GUI模式:支持大型负载测试场景、提高脚本执行效率以及方便后续将脚本配置到 Jenkins 上实现持续集成,做成自动化测试。
环境搭建
- 安装 Java 的 Jdk,版本跟 Jmeter 版本相对应。
- 安装 Jmeter 工具
Jmeter 中线程数取值依据
- 首先要明白用户数、线程数、TPS
- 通过TPS基准计算出压力机线程数
Jmeter 项目目录结构
bin
templates
jmeter.properties
templates.xml
项目准备以及配置文件修改
pc-perf
cd jmeter/bin
git clone [git项目地址]
- common文件夹:用来存放本次测试计划模版以及模版配置文件 templates.xml。
- 子应用目录:与 common 同级目录是各子应用目录,如目标 Goals、项目 Project 等。该目录下用来存放个子应用对应的 .jmx 测试计划文件。
template.files = /bin/pc-perf/common/templates/templates.xml
JMeter 模版开发
- 打开浏览器的开发者工具
- 获取signin信息
fetch("http://at.pingcode.fun/**/signin",
{
"credentials":"include",
"headers":{
"accept":"application/json, text/plain, */*",
"accept-language":"zh-CN,zh;q=0.9",
"content-type":"application/json"
},
"referrer":"http://at.pingcode.fun/signin",
"referrerPolicy":"no-referrer-when-downgrade",
"body":"{\"signin_name\":\"**\",\"password\":\"**\",\"captcha_code\":\"\"}",
"method":"POST",
"mode":"cors"
});
- 通过上一步可以在浏览器的开发者工具中 Copy request headers 获取完整的请求头信息
- 过元件自带的“从剪贴板添加”功能,一键配置请求头信息
- 使用Javascript语言来写脚本
- 提取用户、团队、token信息
// 此处loginResponse_1是从JSON提取器的调试结果可得到
var loginResponseString = vars.get("loginResponse_1")
var loginResponse = JSON.parse(loginResponseString)
log.info("loginResponseString:"+ loginResponseString)
// 设置该线程组内的变量
vars.put("user", JSON.stringify(loginResponse.user))
vars.put("team", JSON.stringify(loginResponse.team))
vars.put("access_token", loginResponse.access_token)
// 将用户、团队、token信息声明成全局变量,用于后面线程组使用
${__setProperty(user, ${user})}
${__setProperty(team, ${team})}
${__setProperty(access_token, ${access_token})}
data.value
loginResponse_1
- 修改用户参数处理器
局部变量调用方式:
元件中使用:${key}
脚本中使用:vars.get(key)
- 修改BeanShell预处理程序
全局变量的调用方式:
在元件中使用:${__P(key)}
在脚本中使用:props.get(key)
name:模版名称,用于模版列表中展示
fileName: 要配置成模版的测试计划的路径
description:模版描述
parameters:模版参数,可通过模版UI页面对测试计划.jmx文件动态传参。
通过[=key]的形式接收模版的参数
开发子应用的 API 测试计划
通过 Non-GUI 方式执行所有测试计划
jmeter -n -t <testfile> -l <logfile>
示例:jmeter -n -t test.jmx -l test.jtl
讲解:以命令行的方式运行test.jmx脚本并生成test.jtl的日志报告。
-h 打印使用信息并退出
-n 非GUI模式 -> 在非GUI模式下运行JMeter
-t 测试文件<参数> ->要运行的jmeter测试(.jmx)文件。
-l 日志文件<参数> ->生成的日志文件
-H 设置要使用的JMeter代理服务器
-P 设置要使用的JMeter代理服务器端口
资料
- 维基: https://en.wikipedia.org/wiki/Software_performance_testing
- Jmeter: https://jmeter.apache.org/
- LoadRunner: https://en.wikipedia.org/wiki/LoadRunner
- NeoLoad: https://www.tricentis.com/products/performance-testing-neoload/
边栏推荐
- 散列表
- ONgDB图数据库与Spark的集成
- Cypher task design and task locking mechanism of isomorphic and heterogeneous graphs
- 一图看懂ThreadLocal
- 建筑建材行业经销商协同系统解决方案:赋能企业构建核心竞争力
- Embedded software architecture design - function call
- 周大福践行「百周年承诺」,真诚服务推动绿色环保
- 网页游戏引擎
- PingCode 性能测试之负载测试实践
- Research Report of exoskeleton robot industry - market status analysis and development prospect prediction
猜你喜欢
被PMP考试“折磨”出来的考试心得,值得你一览
Understand ThreadLocal in one picture
~89 deformation translation
"Cannot initialize Photoshop because the temporary storage disk is full" graphic solution
go-micro教程 — 第二章 go-micro v3 使用Gin、Etcd
The Ministry of human resources and Social Security announced the new construction occupation
detectron2安装方法
How to decrypt worksheet protection password in Excel file
基于wifi控制的51单片机温度报警器
程序员怎么才能提高代码编写速度?
随机推荐
线性时间排序
[acwing] 58 weeks 4489 Longest subsequence
Market trend report, technical innovation and market forecast of taillight components in China
Readis configuration and optimization of NoSQL (final chapter)
世界环境日 | 周大福用心服务推动减碳环保
Hash table
建筑建材行业经销商协同系统解决方案:赋能企业构建核心竞争力
GO开发:如何利用Go单例模式保障流媒体高并发的安全性?
Research Report on plastic recycling machine industry - market status analysis and development prospect forecast
Maximum subarray and matrix multiplication
PyTorch深度学习快速入门教程
Hair growth shampoo industry Research Report - market status analysis and development prospect forecast
散列表
[Acwing] 58周赛 4490. 染色
矿产行业商业供应链协同系统解决方案:构建数智化供应链平台,保障矿产资源安全供应
Go语言循环语句(第10课下)
Understand ThreadLocal in one picture
Research Report on market supply and demand and strategy of China's plastics and polymer industry
VMware Tools和open-vm-tools的安装与使用:解决虚拟机不全屏和无法传输文件的问题
Object.keys()的用法