转载:http://ningandjiao.iteye.com/blog/2004579

Gatling一直是久闻其名但是未得机会运用,正好最近有需求做性能测试,于是趁此机会熟悉了一下,可以说,这是目前最合我胃口的性能测试工具。其主要有以下特点:

  • 1. 绿色软件,即下即用。
  • 2. DSL脚本描述测试场景,高端大气,易读易维护
  • 3. 测试结果报表很漂亮,可读性高。
  • 4. 使用Scala的actors和异步IO,资源消耗小,且运行稳定。

最后提一下,其还提供了一个Recorder可以录制测试场景自动生成代码,个人不推荐是用这个功能,所有的测试场景最好自己用脚本写,这样的脚本更清楚,更易维护,而且,程序员应该喜欢脚本多过UI。 

安装和运行 
前面说了即下即用,下载地址:https://github.com/excilys/gatling/wiki/Downloads; 解压后整个软件的目录如下:

  • bin目录下有2个脚本,gatling和recorder, gatling用来运行测试, recorder用来启动录制脚本的UI的(不推荐使用),
  • conf目录是关于Gatling自身的一些配置。
  • lib目录是Gatling自身依赖的库文件。
  • results目录用来存放测试报告的。
  • user-files目录是用来存放测试脚本的。

当运行gating脚本的时候,其会扫描user-files目录下的所有文件,列出其中所有的Simulation(一个测试类,里面可以包含任意多个测试场景)。选择其中一个Simulation,然后填写Simulation ID和运行描述,这个都是为报告描述服务的。 



测试运行完成后,Gatling会自动把报告生成到results目录下, 一个测试报告内容非常详细,界面也非常美观。 



编写Gatling测试脚本 

下面是我自己写的一个测试脚本:

  1. import com.excilys.ebi.gatling.core.Predef._
  2. import com.excilys.ebi.gatling.http.Predef._
  3. import com.excilys.ebi.gatling.jdbc.Predef._
  4. import com.excilys.ebi.gatling.http.Headers.Names._
  5. import akka.util.duration._
  6. import bootstrap._
  7. class MySimulation extends Simulation {
  8. val httpConf = httpConfig
  9. .baseURL("http://www.bfsstudios.com.au")
  10. .acceptCharsetHeader("ISO-8859-1,utf-8;q=0.7,*;q=0.7")
  11. .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
  12. .acceptEncodingHeader("gzip, deflate")
  13. .acceptLanguageHeader("fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3")
  14. .disableFollowRedirect
  15. val headers_1 = Map(
  16. "Keep-Alive" -> "115")
  17. val scn = scenario("Scenario name")
  18. .exec(
  19. http("main page")
  20. .get("/")
  21. .headers(headers_1)
  22. .check(status.is(200)))
  23. .pause(0 milliseconds, 100 milliseconds)
  24. .feed(csv("worker_id.csv").circular)
  25. .exec(
  26. http("Worker page")
  27. .get("/worker/${worker_id}")
  28. .check(status.is(200)))
  29. setUp(scn.users(10).ramp(10).protocolConfig(httpConf))
  30. }
  • 1. 一个Gatling测试脚本就是一个scala的类,该类必须继承Simulation类,这样gatling才能识别其实一个测试集。该代码的后缀名必须为.scala
  • 2. 测试中可以通过httpConf为http请求做基本的配置。
  • 3. 一个scenario定义了一个测试用例。
  • 4. 一个测试用例可以包含多个http请求,每个http请求可以设置自己的http method ,http header等.
  • 5. 运行完之后,可以同个check检测每个请求的返回值
  • 6. 可以通过feeder为同一个用例注入不同的参数数据,feeder中的文件默认从user-files目录下的data文件中查找。
  • 7. 定义完scenario,通过setUp方法指定scenario的运行方式,我例子中的表示用10个用户并发跑测试,而ramp(10)的意思是10秒钟逐渐增加到10个用户,即每秒新起一个用户运行测试。

我的脚本的运行过程如下: 


DSL 
Gatling提供了为运行性能测试非常完善的DSL,这儿有其支持的所有的命令:http://gatling-tool.org/cheat-sheet/使用Gatling之前,扫一眼所有的命令,对写脚本非常有帮助,因此虽然Gatling是scala的脚本,没有scala经验的同志使用起来也不会有任何问题。

性能测试工具之Gatling的更多相关文章

  1. 新一代服务器性能测试工具Gatling

    新一代服务器性能测试工具Gatlinghttp://automationqa.com/forum.php?mod=viewthread&tid=2898&fromuid=2

  2. 负载,性能测试工具-Gatling

    前言 Gatling Gatling是一款功能强大的负载测试工具,它为易于使用,高可维护性和高性能而设计. 开箱即用,Gatling由于对HTTP协议的出色支持,使其成为负载测试任何HTTP服务器的首 ...

  3. Gatling新一代压力测试工具,新一代服务器性能测试工具Gatling

    Gatling新一代压力测试工具新一代服务器性能测试工具Gatlinghttp://www.infoq.com/cn/articles/new-generation-server-testing-to ...

  4. Web Service 性能测试工具比较

    背景 希望选择一款Web Service性能测试工具,能真实模拟大量用户访问网站时的请求,从而获取服务器当前的请求处理能力(请求数/秒).以微信服务器为例,每个用户用独立的登录token,做各种操作, ...

  5. 两个不同于LR和jmeter的性能测试工具

    LR图形界面,更利于使用 jmeter采用java,也能够扩展 相对于上两款工具,下面两款性能测试工具都采用了异步IO模型,扩展性都更强速度也更快 gatling:基于scala,速度相比更快性能压力 ...

  6. 性能测试工具 Web Service 性能测试工具比较

    [转自]https://testerhome.com/topics/3003 背景 希望选择一款Web Service性能测试工具,能真实模拟大量用户访问网站时的请求,从而获取服务器当前的请求处理能力 ...

  7. 性能测试工具 nGrinder 项目剖析及二次开发

    转:https://testerhome.com/topics/4225 0.背景 组内需要一款轻量级的性能测试工具,之前考虑过LR(太笨重,单实例,当然它的地位是不容置疑的),阿里云的PTS(htt ...

  8. 性能测试工具 wrk 安装与使用

    介绍 今天给大家介绍一款开源的性能测试工具 wrk,简单易用,没有Load Runner那么复杂,他和 apache benchmark(ab)同属于性能测试工具,但是比 ab 功能更加强大,并且可以 ...

  9. 性能测试工具Locust

    An open source load testing tool. 一个开源性能测试工具. define user behaviour with python code, and swarm your ...

随机推荐

  1. linux如何查看磁盘剩余空间

    [root@Linux var]# df -hl 文件系统 容量 已用 可用 已用% 挂载点 /dev/hdb2 75G 75G 0 100% / /dev/hdb1 99M 9.2M 85M 10% ...

  2. PHP GC垃圾回收机制之引用变量回收周期疑问

    普通的引用变量的销毁大家都知道, 当unset的时候如果refcount = 0 则认为无用, 销毁. 但是手册中提到一点会有递归引用的问题,很是奇葩 代码如下 <?php $a = 1; $a ...

  3. ABBYY把pdf转换成word的方法

    有时候我们在网上下载的资料文献是PDF格式文档,遇到喜欢的字句总忍不住想要收藏起来,但是PDF文档不同于普通的Word文档可以直接进行复制粘贴,需要下载安装相关的编辑工具,才能对文字内容进行编辑.倒不 ...

  4. jQuery中each的用法之退出循环和结束本次循环

    jQuery中each的用法之退出循环和结束本次循环 jQuery中each类似于javascript的for循环 但不同于for循环的是在each里面不能使用break结束循环,也不能使用conti ...

  5. 在VS 2015 RTM 版中 提示 未能正确加载 NuGetPackage包

      在原来的项目中曾经启用了Nuget在编译时还原包功能.这样就会在 *.sln在平行目录生成 一个.Nuget文件夹, 删除了它,就好了.   我分析原因是, VS 2015 使用的是 NugetP ...

  6. linux概念之/proc与/sys

    http://blog.chinaunix.net/uid-1835494-id-3070465.html  proc/x:1/sched http://bbs.chinaunix.net/threa ...

  7. HOCON 了解

    Spec This is an informal spec, but hopefully it's clear. Goals / Background The primary goal is: kee ...

  8. html之filedset标签

    fieldset 元素可将表单内的相关元素分组,当一组表单元素放到 <fieldset> 标签内时,浏览器会以特殊方式来显示它们,它们可能有特殊的边界.3D 效果,或者甚至可创建一个子表单 ...

  9. jquery淡入淡出

    html代码: <button id="b1" type="button">淡出</button> <button id=&quo ...

  10. [转]何为C10K问题

    我在学习网络编程的时候经常看到C10K问题,那么究竟什么是C10K问题呢?我看到了一篇好文章就转了过来,原文地址为:c10k问题 所谓c10k问题,指的是服务器同时支持成千上万个客户端的问题,也就是c ...