便利すぎる負荷試験テストツールGatlingの使い方~自力ソース編~

負荷テストを簡単に作れて結果も自動でグラフ化してくれる便利ツールGatlingの紹介です   
公式はここ   
http://gatling.io/#/



まずはソース(scala）を自力で書いて負荷試験を作る方法
(macでの実施を前提として書いてます)

### インストール方法

```bash
# download
wget https://repo1.maven.org/maven2/io/gatling/highcharts/gatling-charts-highcharts-bundle/2.1.7/gatling-charts-highcharts-bundle-2.1.7-bundle.zip

unzip gatling-charts-highcharts-bundle-2.1.7-bundle.zip
cd gatling-charts-highcharts-bundle-2.1.7-bundle
```

### サンプルテスト実行

```bash
sh bin/gatling.sh
```

以下のような画面が出るので１を選択しエンター

```bash
Choose a simulation number:
     [0] computerdatabase.BasicSimulation
     [1] computerdatabase.advanced.AdvancedSimulationStep01
     [2] computerdatabase.advanced.AdvancedSimulationStep02
     [3] computerdatabase.advanced.AdvancedSimulationStep03
     [4] computerdatabase.advanced.AdvancedSimulationStep04
     [5] computerdatabase.advanced.AdvancedSimulationStep05
```

以下のとこは何も入力せずにエンター

```bash
Select simulation id (default is 'advancedsimulationstep01'). Accepted characters are a-z, A-Z, 0-9, - and _

Select run description (optional)
```

そうするとサンプルのテストが実行されて以下のような文言が出てくる

```bash
---- Response Time Distribution ------------------------------------------------
> t < 800 ms                                             7 ( 54%)
> 800 ms < t < 1200 ms                                   4 ( 31%)
> t > 1200 ms                                            2 ( 15%)
> failed                                                 0 (  0%)
================================================================================

Reports generated in 0s.
Please open the following file: results/advancedsimulationstep01-1448891028766/index.html
```

なので、上で出力された結果を開いてみると結果がグラフ化されている！！ 
(パスはテストのたびに変わる)


```
open results/advancedsimulationstep01-1448891028766/index.html
```

![screencapture-file-usr-local-opt-gatling-charts-highcharts-bundle-2-1-7-results-advancedsimulationstep01-1448891028766-index-html-1448891259270.png](https://qiita-image-store.s3.amazonaws.com/0/80769/a34cf4f6-a3d0-86e9-5489-b36390b603a0.png)


### 独自にソースを書くサンプル

[http://localhost:8080/] にgetで５秒間に１０回アクセスするテスト
こんな感じでソース書く

`vi user-files/simulations/computerdatabase/advanced/ApiSimulation.scala
`

```scala
package computerdatabase
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import scala.concurrent.duration._
class ApiSimulation extends Simulation {
  val httpConf = http
    .baseURL("http://localhost:8080") // Here is the root for all relative URLs
    .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") // Here are the common headers
    .doNotTrackHeader("1")
    .acceptLanguageHeader("ja,en-US;q=0.7,en;q=0.3")
    .acceptEncodingHeader("gzip, deflate")
    .userAgentHeader("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0")
 
  val scn = scenario("Sample")
    .exec(http("request_1")
      .get("/"))
    .pause(100 milliseconds)
  
  setUp(scn.inject(rampUsers(10) over(5 seconds)) .protocols(httpConf))
    
}
```

テスト実行
作成したテストが追加されてるので、その番号を指定してエンター

```bash
bin/gatling.sh
GATLING_HOME is set to /usr/local/opt/gatling-charts-highcharts-bundle-2.1.7
Choose a simulation number:
     [0] computerdatabase.ApiSimulation
     [1] computerdatabase.BasicSimulation
     [2] computerdatabase.advanced.AdvancedSimulationStep01
     [3] computerdatabase.advanced.AdvancedSimulationStep02
     [4] computerdatabase.advanced.AdvancedSimulationStep03
     [5] computerdatabase.advanced.AdvancedSimulationStep04
     [6] computerdatabase.advanced.AdvancedSimulationStep05
```

実行されて結果が作成されました！！

```bash
---- Response Time Distribution ------------------------------------------------
> t < 800 ms                                            10 (100%)
> 800 ms < t < 1200 ms                                   0 (  0%)
> t > 1200 ms                                            0 (  0%)
> failed                                                 0 (  0%)
================================================================================

Reports generated in 0s.
Please open the following file: results/apisimulation-1448891789639/index.html
```

結果もわかりやすくて良いですね！！

![screencapture-file-usr-local-opt-gatling-charts-highcharts-bundle-2-1-7-results-apisimulation-1448891789639-index-html-1448891950845.png](https://qiita-image-store.s3.amazonaws.com/0/80769/6f6c055f-6ef4-3912-4b75-0ad6087416c6.png)


次回はブラウザで行った動作をキャプチャして自動でソースにしてくれる方法を紹介したいと思います。

##続き
[便利すぎる負荷試験テストツールGatlingの使い方~ブラウザ操作記憶編~](http://qiita.com/nii_yan/items/9ff9db9828a7a7115215)
[便利すぎる負荷試験テストツールGatlingの使い方~戻り値チェック編~](http://qiita.com/nii_yan/items/81e7399000484d595b40)