什么是性能测试?
模拟大量用户使用同一功能或同一模块,向服务器施压来检测服务器性能指标是否满足客户的性能需求
为什么做性能测试?
1.确保产品稳定
2.用户角度:保证用户体验度
3.公司角度:防止损失资金(产品不稳定,用户忠诚度底,用户卸载,失去用户)
什么是压力测试?
被测试的系统,在一定的访问压力下,看程序运行是否稳定/服务器运行是否稳定,确保系统是否具有良好的容错能力和可恢复能力
系统在极限情况下能否运行稳定
什么是负载测试?
在超负荷的环境中运行,程序是否能够承担/增加负载来发现系统中的问题
服务器最大负载,模拟大量用户对服务器不断施压,时期性能指标接近饱和值(最佳负载人数*CPU80%)
性能测试的基础知识:
1.HTML语音基础,可以参考教程很详细
2.C语言基础:需要了解分支变量循环,变量,函数
3.Http协议及请求方式(get post)接口返回状态码
a. HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等
b.HTTPS和HTTP的区别:
https协议需要到ca申请证书,一般免费证书很少,需要交费。
http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议
http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
http的连接很简单,是无状态的
HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全
请求方式:
get:客户端向服务器获取资源(要)
特点:1.把请求的资源放在连接(URL)里,并且部分参数明文展示 不安全
2.资源存入缓存,不安全
3.不同浏览器 URL 长度不同 IE 2083 Firefox 65536 Chrome 8181 Safari 80000
4.可收藏、数据量小
post:客服端向服务器提交表单数据(给)
特点:1.把表单数据放在请求实体(表单数据)中 安全
2.post不能缓存及放入收藏夹
3.不同浏览器 URL 长度不限
4.数据量大,速度慢(效率略慢)
4.XML,用来传输和储存数据 与HTML类似树形成对出现 参考教程
5.JSON:参考教程
JSON 指的是 JavaScript 对象表示法(JavaScriptObjectNotation)轻量级的文本数据交换格式
JSON 是轻量级的文本数据交换格式
JSON 独立于语言*
JSON 具有自我描述性,更易理解
6.数据库的基础应用: 增删改查
性能测试的术语?
(借鉴了卜了了的文章)点击可查看
1)并发数:虚拟用户数,同一时间点内,向系统产生交互的数量
2)注册用户数:当前系统中全部注册的用户的数量,这个跟并发数要区分开,这个不需要跟系统产生交互
3)在线用户数:当前系统时间段内用户登录的数量,也不一定要跟系统产生交互
4)事务:比如登录网站时,输入用户名、密码,点击登录,这3个操作为一个事务来讲,叫登录事务。
5)TPS,每秒通过的事务数---每秒处理的事务的数量,是衡量系统处理能力的指标,看系统好不好,就看这个指标
6)吞吐量:被测系统所产生的数据流量,eg,点击网页需要10兆,100人点击,就产生100*10结果即为为吞吐量
7)每秒点击率:客户端每秒真正发给服务端的请求数量。不能反应系统的性能,反应客户端给服务端发送请求的数量
8)思考时间:用户访问网页的停顿时间,比如输入用户名密码,点击登录---看用户名和密码对不对,这个时间就是思考等待时间
9)资源利用率:系统里cpu占有率、内存的使用率,还有io的使用,这些需要后台监控才能看出来
常见的性能问题
1、资源泄漏
包括内存泄漏,系统占用的资源(如内存、CPU等)随着运行时间不断增长,从而降低系统性能。系统响应越来越慢,甚至出现混乱。只有重启系统才能恢复到最初水平。
这类问题 产生的主要原因 是 有些对象(如GDI使用、JDBC连接)没有及时被销毁、内存没有释放干净、缓存区回收等。
内存泄漏
在进程执行过程中,如果一块内存区域,进程失去了对其的引用,也就是所该块内存区域永远都不会被进程使用到了,而操作系统又不知道进程失去了对其的引用,所以不能进行回收,这就会导致操作系统认为进程保留了很多内存空间,但进程本身却没办法去使用这些内存空间。
2、资源瓶颈
内部资源(线程、放入池的对象)变得稀缺,随着负载越来越慢,甚至系统挂起或出现异常错误。
这类问题产生的主要原因是线程过度使用或资源分配不足等造成的
3、CPU使用率达到100%,系统被锁定
代码中可能存在无限循环、缺乏保护(如对失败请求不断的重试)、频繁对数据库存取、没有使用数据高速缓存等
4、线程死锁、阻塞
可能因为程序对事物并发处理上的错误、资源争用引起锁阻塞和死锁等
如:线程获得顺序的算法不对,造成死锁、线程同步点上备份过多而造成通信阻塞
5、数据库连接成为性能瓶颈
可能是因为数据库存取交互过多、未使用连接池 或 连接池配置参数不当、单个SQL请求的数据量过多等问题
6、查询速度慢 或 列表效率低
主要原因是列表查询未使用索引、过于复杂的SQL语句、分页算法效率低
也可能是查询结果集过大或不规范的查询,如返回全部数据,查询全部字段而不是所需字段
7、受外部系统影响越来越大
主要原因有 向后端系统发出太多的请求、页面内容过多、经第三方系统认证比较复杂、网络连接不稳定或延迟