21世纪是云的世纪,大规模云网已经出现了,而且在未来几年内会得到高速发展,从而使得基于云的系统也会越来越多。如果要开发一款高性能的云系统,服务器性能测试是一个必不可少的环节。今天,致臻数据就来介绍一款服务器性能测试工具Gatling。
服务器性能测试工具Gatling01一、什么是Gatling
Gatling是一款基于Scala开发的高性能服务器性能测试工具,它主要用于对服务器进行负载等测试,并分析和测量服务器的各种性能指标。Gatling主要用于测量基于HTTP的服务器,比如Web应用程序,RESTful服务等,除此之外它拥有以下特点:
支持AkkaActors和AsyncIO,从而能达到很高的性能
支持实时生成Html动态轻量报表,从而使报表更易阅读和进行数据分析
支持DSL脚本,从而使测试脚本更易开发与维护
支持录制并生成测试脚本,从而可以方便的生成测试脚本
支持导入HAR(HttpArchive)并生成测试脚本
支持Maven,Eclipse,IntelliJ等,以便于开发
支持Jenkins,以便于进行持续集成
支持插件,从而可以扩展其功能,比如可以扩展对其他协议的支持
开源免费Gatling适用的场景包括:测试需求经常改变,测试脚本需要经常维护;测试环境的客户机性能不强,但又希望发挥硬件的极限性能;能对测试脚本进行很好的版本管理,并通过CI进行持续的性能测试;希望测试结果轻量易读等。
02二、Gatling与JMeter
JMeter是目前使用最为广泛的服务器性能测试工具之一,它最大的特点就是拥有一套简单易用的GUI,但它最大的缺点也是由于简单易用导致它某些方面的不足,比如测试脚本(XML)不容易维护等。Gatling正是针对JMeter的劣势做了大量改进,因此相较于JMeter,Gatling拥有以下优势:
在并发性能方面,Gatling使用了AkkaActors和AsyncIO,而JMeter则采用了一个用户使用一个线程的方式,一旦并发线程过多,性能就急速下降,很难充分发挥硬件的能力。虽然两个工具都是基于JVM的,但是Actors模型的性能在高并发的情况下性能大大优于Threads,从而使得Gatling在更少的内存和CPU的情况下可以提供同样的测试能力,降低了测试成本。图1和图2分别展现了二者在并发性能方面的表现。
Gatling测试图1.JMeter2.8
Gatling测试图2.Gatling1.3.2图片
其中图1和图2分别是JMeter和Gatling在个用户并发下的测试结果。可以很明显的看出,JMeter的并发量在上下波动,最高达到,最低达到,而Gatling几乎稳定在。由此可见Gatling性能的稳定性。
在测试脚本方面,Gatling是Scala代码,而JMeter主要是XML代码。Gatling基于一套开源的GatlingDSLAPI,所以它的功能很容易扩展,也不需要使用者精通Scala语言。DSL的使用也更容易编写出简明,易读性和维护性高的代码,而且还可以使用版本工具进行更有效的管理。因为性能测试应该属于系统发布流程中必不可少的一个步骤,所以测试脚本应该和系统代码一样使用版本工具进行统一管理。
在报表系统上,Gatling提供了一套轻量并且十分友好的Html报表系统,使得用户可以更为快速而方便地查看和分析数据,相反,JMeter的报表系统却十分笨重,且使用也不方便。
03三、如何在项目中使用Gatling
对于Gatling这样一个全新的服务器性能测试工具,是否能将它很好的运用到项目中并发挥其优势,这个是一个困扰测试决策者的问题。下面我将结合在一个真实项目中使用和部署Gatling的经验来解答这个问题。
.搭建测试环境
在一个大型的Web项目中,测试环境的搭建是项目测试工作开始的第一步,也是最为关键的一步,因为测试环境直接影响到测试成本和测试结果。由于这个项目对于性能的要求并不是很高,我们经过讨论和分析,决定选取虚拟机作为测试平台。这就意味着被测系统以及测试客户端可以使用的硬件资源比如CPU和内存十分有限,因此需要测试工具能充分使用有限的资源发挥最大的性能。
.进行负载测试
为了快速实现测试脚本,我首先选择了使用Gatling录制功能进行脚本录制,成功录制以后会在指定的“Outputfolder”目录下面生成你指定“ClassName”为名字的脚本,见图3。
Gatling测试图3.GatlingRecorder
根据图3的配置,录制好的脚本存放在/Users/twer/work/gatling/user-files/simulations/Common/MyRecordedSimulation.scala。生成的部分脚本代码如下:
classMyRecordedSimulationextendsSimulation{val