转载:http://www.51testing.com/html/10/26810-852966.htmlhtml
首先 抄袭一个Gatling的介绍git
Gatling适用的场景包括:测试需求常常改变,测试脚本须要常常维护;测试环境的客户机性能不强,但又但愿发挥硬件的极限性能;能对测试脚本进行很好的版本管理,并经过CI进行持续的性能测试;但愿测试结果轻量易读等。github
是thoughtworks的工程师对其的描述,懒的本身写了。web
跑起来以后,就须要研究一下到底怎么写和怎么录制了。bootstrap
第一,gatling使用的是Scala语言,网站说学起来不难,给出的学习地址是http://twitter.github.io/scala_school/服务器
国内的教学网站http://www.scalachina.com/并发
不过我本身习惯了直接跳过日后看,先知道因此然,而后再去知道然less
直接拿示例看:工具
package foo.bar (1)
import com.excilys.ebi.gatling.core.Predef._ (2)
import com.excilys.ebi.gatling.http.Predef._
import com.excilys.ebi.gatling.jdbc.Predef._
import Headers._
import akka.util.duration._
import bootstrap._
import assertions._
class SimulationWithFollowRedirect extends Simulation { (3)
//你的代码从这里开始
val scn = scenario("个人场景")
.exec(http("个人页面")
.get("http://mywebsite.com/page.html")) (4)post
setUp(scn.users(10)) (5)
// 代码结束
}
1. 包的写法没啥特殊
2. 这个是惟一必须的引入,要否则,啥也跑不起来
3. 全部的类都是集成了Simulation这个类,类的定义很标准化
4. val是保留关键字,用来定义你的测试场景, 相似 def的用法
5. 从这里开始就是你自定义的场景列表了
教程说,全部的demo基于http://excilysbank.gatling.cloudbees.net,惋惜我连不上。有条件的本身下载,部署一个:https://github.com/excilys/excilys-bank
而后使用Recoder就能够进行场景录制了,而后获得用于回放的scala文件,如何使用Recorder,请参考另一篇文章。
咱们拿自带的 BasicExampleSimulation.scala 做为示例
咱们能够看到,该文件主要包含了以下几个部分
1. HTTP protocol configuration
最重要的是定义了使用那个地址做为base URL,而且做为一个Scala value定义好之后,能够在simulation中直接调用,语法是:
val httpProtocol = http
.baseURL("http://excilys-bank-web.cloudfoundry.com")
2. Headers 定义
Header是做为一个Scala Map来定义的。在这里,你能够定义每一个request(请求)在发送给server时使用的header。 这这里预先定义以后,就能够在scenario中使用。虽然看起来把common的header定义出来没什么意思,实际上,这也是变相添加测试压力和模拟真实用户操做的必要方法。语法是:val headers_1 = Map(....)
3. scenario (场景)定义
在simulation以前须要定义好执行的场景,由于:在同一个simulation中能够同时包含多个scenario。做为一个Scala value, 语法是:val scn = scenario("场景的名字") ...
scenario主要的结构就是由exec和pause组成。exec用于描述要执行什么操做,pause用例模拟用户的思考时间
val scn = scenario("Login action")
.group("Login"){
exec(
http("request_3")
.post("/login")
.headers(headers_3)
.param("username", "user1")
.param("password", "password1")
)
.pause(1 milliseconds, 100 milliseconds)
.exec( ...)
.pause(...)
}
... ...
上面的示例能够看到,exec要执行的操做是一个http,该http操做的名字是request_3,基于base URL采用了post方式发出请求,并附带了两个参数param。其中的header就是在headers里预先定义好的headers_3。而后执行了一个pause的操做来模拟用户的think time
若是exec太长,或者你想结构化一下代码,能够用这种方法:
val chain_1 = exec(...)...
val chain_2 = exec(...)...
val scn = scenario("My Scenario")
.exec(chain_1)
.exec(chain_2)
4. simulation (模拟操做)定义
simulation中的操做是经过setUp来定义的,users标明实际并发的用户数
setUp(scn.inject(ramp(3 users) over (10 seconds)))
.protocols(httpProtocol)
.assertions(
global.successfulRequests.percent.is(100), details("Login" /"request_3").responseTime.max.lessThan(2000))
经过assertion来进行断言,scn来标识执行的场景, httpProtocal来标识HTTP protocol配置
ramp (users) over (times)是指在多长时间内触发多少个指定用户注意 ramp(3 users) over (10 seconds) 等同于scn.users(3).ramp(10)