Gatling官网教程翻译之Simulation Structure
2016-02-05 10:50
465 查看
Simulation是我们操作Gatling时,主要编写的对象,本文主要介绍Simulation的结构。
还是那句,欢迎转载,不过请注明出处。
Simulation结构详解
原文来自: http://gatling.io/docs/2.1.7/general/simulation_structure.html
Simulation是一个包含四个部分的Scala类:
1.HTTP协议设置;
2.header定义;
3.场景定义;
4.simulation定义;
译者注:原文还有一个简单的举例,不过链接已404(https://github.com/gatling/gatling/blob/master/gatling-bundle/src/universal/user-files/simulations/computerdatabase/BasicSimulation.scala)。
在一些例子里面,这个配置非常的基础,只是单纯地定义了一下。
baseURL就是下面全部相对路径(推荐使用)指向的地址。这里的base URL就是 http://computer-database.gatling.io。
common headers会加到每个请求里面。
HTTP配置会被储存成一个我们可以在simulation里面定义的Scala的值。
注意:加上一个通用的header看上去没啥用,但是别忘了,它们也可以直接影响到你server的处理方式(就像Accept-Encoding 或者是 If-Last-Modified)
headers可以使用Scala的map进行定义:
这个场景结构由两个方法组成:exec 和 pause。exec用来定义一个动作的描述,通常是发送一个测试应用的请求。pause是用来设置用户的思考时间的,思考时间通常是指两个请求之间的间隔。
HTTP请求通常像下面那样去定义:
上面的请求实际上发送的数据如下:
下面的例子里包括了simulation定义,定义了你希望注入到server的位置:
解释下上面的脚本:
1.注入了一个虚拟用户到scn这个场景里面;
2.使用的http配置是httpConf,所有之前定义的http配置,比如base URL都会被加载到这个simulation里面;
- before – 在你的simulation执行前执行
- after – 在你的simulation执行后执行
注:这里不能使用Gatling的DSL语言。
还是那句,欢迎转载,不过请注明出处。
Simulation结构详解
原文来自: http://gatling.io/docs/2.1.7/general/simulation_structure.html
Simulation是一个包含四个部分的Scala类:
1.HTTP协议设置;
2.header定义;
3.场景定义;
4.simulation定义;
译者注:原文还有一个简单的举例,不过链接已404(https://github.com/gatling/gatling/blob/master/gatling-bundle/src/universal/user-files/simulations/computerdatabase/BasicSimulation.scala)。
HTTP protocol configuration – HTTP协议设置
第一个元素就是定义HTTP协议。在一些例子里面,这个配置非常的基础,只是单纯地定义了一下。
baseURL就是下面全部相对路径(推荐使用)指向的地址。这里的base URL就是 http://computer-database.gatling.io。
common headers会加到每个请求里面。
HTTP配置会被储存成一个我们可以在simulation里面定义的Scala的值。
Headers definition – header定义
下面的例子中你将看到,我们在gatling中定义场景的时候,我们可以给每个请求定义header。因为例子中的header是通过recorder,也就是录制器生成的,所有header都会在文件前面被声明,然后在场景定义中被调用。注意:加上一个通用的header看上去没啥用,但是别忘了,它们也可以直接影响到你server的处理方式(就像Accept-Encoding 或者是 If-Last-Modified)
headers可以使用Scala的map进行定义:
val headers_10 = Map("Content-Type" -> """application/x-www-form-urlencoded""")
Scenario definition – 场景定义
Header定以后,接下来就是场景的定义。场景的定义需要设置一个名称,因为你需要在simulation里面定义好几个场景。场景一般会保存成一个Scala的值。val scn = scenario("ScenarioName")
这个场景结构由两个方法组成:exec 和 pause。exec用来定义一个动作的描述,通常是发送一个测试应用的请求。pause是用来设置用户的思考时间的,思考时间通常是指两个请求之间的间隔。
HTTP请求通常像下面那样去定义:
// Here's an example of a POST request http("request_10") .post("/computers") .headers(headers_10) .formParam("name", "Beautiful Computer") .formParam("introduced", "2012-05-30") .formParam("discontinued", "") .formParam("company", "37")
上面的请求实际上发送的数据如下:
HTTP request: POST http://computer-database.gatling.io/computers headers= Accept: [text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8] Content-Type: [application/x-www-form-urlencoded] DNT: [1] Accept-Language: [en-US,en;q=0.5] Accept-Encoding: [gzip, deflate] User-Agent: [Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/20100101 Firefox/16.0] Referer: [http://computer-database.gatling.io/computers/new] params= company: [37] discontinued: [] name: [Beautiful Computer] introduced: [2012-05-30]
Simulation definitions – 多场景定义
The last part of the file contains the simulation definition, this is where you define the load you want to inject to your server, e.g.:下面的例子里包括了simulation定义,定义了你希望注入到server的位置:
setUp( scn.inject(atOnceUsers(1)) // (1) .protocols(httpConf) // (2) )
解释下上面的脚本:
1.注入了一个虚拟用户到scn这个场景里面;
2.使用的http配置是httpConf,所有之前定义的http配置,比如base URL都会被加载到这个simulation里面;
Hooks – 就是Hooks
Gatling提供了两种Hooks:- before – 在你的simulation执行前执行
- after – 在你的simulation执行后执行
before { println("Simulation is about to start!") } after { println("Simulation is finished!") }
注:这里不能使用Gatling的DSL语言。
相关文章推荐
- Item 14: 如果函数不会抛出异常就把它们声明为noexcept
- Item 13: 比起iterator优先使用const_iterator
- setitimer函数
- 关于spark运行FP-growth算法报错com.esotericsoftware.kryo.KryoException
- 订餐系统——Gridview、Repeater和DataList 区别
- Item 12: 把重写函数声明为“override”的
- Java [Leetcode 160]Intersection of Two Linked Lists
- 静态和动态断言调试
- Android缓存文件的存放
- 超棒的 15 款 Bootstrap UI 编辑器
- [0] CMake综述
- 欢迎使用CSDN-markdown编辑器
- 【树】Construct Binary Tree from Preorder and Inorder Traversal
- Java对象的浅克隆和深克隆
- Android百度地图poi范围搜索
- AngularJS+BootStrap的一些插件
- C++lambda详解~读书笔记
- Item 11: 比起private undefined function优先使用deleted function
- Java序列化与反序列化学习(三):序列化机制与原理
- android camera2配置流程