性能测试工具 Gatling 官网教程翻译之 Simulation Structure

Joshua Dong · 2016年02月05日 · 1683 次阅读

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)。

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 执行后执行 java before { println("Simulation is about to start!") } after { println("Simulation is finished!") } 注:这里不能使用 Gatling 的 DSL 语言。
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册