🐥

Gatling 入門記 (sbt plugin を用いて実行するまで)

2020/12/05に公開

こちら の README の複製です。もうちょっとハックした方法を考え (検討) 中...

Gatling

START PROJECT

If you use sbt 0.13.13 or later, you can use sbt new command for initialize sbt project.

$ sbt new sbt/scala-seed.g8
....
Minimum Scala build.

name [My Something Project]: my-gatling-sample

Template applied in ./my-gatling-sample 

reference: sbt new

build.sbt

build.sbt に以下を追記します。

// build.sbt
scalacOptions := Seq(
  "-encoding", "UTF-8", "-target:jvm-1.8", "-deprecation",
  "-feature", "-unchecked", "-language:implicitConversions", "-language:postfixOps"
)

libraryDependencies ++= Seq(
  "io.gatling.highcharts" % "gatling-charts-highcharts" % "2.3.0" % "test",
  "io.gatling"            % "gatling-test-framework"    % "2.3.0" % "test"
)

enablePlugins(GatlingPlugin)

gatling-test-framework は Gatling を実行するためのライブラリっぽい
gatling-charts-highcharts は HighCharts という JavaScript 製のチャートライブラリをベースにした Gatling 向けのライブラリのようです。結果のレポート表示用だと思います。

plugins.sbt

plugins.sbt に gatling に関する plugin の情報を記載します。

// plugins.sbt
addSbtPlugin("io.gatling" % "gatling-sbt" % "2.2.2")

Write Test Scenario

// src/test/scala/mytest/MyBasicSimulation.scala
package mytest

import io.gatling.core.Predef._
import io.gatling.http.Predef._

class MyBasicSimulation extends Simulation {

  val httpProtocol = 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
    .acceptEncodingHeader("gzip, deflate")
    .acceptLanguageHeader("en-US,en;q=0.5")
    .userAgentHeader("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/20100101 Firefox/16.0")

  val scn = scenario("My First Scenario") // A scenario is a chain of requests and pauses
    .exec(http("request_1")
      .get("/"))

  setUp(scn.inject(atOnceUsers(1)).protocols(httpProtocol))
}

上記では、テスト対象のアプリケーションが、http://localhost:8080 に起動していることとしています。

ここでは テキトーに nginx サーバでも立てて実験してみることにします。
シミュレーションとしては「この nginx サーバの root (/) に、ユーザが1人がアクセスしてくるだけ」という簡易的なものです。

docker run --rm -p 8080:80 nginx 

execute simulation

# start sbt
$ sbt
sbt:my-gatling-sample> 

# Run all simulations
> gatling:test

# Run a single simulation
> gatling:testOnly mytest.MyBasicSimulation

# List all tasks
> tasks -v gatling
  • example
sbt:my-gatling-sample> gatling:testOnly mytest.MyBasicSimulation
....
Please open the following file: /Users/sudachi/projects/my-gatling-sample/target/gatling/mybasicsimulation-1607150219812/index.html
[info] Simulation MyBasicSimulation successful.
[info] Simulation(s) execution ended.
[success] Total time: 11 s, completed 2020/12/05 15:37:06

View Test Report

see target/gatling (の最新のヤツ...)

Use Giter8

You can use our Giter8 template to bootstrap a new sbt project:

sbt new gatling/gatling.g8

Discussion