学习性能测试之前我们务必需要知道一些性能测试的理论知识与概念。
性能
性能这个词语,我们可能在生活中多多少少都接触到,比如一辆汽车的性能,这辆车百米加速多少秒,百公里油耗多少,一脚油门能不能够跑到50KM,这些都是汽车的性能。
一个软件的性能,需求说明书上的功能已完全且准确无误地实现,只表明系统能做事,但是做得怎么样还有待验证,“做得怎么样”,就可以简单地理解为系统的性能。
汽车能跑能停就表明车能够做事,车的百米加速多少秒,百公里油耗多少,这些就是做的怎么样?
性能: 客户需求说明书上的功能已完全且准确无误地实现,只表明系统能做事,但是做得怎么样还有待验证,“做得怎么样”,就可以简单地理解为系统的性能。
性能测试: 指在一定的软件、硬件及网络条件下,通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试,从而发现系统的性能瓶颈。也就是说,通过各种测试策略,模拟真实的用户使用场景,验证系统能“做得怎么样”。
并发用户
绝对并发:所有的用户在同一时刻做同一件事情或者操作,一般指做同一类型的业务,或所有用户进行完全一样的操作。
相对并发:多个用户对系统发出了请求或者进行了操作,但是这些请求或者操作可以是相同的,也可以是不同的。
相对并发包含绝对并发,且相对并发更接近用户的实际使用情况,因此对于大多数的系统,只有数量很少的用户进行绝对并发。对于 WEB 性能测试而言,这 2 种并发情况一般都需要进行测试,通常做法是先进行绝对并发测试。绝对并发一般发生在使用比较频繁的模块中,尽管发生的概率不是很大,但是一旦发生性能问题,后果很可能是致命的。绝对并发测试往往和功能测试关联起来,因为并发功能遇到异常通常都是程序问题,这种测试也是健壮性和稳定性测试的一部分。
点击率: 单位时间用户向 WEB 服务器提交的 HTTP 请求数。这个指标是 WEB 应用特有的一个指标:WEB 应用是“请求-响应”模式,用户发出一次申请,服务器就要处理一次,所以点击是 WEB 应用能够处理的交易的最小单位。点击率越大,对服务器的压力越大。点击率只是一个性能参考指标,重要的是分析点击时产生的影响。这里的点击并非指鼠标的一次单击操作,因为在一次单击操作中,客户端可能向服务器发出多个 HTTP 请求。
事务: 一个事务表示一个“从用户发送请求->web server 接受到请求,进行处理-> web server 向 DB 获取数据->生成用户的 object(页面),返回给用户”的过程。事务可能由一个请求,或一系列请求组成。
事务响应时间: 指的是从客户端发起请求开始,到客户端接收到从服务器端返回的响应结束,这个过程所耗费的时间,响应时间的单位一般为“秒”或者“毫秒”。:响应时间=网络响应时间+应用程序响应时间。标准可参考业界的 3/5/10 原则。
吞吐量: 指软件系统在每单位时间内能处理多少个事务/请求等,也就是系统的处理能力。在不同的场景下 TPS 有不同的诠释,比如数据库的吞吐量指的是单位时间内,不同 SQL 语句的执行数量,而在网络的吞吐量指的是在单位时间内在网络上传输的数据流量。吞吐量的大小由负载(如用户数)或行为方式来决定。
集合点: 通过创建集合点,可以配置多个 Vuser 同时执行同一操作。当某个 Vuser 到达该集合点时,将进行等待,直到参与该集合的全部 Vuser 都到达后,释放所有这些 Vuser。可通过将集合点插入到 Vuser 脚本来指定会合位置。
思考时间: 即请求间的停顿时间。实际中,用户在进行一个操作后往往会停顿然后再进行下一个操作,为了模拟这种用户行为而引入了该概念。在虚拟用户脚本中用函数 lr_think_time()来模拟用户处理过程,执行该函数时用户线程会按照相应的 time 值进行等待。
90%的响应时间: 指在一次完整的测试过程中,所有事务的请求时间,按从小到大顺序排序,90%的事物所消耗的时间范围。
最小和最大响应时间偏差很大时会导致平均值本身并不可信,此时,平均事务响应时间满足了性能需求,并不能表示系统的性能已经满足了绝大多数用户的要求。所以,在评估性能测试结果时,除了要考虑事务的平均响应时间,还要考虑90%的事物响应时间。
资源利用率: 指对不同系统资源的使用程度,如服务器的 CPU(s),内存,网络带宽,I/O 等。通常以占用最大值的百分比 n%来衡量。
负载测试: 在一定的软件、硬件及网络条件下,通过运行一种或多种业务在不同虚拟用户数量情况下,测试系统的性能指标是否在用户的要求范围内,用于确定系统所能承受的最大有效用户数以及不同用户数下的系统响应时间及服务器的资源利用率。负载测试强调的是在一定的环境下系统能够达到的峰值指标,目的是找到系统处理能力的极限。
压力测试: 在一定的软件、硬件及网络条件下,通过模拟大量的虚拟用户向服务器产生负载,使服务器的资源处于极限状态下并长时间连续运行,以测试服务器在高负载情况下是否能够稳定工作。压力测试强调在极端情况下系统的稳定性。压力测试方法测试目标系统在一定饱和状态下,例如 CPU、内存等在饱和状态下,系统还能否稳定地提供服务。
配置测试: 在不同的软件、硬件和网络条件下,通过运行一种或多种业务在一定的虚拟用户数量情况下,获得不同配置的性能指标,用于选择最佳的设备及参数配置。如 CPU、显卡、内存、硬盘、系统。
并发测试: 通过模拟多个用户并发访问一个应用或一个应用的某个功能,同一个存储过程,或接口以及其他并发操作,测试程序是否支持多用户访问,是否存在死锁,线程同步的问题。
疲劳测试
软件可靠性是软件系统在规定的时间内以及规定的环境条件下,完成规定功能的能力。
1)测试一个系统失效后重新恢复原有功能、性能的能力,涉及两个方面:①原有能力恢复的程度;②原有能力恢复的速度
2)长时间(7*24)运行系统,检查系统是否能稳定运行,有没有内存泄漏等。