一 性能测试是什么?
网上有很多,要说概念就得先说分类,性能测试,压力测试,负载测试,容量测试...在我看来,只是根据不同的测试目的(即想要达成的结果)而取的不同名字,手段都是一样的,不外乎模拟并发用户来访问系统,通过分析得到的参数评估系统性能。
我觉得对于性能测试比较简单的概括是:性能测试分为前端性能和后端性能。
我狭义的认为前端性能主要表现在页面加载上:一般会通过优化加载方式,减少数据传输量等方式进行优化。
后端性能就是通俗意义上我所做的性能测试,跟代码和机器性能有关,所以报告中通常需要标注测试环境。
二 性能测试的目的是什么?
1 验收是否满足性能指标
如果有给定的性能指标,则对代码进行测试,是否满足给定性能参数。即只是一个验证的过程
在进行验收时发现当下代码不满足需求性能时,需要进一步测试帮助开发定位问题。此时需要知道受压点是什么。
a 内部逻辑占用cpu资源,导致性能问题
b 数据源使用不合理:通常适当的改变读写方式,或者mydis与redis/memcache的变更,及增加节点
c 页面的加载方式有逻辑漏洞
2 找出服务的性能极限,作为优化和扩展的评估资料
性能验收通过,满足当下的性能需求。但是该服务之后可能会做很多扩展,需要进一步测试,找出性能极限和其限制因素,为扩展做出评估。
三 性能参数需要注意哪些参数?
而我们在测试中所关注的参数主要分为两类:服务端和机器两类参数。
首先服务端,我们说一个好的系统应该是"高并发,低延时",并发和响应时间就是两个最重要的参数
1 并发量:即系统同时处理事务的能力,通常我们用QPS(query per second)来表示,也有地方用RPS(request per second),TPS(吞吐量,准确来说应该是吞吐率)来表示.
但其实我们拿到的qps/tps/rps等大多都是1s内的处理能力,并不等同于同一时刻处理的请求。jmeter中定时器里有元器件可以进行控制,等待请求n个时,一同向服务器发请求。
2 响应时间:客户端发出请求,到接收到返回的时间。比如我访问baidu.com,按下enter之后等了1s打开了百度首页,那响应时间就是1s。这个过程的时间包括=网络传输时间+服务处理请求时间;尤其对于一个非web的请求,如果我本身的网络环境不好,就会导致传输时间过长,所以也有人仅用服务处理请求时间来表示响应时间。我认为两者均可,只要在报告里写清楚测试环境和字段含义即可。
3 错误率:前面两个是效率,这个是质量。未成功返回的,返回内容缺少不正确的,都算在这里。测试时可以根据返回的状态码或者返回内容做alert。
其次机器环境,主要是从保护硬件的方面来说,两个需要关注的参数是cpu和load,如下。
1 cpu:计算机的逻辑处理能力。CPU利用率反映的是CPU被使用的情况,当CPU长期处于被使用而没有得到足够的时间休息间歇,那么对于CPU硬件来说是一种超负荷的运作,需要调整使用频度。
2 Load Average:是 CPU的Load,它所包含的信息不是CPU的使用率状况,而是在一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息,也就是CPU使用队列的长度的统计信息。从另一个角度来展现对于CPU使用状态的描述,Load Average越高说明对于CPU资源的竞争越激烈,CPU资源比较短缺。对于资源的申请和维护其实也是需要很大的成本,所以在这种高Average Load的情况下CPU资源的长期“热竞争”也是对于硬件的一种损害。
好吧,上面都是从别人家拿来的概念,如果你的机器是双核,那么你的进程占用cpu 100%即占用了机器一半的cpu资源,load 为4,则表示当前队列有4个需要处理,而你的cpu限制了同时只能处理2个,所以就会有队列累积。所以做性能测试需要关注下cpu和load,来保证你的程序在一个良好的环境下运行吧。
3 网络I/O:磁盘通常是计算机最慢的子系统,也是最容易出现性能瓶颈的地方,因为磁盘离 CPU 距离最远而且 CPU 访问磁盘要涉及到机械操作。
尤其在有大量读写操作时更需要重点关注。
[mobdev@ip-192-168-1-15:52.77.116.218 trunk]$iostat -x Linux 3.14.27-25.47.amzn1.x86_64 (ip-192-168-1-15) 06/15/2016 _x86_64_ (4 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 2.25 0.00 0.12 1.45 0.01 96.17 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util xvda 0.01 4.10 1.85 32.75 239.05 890.75 32.65 0.52 15.05 0.62 2.14
4 网卡:这个是我在测试中注意到的,有一些资源很占用网卡。一个Outgoing一个InComing。当时一个模块是不停的被请求,它并不占用以上几项资源,限制其性能的因素就是网卡的Outgoing。当时只是为了找出这个性能限制因素。我并没有了解太多
常用的大概就这几个了,如果以后发现了特别的参数,再补充~