网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
在实际工作中,性能测试、压力测试、负载测试很多时候是指一件事,即负载测试。所以在工作中,提到上述概念时,除非有其他前置条件,否则都可以按照负载测试准备。
持续测试中更倾向于制品交付过程的流畅、连续,因此在性能测试上会更加倾向于DevOps流水线双向驱动的性能测试技术的应用实践,尤其是性能测试即代码的技术落地。
性能测试工具概述
性能测试就是通过模拟高并发访问完成的,这个模拟并不是真的有多个用户一起访问系统,而是通过工具完成的。性能测试工具模拟高并发有3种模式,分别是多进程、多线程和协程。进程、线程和协程的关系如图3-1所示。
进程是为了更好地利用CPU资源而定义的,用于分配系统资源、标识任务。进程是系统资源分配的最小单元,主要占用地址空间、全局变量、文件描述、硬件等资源。操作系统以多进程的方式完成多个任务,这样可以充分地利用系统资源。
当前主流性能测试工具中,LoadRunner支持多进程,但是这个工具的授权费用非常贵。另外,多进程方式占用的系统资源较多,进程间的调度开销较大,因此在性能测试中并不推荐使用多进程方式。
线程就不一样了,线程降低了上下文切换的消耗,提高了系统的并发性。线程就好比一个汽车生产车间里的多条生产流水线,每条生产流水线并发处理相同事务的工作。若在一个进程中启动多个线程,以处理相同逻辑,就实现了并发处理的效果。LoadRunner、JMeter都支持多线程并发访问模型,其中JMeter是一款开源的性能测试工具。
在性能测试过程中,常使用多线程模型来模拟并发访问,这样既可以完成并发访问,也可以充分地利用系统资源。协程是一个相对较新的概念,它通过用户控制完成调度,而不是通过CPU完成的,这样就避免了陷入内核级别的上下文切换造成的资源消耗,同时突破了线程在I/O上的性能瓶颈。协程不需要多线程的锁机制,基于线程实现调度。
Locust是基于协程访问模型的性能测试工具。从事性能测试工作的读者很多应该听说过LoadRunner,不过知道Locust的人估计就比较少了。这两款工具各有优势,在实际项目中具体选用哪一个要根据情况而定。
不过,在容器化技术盛行的当下,LoadRunner已变得不那么好用。LoadRunner与Locust都提供了UI的脚本编辑和录制、场景设置等功能,这导致在容器上使用它们时只能实现并发模拟,脚本的编写则需要在客户端的PC上完成。对于容器上的性能测试工具,我们希望它具有以下功能。
支持在PC上编辑脚本并调试。
支持在容器上编辑脚本并调试。
支持在服务器端进行性能测试。
拥有服务器端的性能场景设置功能。
拥有服务器端无UI的场景设置功能。
能和CI(Continuous Intergration,持续集成)系统集成。
综上所述,强烈推荐使用Locust。即使不在容器上使用,Locust也是不错的选择。Locust是一款开源的性能测试工具,支持使用Python代码定义用户行为,并采用纯Python描述测试脚本。
使用Locust可以模拟百万级并发用户访问系统。除HTTP/HTTPS之外,Locust还可以用来测试使用其他协议的系统,只需要采用Python调用对应的库并对请求进行描述即可。
Locust还是分布式的用户负载测试工具,可用来对网站或其他系统进行负载测试。使用Locust可以测试出系统并发处理的用户量,这完全是基于时间的,因此单台机器可能支持几千个并发用户。
LoadRunner与其他采用进程和线程的测试工具则很难在单台机器上模拟较高的并发压力。相比许多其他事件驱动型应用,Locust不使用回调,而使用轻量级的处理方式——协程。
协程是一种用户态的轻量级线程,由用户控制。协程拥有自己的寄存器上下文和栈,在切换进行时,协程会将寄存器上下文和栈保存到其他位置。等到切换回来时,协程不仅可以恢复保存的内容,从而降低内核切换的消耗,还可以不加锁地访问全局变量。协程避免了系统级资源的调度,因而大幅提高了单台机器的并发能力。
在GB/T 25000.10的八大质量特性中,性能效率这个独立的质量特性包含时间特性、资源利用性、容量、性能效率的依从性等质量子特性。利用技术手段检验信息系统性能效率的过程称为性能测试。通过性能测试,我们可以评估信息系统与性能效率要求的符合程度。信息系统通常包含以下方面的信息。
并发用户数:这是针对服务器而言的,指在同一时刻与服务器进行交互的在线用户数量。在压力测试期间,并发用户数指同时执行一个或一系列操作的用户数量,或同时执行某个脚本的用户数量。不同场景下的并发情况是不一样的,在实际的测试工作中,要根据具体的需求设置并发用户数。
最大并发用户数:用来描述信息系统的最大服务能力。
吞吐量:单位时间内系统所能处理的请求数量。对于交互式系统,吞吐量的单位通常是字节数/秒、页面数/秒或请求数/秒;对于非交互系统,吞吐量的单位通常是事务数/秒。
响应时间:分为用户响应时间和系统响应时间两种。用户响应时间指用户所能感受到的系统对其操作的响应时间。人的眼睛由于“视觉暂留”现象只能察觉0.1s以上的视觉变化,因此用户响应时间只要不超过0.1s即可。系统响应时间指计算机对用户的输入或请求做出应答的时间。压力测试一般站在用户的角度考虑问题,因而衡量的是用户响应时间。
资源利用率:描述信息系统性能状态的一系列数据指标,包括被测服务器的CPU利用率、内存使用率、磁盘I/O速率、网络吞吐量等。
等待时间:信息系统用户在进行业务操作时发出的两个连续请求的时间间隔。
性能测试用来评估系统的服务能力。性能测试主要分为以下3种。
负载压力测试:通过不断给系统增加负载,观察系统的性能变化并确定系统在满足一系列性能指标(包含响应时间、CPU利用率、内存使用率、网络吞吐量、磁盘I/O速率等,其中关键的性能指标是响应时间、CPU利用率和内存使用率)的前提下所能承受的最大负载。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**