# 性能测试
> ### 什么是系统的性能
一个系统做出来了,客户需求说明书上的功能都已经完全且准确无误地实现了,这只表明系统能做事了,但是做得怎么样还有待验证,这里所说的,“做得怎么样”,就可以简单地理解为系统的性能。
> ### 什么是系统的性能测试?
性能测试,是指在一定的软件、硬件及网络条件下,通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试,从而发现系统的性能瓶颈。
也就是说,通过各种测试策略,模拟真实的用户使用场景,验证系统能“做得怎么样”。
> ### 性能测试的常用术语
* 并发用户
并发用户,一般分为2种情况。
一种是**绝对并发**,即所有的用户在同一时刻做同一件事情或者操作,这种操作一般指做同一类型的业务。
一种是**相对并发**。多个用户对系统发出了请求或者进行了操作,但是这些请求或者操作可以是相同的,也可以是不同的。对整个系统而言,仍然是有很多用户同时对系统进行操作,因此也属于并发的范畴。
**并发用户数的误解**:关于用户并发的数量,有2种常见的错误观点。 一种错误观点是把并发用户数量理解为使用系统的全部用户的数量或者是系统的注册用户,理由是这些用户可能同时使用系统;还有一种比较接近正确的观点是把在线用户数量理解为并发用户数量。实际上在线用户也不一定会和其他用户发生并发,例如正在浏览网页的用户,对服务器没有任何影响。
* 点击率(Hits)
单位时间用户向WEB服务器提交的HTTP请求数。点击率和TPS就是一个概念。需要注意的是,这里的点击并非指鼠标的一次单击操作,因为在一次单击操作中,客户端可能向服务器发出多个HTTP请求。
* 事务响应时间
事务响应时间指的是从客户端发起请求开始,到客户端接收到从服务器端返回的响应结束
标准可参考业界的3/5/10原则:
1. 在3秒钟之内,页面给予用户响应并有所显示,可认为是“很不错的”;
2. 在3~5秒钟内,页面给予用户响应并有所显示,可认为是“好的”;
3. 在5~10秒钟内,页面给予用户响应并有所显示,可认为是“勉强接受的”;
4. 超过10秒就让人有点不耐烦了,用户很可能不会继续等待下去。
* 90%的事务响应时间
90%的响应时间,是指在一次完整的测试过程中,所有事务的请求时间,按从小到大顺序排序,90%的事物所消耗的时间范围。
* 吞吐量(TPS)
吞吐量是我们常见的一个软件性能指标,对于软件系统来说,就是指软件系统在每单位时间内能处理多少个事务/请求等。
* 集合点
用来实现绝对并发
* 资源利用率(内存、CPU、网络、I/O的利用率等 Resource utilization)
资源利用率指的是对不同系统资源的使用程度,例如服务器的CPU(s),内存,网络带宽等。资源利用率通常以占用最大值的百分比n%来衡量。
> ### 性能测试策略
* 负载测试
在一定的软件、硬件及网络条件下,通过运行一种或多种业务在不同虚拟用户数量情况下,测试系统的性能指标是否在用户的要求范围内,用于确定系统所能承受的**最大有效用户数**以及不同用户数下的系统响应时间及服务器的资源利用率。
负载测试强调的是在一定的环境下系统能够达到的峰值指标,大多数的性能测试都是负载测试。这种方法的目的是找到系统处理能力的极限,通过模拟不同数量级的用户,找到如“响应时间不超过10秒”,“服务器平均CPU利用率低于65%”时的用户数。
负载测试场景:
~~~
50个用户同时下单请求 响应时间 消耗资源
100个用户同时下单请求 响应时间 消耗资源
150个用户同时下单请求 响应时间 消耗资源
200个用户同时下单请求 响应时间 消耗资源
~~~
* 压力测试
在一定的软件、硬件及网络条件下,通过模拟大量的虚拟用户向服务器产生负载,使服务器的资源处于极限状态下并长时间连续运行,以测试服务器在高负载情况下是否能够稳定工作。
* 绝对并发测试
通过模拟多个用户并发访问一个应用或一个应用的某个功能,同一个存储过程,或接口以及其他并发操作,测试程序是否支持多用户访问,是否存在死锁,线程同步的问题。
* 疲劳测试
疲劳测试,有些公司也叫可靠性测试,是软件系统长时间(8小时,7\*24小时)运行系统,检查系统是否能稳定运行,有没有内存泄漏等。
内存溢出--需要占用的内存超过系统的可用内存 (OOM:OutOfMemory)
内存泄漏--内存被长期占用,无法被回收。
程序没有做多线程处理:程序在单用户场景下运行成功,多用户运行则失败,提示连不上服务器。
线程同步的问题:程序实现的功能是,随机给用户分配不同的任务,单用户运行时,能成功分配;多用户并发申请任务时,所有用户得到的任务都是一样的。
> ### 性能测试指标
一般来说,性能测试关注的指标有这些:
1、事务成功率
2、事务平均响应时间和90%的事务响应时间
3、吞吐量(TPS)
4、CPU,内存,IO使用率
> ### 性能测试流程
1. 熟悉性能测试需求,确定性能测试点和测试指标;
2. 开发性能测试脚本并调优;
3. 准备性能测试环境,性能测试数据,设计性能测试场景;
4. 监控性能测试环境;
5. 运行性能测试;
6. 分析性能测试结果,提交性能测试bug单,跟踪问题单直到问题被解决;
7. 输出性能测试报告。
> ### Jmeter简介
Jmeter是一种预测系统行为和性能的负载测试工具。它通过模拟实际用户的操作行为和实行实时性能监测,来帮助测试人员更快的查找和发现问题。
* Jmeter工作原理图:
![](https://img.kancloud.cn/62/43/6243575a5c6bdb241b153b5cf5566c9f_918x398.png)
* Jmeter环境的搭建:
1. 因为JMeter是JAVA程序开发的,所以要先安装JDK;
2. 配置JAVA环境变量,包括:JAVA\_HOME,PATH,CLASSPATH;
3. 双击jmeter的bin目录里面的jmeter.bat文件,就可以启动Jmeter。
- 总章
- Oracle数据库
- 常见的Linux命令
- 理论内容整理
- 给你如下功能怎么测试
- 支付怎么测试
- 购物车怎么测试?
- 搜索功能怎么测试?
- 文件上传功能怎么测试?
- 登录功能怎么测试?
- 还款功能怎么测试?
- 订单功能怎么测试?
- 自动化测试篇
- 必记代码
- 接口测试篇
- 性能测试篇
- app测试篇
- 面试篇
- 项目篇
- 职业素养篇
- 真实案列分析
- 如何预防冷场
- redis
- 琪琪
- 禅道搭建手册
- 禅道搭建手册1
- 禅道的基本使用
- 基于Python3_Selenium的自动化
- Python3安装
- Python3基础
- 列表_元组_集合
- 函数_模块_类
- Python代码
- selenium环境
- selenium定位方式
- Selenium常见操作
- toast读取代码
- 添加用户代码
- 隐式等待与显式等待
- 循环添加用户
- 测试用例练习
- 测试用例优化
- Fiddler抓包工具
- 安装
- Fiddler使用
- 接口测试
- Jmeter的安装
- Jmeter使用
- jmeter+ant+jenkins接口自动化测试框架
- 接口安全测试
- 性能测试
- Nmon监控LInux系统
- Jmeter分布式
- 性能测试-具体案例
- Monkey
- 安装1
- Monkey使用
- appium自动化
- appium的安装
- appium基本使用
- 真机USB连接
- 问题排查
- Jenkins持续集成
- Jenkins安装
- Jenkins配置任务
- Python扩展内容
- Python连接数据库
- Python进行接口测试
- 开启服务