为什么要写Gatling呢?网上已经有一些介绍Gatling的好文章了,比如两位TW同事的文章,可以看这里(我知道Gatling也是因为这位作者介绍的),还有这里。主要是因为最近在使用Gatling做压力测试,感觉这个工具非常好用,所以想结合自己的使用情况也推荐一下。Gatling是基于scala写的一个开源的压力测试工具,它的特点是简单易用,测试报告简洁漂亮,api通俗易懂。

JDK1.7

Gatling是基于jdk1.7开发的,所以还在用jdk1.6的同学需要先下载jdk1.7,才可以启动Gatling。顺便说一下,JDK1.7以后肯定是会替换JDK1.6的,但由于历史原因(主要是JDK1.6用的人实在太多了,我想也是由于JDK1.7升级的太晚了)大家都不想升级,我也这也是JAVA走下坡路的原因。

Scala

前面讲过Gatling是用scala写的,像scala、groovy和clojuer都是基于jvm开发的一种语言,不仅继承了java众多成熟的api和稳定的jvm,而且提供了更佳简洁易用的语法。基于某种语言的内核来重新设计一门新语言的这种做法,现在慢慢多了起来,这种做法的最大好处就是不用自己再重新设计编程语言底层相关的一些东西,而且可以使用原有语言大量的成熟api,让新语言就只专注地实现自己的功能,从而使新的语言性能稳定,易用性更高,甚至可以吸引一些原有语言的开发人员。

DSL

看过Galting的api的人就会发现,它的语法很像自然语言,比如测试一个get类型的http请求,它可能会这样写:

demo
1
2
exec(http("demo")
.get("http://www.myweb.com/helloworld")

是不是很容易懂,这种就是基于DSL来写的代码,关于DSL可以看这本书,这本书我还没怎么看,等看完了以后再做分享,DSL不单单只是把代码写得像自然语言那样简单。

API

要想了解Gatling的各种api,这里推荐看Gatling源码里面的HttpCompileTest这个测试类,这里包含了http几乎所有的api使用示例。下面是截取的代码片段,全部代码可以看这里

demo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
.group("C'est ici qu'on trouve des Poneys") {
exec(http("Catégorie Poney").post("/")
.param("baz", "${qix}")
.multivaluedParam("foo", Seq("bar")))
.exec(http("Catégorie Poney").post("/").multivaluedParam("foo", "${bar}"))
.exec(http("Catégorie Poney").get("/").queryParam("omg", "foo"))
.exec(http("Catégorie Poney").get("/").queryParam("omg", "${foo}"))
.exec(http("Catégorie Poney").get("/").queryParam("omg", session => "foo"))
.exec(http("Catégorie Poney").get("/").multivaluedQueryParam("omg", List("foo")))
.exec(http("Catégorie Poney").get("/").multivaluedQueryParam("omg", "${foo}"))
.exec(http("Catégorie Poney").get("/").multivaluedQueryParam("omg", List("foo")))
}
.uniformRandomSwitch(exec(http("Catégorie Poney").get("/")), exec(http("Catégorie Licorne").get("/")))
.randomSwitch(
40d -> exec(http("Catégorie Poney").get("/")),
50d -> exec(http("Catégorie Licorne").get("/")))
.randomSwitch(40d -> exec(http("Catégorie Poney").get("/")))
.pause(pause2)

这里说下randomSwitch这个方法,这个方法可以模拟负载均衡,比如上面40d和50d的两行代码,会有40%的几率执行上面一行代码,50%的几率执行下面一行代码。

Question

如果看过上面的示例代码代码,还不知道具体的api怎么用,可以到google group上面的分组提问题,很快就有人回答你的问题。github上面的问题区是让开发提bug或者feature用的,所以尽量不要在上面提问题。

Report

下面是Gatling的报告截图,界面很漂亮,而且参数很齐全,包括全部的请求数,成功/失败的请求数,请求的最大/最小/平均响应时间等。

Http & JMS

目前Gatling支持的协议不多,毕竟是一个轻量级的测试工具,目前只支持Http和JMS(以前用的时候还只是支持HTTP),随着Gatling的发展,以后肯定会支持更多的协议。现在大部分的系统和应用都是提供http协议的api,所以基于http协议的测试也能满足大部分的测试场景了。

压力测试工具——Galting的更多相关文章

  1. linux压力测试工具stress

    最近给PASS平台添加autoscaling的功能,根据服务器的负载情况autoscaling,为了测试这项功能用到了stress这个压力测试工具,这个工具相当好用了.具体安装方式就不说了.记录下这个 ...

  2. HTTP压力测试工具

    HttpTest4Net是一款基于C#实现的和HTTP压力测试工具,通过工具可以简单地对HTTP服务进行一个压力测试.虽然VS.NET也集成了压力测试项目,但由于VS自身占用的资源导致了在配置不高的P ...

  3. 微软压力测试工具 web application stress

    转自 http://www.cnblogs.com/tonykan/p/3514749.html lbimba  铜牌会员 这里给广大的煤油推荐一个web网站压力测试工具.它可以用来模拟多个用户操作网 ...

  4. Linux下四款Web服务器压力测试工具(http_load、webbench、ab、siege)介绍

    一.http_load程序非常小,解压后也不到100Khttp_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会把 ...

  5. DNS压力测试工具dnsperf简介

    dnsperf是我最近写的一个开源的DNS压力测试工具,用户可以用它来对DNS服务器或者Local DNS做压力测试.dnsperf目前的实现是单进程模式,通过epoll非阻塞地处理网络事件. dns ...

  6. sysbench压力测试工具简介和使用(二)

    sysbench压力测试工具使用: 2.1    测试数据库服务器的硬件配置信息如下: CPU:      24核心线程数,Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00G ...

  7. 网站压力测试工具webbench使用说明

    一.webbench简介        Webbench是有名的网站压力测试工具,它是由Lionbridge公司(http://www.lionbridge.com)开发.它的帮助文件和文档请到:ww ...

  8. Http压力测试工具HttpTest4Net

    HttpTest4Net是一款基于C#实现的和HTTP压力测试工具,通过工具可以简单地对HTTP服务进行一个压力测试.虽然VS.NET也集成了压力测试项目,但由于VS自身占用的资源导致了在配置不高的P ...

  9. 压力测试工具ab使用

    ab全名是apache bench,是apache自带的一款压力测试工具.它通过创建多个线程来模拟并发,测试目标是基于URL的,因此不论是什么web服务器都可以支持. 使用ab非常简单,进入apach ...

随机推荐

  1. Logger日志级别说明及设置方法、说明 (zhuan)

    http://blog.csdn.net/rogger_chen/article/details/50587920 ****************************************** ...

  2. Mvc4_传值取值应用

    Mvc路由运行机制:   首先,Web 浏览器向服务器发送一条URL 请求,如http://HostName/ControllerName/ActionName/Parameters. 其次,请求被A ...

  3. javascript强制转换详解

    转换成数值 Number函数强制转换成数值 数值->转换成原来的值 字符串->如果可以解析为数值,则转换成数值:否则转换成NaN或者0 true->1,falSe->0 und ...

  4. PHP 递归的密码

    http://www.cnsecer.com/4146.html 说实话 真的很炫 好像还是不好理解啊

  5. 第三章 Python容器:列表、元组、字典与集合

      数据结构的分类依据?基本的"数组"在python中是列表, 数据结构的作用?容器,盛放数据,是由原子组成的分子.可以将一群数据进行整合.拆分.重排. 3.2 列表 列表是啥?顺 ...

  6. Nemo Documents – 给文件添加标签 以日历的形式将文件呈现出来,很像 Outlook,你可以根据年、月、日来查看不同类型的文档

    Nemo Documents – 给文件添加标签   scavin(Google+) on 2012.03.28. Nemo Documents 是款文件组织管理工具(文档管理器),不是街道大妈胜似大 ...

  7. 实现 像网易云音乐 播放列表那样的弹出型Dialog

    如图 所示是点击Test之后的 弹出的Dialog (请无视我工程的命名) 20161017/**加入点击回调,假设dialog里放了一个TextView*/ 得先写一个点击回调 public int ...

  8. C#引用Office.word出错的解决办法-无法嵌入互操作类型“Microsoft.Office.Interop.Word.ApplicationClass” 【转】

    本文章转自 suchso 1.系统找不到 Microsoft.Office.Interop.Word" "Could not load file or assembly 'Micr ...

  9. JavaWeb基础: Web应用和Web服务器

    Web Server工作原理 假设工程师想提供一个网页浏览的Web应用给客户,需要经过以下几步: 在指定目录下新建资源(hello.html) 编写一个服务器ServerDemo监听请求和响应请求:S ...

  10. exit(0)和exit(1)区别

    exit(0):正常退出程序: exit(1):非正常退出程序: return:返回. return是语言级别的,表示调用堆栈的返回: exit是系统调用级别的,表示一个进程的退出.