【性能测试】一、哪那么多概念,不就是这一条吗?
网上一搜性能测试,就会出现很多诸如性能测试、负载测试、压力测试、强度测试等一堆专有名词的解释。
但实际上我们不需要区分这么多。
那什么是性能测试?
高楼老师在[性能测试实战30讲]中给出了一个定义,我觉得参考价值很大。
性能测试针对系统的性能指标,建立性能测试模型,制定性能测试方案,制定监控策略,在场景条件之下执行性能场景,分析判断性能瓶颈并调优,最终得出性能结果来评估系统的性能指标是否满足既定值。
这个定义,其实也就是一个完整的性能测试流程了。
为什么要弄清楚?因为这些概念要抹平沟通的误解,让不同层级,不同角色的人,可以在同样的知识背景下沟通,也可以让做事情的人有清晰的逻辑思路。
一、性能测试需要有指标
指标这个东东通常在很多公司并没有明确的定义。可能老板随口一句“把系统压挂”,下面人就得开始张罗了。但是这个“把系统压挂”其实就是一种指标。
通常来说,有三种指标:时间指标、容量指标和资源利用率指标,具体这里先不展开。
二、性能测试需要有模型
模型,可以理解为场景。
比如说,要对一个返回广告的接口进行性能测试。那么用户进入首页之后,可能有50%的人会点击 banner 位广告,30%的人会点击中部位的广告,最后20%的人会点击侧边框广告。
那么,你基于这样的一个模型,在施加压力的时候就需要控制好比例。这些业务数据,通常来说是有渠道可以获得的。
三、性能测试要有方案
需要确定性能测试方案,以便指导后续的工作。
通常来说,内容如下:
- 测试环境
- 测试数据
- 测试模型
- 性能指标
- 压力策略
- 准入准出
- 进度风险
其中每一项内容的细化程度,要具体参考项目需要。
四、性能测试中要有监控
关于监控:
- 分层、分段
- 全局监控、定向监控
具体这里先不展开。
五、性能测试要有预定的条件
在测试场景执行之前,通常要确定如下的条件:
- 软、硬件环境
- 测试数据
- 测试执行策略
- 压力补偿
六、性能测试中要有场景
场景:在既定的环境(包括动态扩展等策略)、既定的数据(包括场景执行中的数据变化)、既定的执行策略、既定的监控之下,执行性能脚本,同时观察系统各层级的性能状态参数变化,并实时判断分析场景是否符合预期。
性能场景也要有分类,通常逃不出如下四大类:
1. 基准性能场景
这里要做的是单交易的容量,为混合容量做准备。
2. 容量性能场景
是最核心的性能执行部分。根据业务复杂度的不同,这部分的场景会设计出很多个。
3. 稳定性性能场景
最核心的元素是时间,而时间的设置应该来自于运维周期,而不是来自于老板、产品和架构等这些人的“拍脑袋”。
4. 异常性能场景
要做异常性能场景,前提就是要有压力。在压力流量之下,模拟异常。
那需要哪些异常?这也是要明确定义出来的。比如有宕主机、宕应用、宕网卡、宕容器、宕缓存、宕队列、宕流量控制、宕熔断等等。
总之,实际的场景中需要模拟什么异常,不是拍脑袋决定的,而是根据系统的业务架构和部署架构分析来的,不是看到有什么都宕一下。
另外,关于场景下对应的测试用例,不仅要描述测试脚本和测试数据,而且要描述需要哪些实时的判断和动态的分析,否则会影响性能结果。
七、性能测试中要有分析调优
相信有很多跟我一样的测试工程师,在进行性能测试的时候,其实也仅仅做的是性能验证,很少有进行分析调优,因为很难(o(╥﹏╥)o)。
但是,分析调优才是一个更能体现性能测试价值的重要元素。
八、性能测试肯定要有结果报告
结果报告是性能测试活动的价值内容体现,自然要展示领导关心的内容,比如调优前后的 TPS、响应时间以及资源对比。相比较而言,用了多少人,花了多少时间可以往后放一放。
九、总结
一图流。
本文参考:
高楼老师 性能测试实战30讲
原文地址:https://www.cnblogs.com/pingguo-softwaretesting/p/15008987.html
- 通过3个Hello World应用来了解ASP.NET 5应用是如何运行的(3)
- 为什么说2018年互联网创业机会将变少
- ASP.NET MVC Controller激活系统详解:IoC的应用[上篇]
- ASP.NET Core的配置(1):读取配置信息
- 权限管理和备份实例
- “协变”、“逆变”与Delegate类型转换
- 如今的人工智能是不是真的已经很聪明了?
- 【Scikit-Learn 中文文档】聚类 - 无监督学习 - 用户指南 | ApacheCN
- Delegate如何进行类型转换?
- 个性化推荐系统(一)---今日头条等的内容划分、分类
- ASP.NET Core的配置(2):配置模型详解
- 如何解决jQuery Validation针对动态添加的表单无法工作的问题?
- 数据结构 链表改进
- 数据结构 栈&队列
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 全面综述:图像特征提取与匹配技术
- opencv+python制作硬核七夕礼物
- opencv+python制作硬核七夕礼物
- 七夕节也要学起来,哈希哈希哈希!
- 目标检测器性能评估工具包
- istio 1.7发布
- AkShare-中国宏观-工业品出厂价格指数
- AkShare-中国宏观-采购经理人指数
- Python 为什么没有 void 关键字?
- 【特征提取+分类模型】4种常见的NLP实践思路
- 霸气!开源项目名字就叫BAT,具有语法高亮的Cat类命令
- 【Python基础系列】常见的数据预处理方法(附代码)
- 机器学习基础:类别不平衡问题处理方法汇总及实际案例解析
- 机器学习与统计学:R方代表什么?和P值的关系是什么?
- 机器学习基础:缺失值的处理技巧(附Python代码)