21世纪是云的世纪, 大规模云网已经出现了,而且在未来几年内会得到高速发展,从而使得基于云的系统也会越来越多。如果要开发一款高性能的云系统,服务器性能测试是一个必不可少的环节。今天,就来介绍一款新一代服务器性能测试工具Gatling。
一,什么是Gatling
Gatling是一款基于Scala 开发的高性能服务器性能测试工具,它主要用于对服务器进行负载等测试,并分析和测量服务器的各种性能指标。Gatling主要用于测量基于HTTP的服务器,比如Web应用程序,RESTful服务等,除此之外它拥有以下特点:
支持Akka Actors 和 Async IO,从而能达到很高的性能
支持实时生成Html动态轻量报表,从而使报表更易阅读和进行数据分析
支持DSL脚本,从而使测试脚本更易开发与维护
支持录制并生成测试脚本,从而可以方便的生成测试脚本
支持导入HAR(Http Archive)并生成测试脚本
支持Maven,Eclipse,IntelliJ等,以便于开发
支持Jenkins,以便于进行持续集成
支持插件,从而可以扩展其功能,比如可以扩展对其他协议的支持
开源免费
Gatling适用的场景包括:测试需求经常改变,测试脚本需要经常维护;测试环境的客户机性能不强,但又希望发挥硬件的极限性能;能对测试脚本进行很好的版本管理,并通过CI进行持续的性能测试;希望测试结果轻量易读等。
相关厂商内容
QCon上海技术训练营:OSGi、GitHub、Scrum深度培训,10月29-31日与您相约,了解详情! 2013年10月26日QClub大连站:大连软件开发者大会 QCon上海2013“团队文化”专题:构建持续前进的团队文化、价值观,工具与体系 GitHub中国上海Drinkup活动,就在QCon上海2013前夜,贝尼酒吧 QCon上海2013“游戏服务器实践”专题:游戏服务器运维经验、架构分享、性能策略
二,Gatling与JMeter
JMeter是目前使用最为广泛的服务器性能测试工具之一,它最大的特点就是拥有一套简单易用的GUI,但它最大的缺点也是由于简单易用导致它某些方面的不足,比如测试脚本(XML)不容易维护等。Gatling正是针对JMeter的劣势做了大量改进,因此相较于 JMeter,Gatling拥有以下优势:
在并发性能方面,Gatling使用了Akka Actors和Async IO, 而JMeter则采用了一个用户使用一个线程的方式 ,一旦并发线程过多,性能就急速下降,很难充分发挥硬件的能力。虽然两个工具都是基于JVM的,但是Actors模型的性能在高并发的情况下性能大大优于Threads,从而使得Gatling在更少的内存和CPU的情况下可以提供同样的测试能力,降低了测试成本。图1和图2分别展现了二者在并发性能方面的表现。
图1,JMeter 2.8
图2,Gatling 1.3.2
图片,测试环境和测试脚本参见:https://github.com/excilys/gatling/wiki/Benchmarks
其中图1和图2分别是JMeter和Gatling在300个用户并发下的测试结果。可以很明显的看出,JMeter的并发量在300上下波动,最高达到400,最低达到200,而Gatling几乎稳定在300。由此可见Gatling性能的稳定性。
在测试脚本方面,Gatling是Scala代码,而JMeter主要是XML代码。Gatling基于一套开源的Gatling DSL API,所以它的功能很容易扩展,也不需要使用者精通Scala语言。DSL的使用也更容易编写出简明,易读性和维护性高的代码,而且还可以使用版本工具进行更有效的管理。因为性能测试应该属于系统发布流程中必不可少的一个步骤,所以测试脚本应该和系统代码一样使用版本工具进行统一管理。
在报表系统上,Gatling提供了一套轻量并且十分友好的Html报表系统,使得用户可以更为快速而方便地查看和分析数据,相反,JMeter的报表系统却十分笨重,且使用也不方便。