持续测试是一种测试实践,它包含了涉及全部质量特性的测试活动。因此,持续测试也包含非功能测试。众所周知,软件质量特性包含功能性、可靠性、可用性、效率等,前面已经介绍了一些功能性在持续测试中的落地方法,下面就讲解一下持续测试中的非功能测试。
性能测试估计是所有测试工程师都耳熟能详的术语,对于怎么进行性能测试,很多人能讲解一二,至于性能测试是什么,却难以给出定义。性能测试是一个统筹概念,指在一定的约束条件下测试系统能够承受的并发用户数,这里的约束条件指被测系统运行所需的软件、硬件、网络等外部约束条件。
在性能测试里面还涉及诸如负载测试、压力测试、极限测试、容量测试等概念,这些概念相互交织,并没有行业普遍认可的定义。
其实负载测试是模拟实际软件系统所承受的负载条件的测试。压力测试用于评估处于或超过预期负载时系统的运行情况。极限测试类似于压力测试,容量测试类似于负载测试。但是这些仅仅是概念上的分类,在测试过程中我们很难把负载测试和压力测试分得清清楚楚。
在实际工作中,性能测试、压力测试、负载测试很多时候是指一件事,即负载测试。所以在工作中,提到上述概念时,除非有其他前置条件,否则都可以按照负载测试准备。
持续测试中更倾向于制品交付过程的流畅、连续,因此在性能测试上会更加倾向于DevOps流水线双向驱动的性能测试技术的应用实践,尤其是性能测试即代码的技术落地。
性能测试就是通过模拟高并发访问完成的,这个模拟并不是真的有多个用户一起访问系统,而是通过工具完成的。性能测试工具模拟高并发有3种模式,分别是多进程、多线程和协程。进程、线程和协程的关系如图3-1所示。
图3-1 进程、线程和协程的关系
进程是为了更好地利用CPU资源而定义的,用于分配系统资源、标识任务。进程是系统资源分配的最小单元,主要占用地址空间、全局变量、文件描述、硬件等资源。操作系统以多进程的方式完成多个任务,这样可以充分地利用系统资源。
当前主流性能测试工具中,LoadRunner支持多进程,但是这个工具的授权费用非常贵。另外,多进程方式占用的系统资源较多,进程间的调度开销较大,因此在性能测试中并不推荐使用多进程方式。
线程就不一样了,线程降低了上下文切换的消耗,提高了系统的并发性。线程就好比一个汽车生产车间里的多条生产流水线,每条生产流水线并发处理相同事务的工作。若在一个进程中启动多个线程,以处理相同逻辑,就实现了并发处理的效果。LoadRunner、JMeter都支持多线程并发访问模型,其中JMeter是一款开源的性能测试工具。
在性能测试过程中,常使用多线程模型来模拟并发访问,这样既可以完成并发访问,也可以充分地利用系统资源。协程是一个相对较新的概念,它通过用户控制完成调度,而不是通过CPU完成的,这样就避免了陷入内核级别的上下文切换造成的资源消耗,同时突破了线程在I/O上的性能瓶颈。协程不需要多线程的锁机制,基于线程实现调度。
Locust是基于协程访问模型的性能测试工具。从事性能测试工作的读者很多应该听说过LoadRunner,不过知道Locust的人估计就比较少了。这两款工具各有优势,在实际项目中具体选用哪一个要根据情况而定。
不过,在容器化技术盛行的当下,LoadRunner已变得不那么好用。LoadRunner与Locust都提供了UI的脚本编辑和录制、场景设置等功能,这导致在容器上使用它们时只能实现并发模拟,脚本的编写则需要在客户端的PC上完成。对于容器上的性能测试工具,我们希望它具有以下功能。
综上所述,强烈推荐使用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种。
最后: 下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取【保证100%免费】
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!