Gatling的进阶一
转载:http://www.51testing.com/html/10/26810-852966.html
首先 抄袭一个Gatling的介绍
- 支持Akka Actors 和 Async IO,从而能达到很高的性能
- 支持实时生成Html动态轻量报表,从而使报表更易阅读和进行数据分析
- 支持DSL脚本,从而使测试脚本更易开发与维护
- 支持录制并生成测试脚本,从而可以方便的生成测试脚本
- 支持导入HAR(Http Archive)并生成测试脚本
- 支持Maven,Eclipse,IntelliJ等,以便于开发
- 支持Jenkins,以便于进行持续集成
- 支持插件,从而可以扩展其功能,比如可以扩展对其他协议的支持
- 开源免费
Gatling适用的场景包括:测试需求经常改变,测试脚本需要经常维护;测试环境的客户机性能不强,但又希望发挥硬件的极限性能;能对测试脚本进行很好的版本管理,并通过CI进行持续的性能测试;希望测试结果轻量易读等。
是thoughtworks的工程师对其的描述,懒的自己写了。
跑起来之后,就需要研究一下到底怎么写和怎么录制了。
第一,gatling使用的是Scala语言,网站说学起来不难,给出的学习地址是http://twitter.github.io/scala_school/
国内的教学网站http://www.scalachina.com/
不过我自己习惯了直接跳过往后看,先知道所以然,然后再去知道然
直接拿示例看:
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)
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)
Gatling的进阶一的更多相关文章
- Gatling的进阶三
1. checks check是Gatling非常重要的一个特性,用来判断是场景否真的执行成功了 .exec(http("request_1") .get(&quo ...
- Gatling的进阶二
1. 参数化 Gatling可以很方便使用csv文件进行参数化,例如一个用户信息表: /* user_information.csv */ username,password,accoun ...
- nodejs进阶(6)—连接MySQL数据库
1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...
- nodejs进阶(4)—读取图片到页面
我们先实现从指定路径读取图片然后输出到页面的功能. 先准备一张图片imgs/dog.jpg. file.js里面继续添加readImg方法,在这里注意读写的时候都需要声明'binary'.(file. ...
- JavaScript进阶之路(一)初学者的开始
一:写在前面的问题和话 一个javascript初学者的进阶之路! 背景:3年后端(ASP.NET)工作经验,javascript水平一般般,前端水平一般般.学习资料:犀牛书. 如有误导,或者错误的地 ...
- nodejs进阶(3)—路由处理
1. url.parse(url)解析 该方法将一个URL字符串转换成对象并返回. url.parse(urlStr, [parseQueryString], [slashesDenoteHost]) ...
- nodejs进阶(5)—接收请求参数
1. get请求参数接收 我们简单举一个需要接收参数的例子 如果有个查找功能,查找关键词需要从url里接收,http://localhost:8000/search?keyword=地球.通过前面的进 ...
- nodejs进阶(1)—输出hello world
下面将带领大家一步步学习nodejs,知道怎么使用nodejs搭建服务器,响应get/post请求,连接数据库等. 搭建服务器页面输出hello world var http = require ...
- [C#] 进阶 - LINQ 标准查询操作概述
LINQ 标准查询操作概述 序 “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法.大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了IEnumerable<T> ...
随机推荐
- 类的扩展--类目和延展--ios
person+money.h 这是类目类 #import "Person.h" //这是扩展person类的接口类,独立一个文件 @interface Person (Money ...
- 怎么给OCR文字识别软件设置正确的扫描分辨率
ABBYY FineReader 12是一款专业的OCR文字识别软件,可快速方便地将扫描纸质文档.PDF文件和数码相机的图像转换成可编辑.可搜索的文本,不仅支持对页扫描,还支持多页扫描,扫描分辨率的选 ...
- .NET垃圾回收 – 非托管资源
前面一篇文章介绍了垃圾回收的基本工作原理,垃圾回收器并不是可以管理内存中的所有资源.对于所有的托管资源都将有.NET垃圾回收机制来释放,但是,对于一些非托管资源,我们就需要自己编写代码来清理这类资源了 ...
- ExtJs学习笔记之Window组件
Window窗体组件 window是一个指定的打算作为一个应用程序窗口的面板,默认窗口是浮动的,resizable, 并且draggable,默认的,窗体靠document.body呈现. 1.示例: ...
- C# 常见集合之前的转换
1,从System.String[]转到List<System.String> System.String[] str={"str","string" ...
- java动态代理(JDK和cglib)
转:http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html JAVA的动态代理 代理模式 代理模式是常用的java设计模式,他的特征是代 ...
- 【spring】non-compatible bean definition of same name and class
org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected excep tion parsing XML do ...
- Linux中ftp不能上传文件/目录的解决办法
在linux中不能上传文件或文件夹最多的问题就是权限问题,但有时也不一定是权限问题了,像我就是空间不够用了,下面我来总结一些ftp不能上传文件/目录的解决办法 在排除用户组和权限等问题后,最可能引 ...
- sql2008读取excel
环境:win7(64位)+sql2008 sql语句: --启用Ad Hoc Distributed Queries: reconfigure reconfigure --使用完成后,关闭Ad Hoc ...
- UI-UIImageView和Image的区别
1.UIImageView图片视图控件 继承于UIView 用于显示图片在应用程序中 2.UIImage 是将真实图片文件转化为程序中的图片,然后3.UIImageView是Image的载体,负责显示 ...