Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
はじめての Gatling
Naoya Nakazawa @n0ts
2016/02/16
目次
• Gatling とは
• Gatling のインストール方法
• Gatling レコーダー
• Gatling の使い方
• Gatling のレポート
• Gatling の実例 Tips
Gatling とは
• http://gatling.io
• Scala ベースの高負荷テストフレームワーク
• ab や wrk のようなベンチマークに近いが、Scala でロ
ジックを記述することができる
• ab (Apache Be...
特長
• HTML レポートで出力することができる
• HTTP GET 以外にも POST にも対応している
• リファラー、クッキーの付与はデフォルトで対応してい
る!
• Scala 力が低くても以外と簡単に設定を書くことが出来
る(自験...
インストール
1. JDK7u6 以降が必要なので、インストール
2. 公式ホームページから zip ファイルをダウンロード
http://gatling.io/#/download
3. Linux / OS X なら bin/gatling...
レコーダー
• Gatling のテストシナリオを自動的に生成するツール
• bin/recorder.sh で実行する
• レコーダーで開始すると、プロキシ経由のリクエスト
が自動的に Gatling のシミュレーションファイルとし
て保存さ...
レコーダー画面
レコーダーで生成されるシナリオの例
package computerdatabase // パッケージ名
import io.gatling.core.Predef._ // 必要なインポートたち
import io.gatling.http....
実行例
$	bin/gatling.sh

GATLING_HOME	is	set	to	$GATLING_ROOT

Choose	a	simulation	number:

					[0]	test.BasicSimulation

		...
実行結果
• あわせて results 以下に HTML ファイルとして出力され
る
http://gatling.io/docs/2.1.1/general/reports.html
Gatling の実例
同じリクエストを繰り返す
• 5 回連続で繰り返す
val scn = scenario("RepeatBenchmark")
.repeat(5, "n") {
exec(http("top").get("/"))
}
ある条件のときのみリクエストをする
• scenarioProperty が pv のときリクエストをする
val scenarioProperty = System.getProperty("scenario",
"").toString

...
ある割合ごとにリクエストをする
• / を 50%、/foo を 20%、/bar を 30% ずつリクエスト
する
val scn = scenario("RandomBenchmark")

.randomSwitch(
50.0 -> e...
リクエストに動的にクッキーを付与する
• / のクッキー uid を /cookie へ付与する
val scn = scenario("CookieBenchmark")

.exec(http("top")
.get("/")
.check...
リクエストに動的にクッキーを付与する
• /baz へのリクエストは "bar UA" にする
val userAgent = Map("User-Agent" -> "bar UA")
val scn = scenario("UABenchm...
ステータスコード 303 はステータス OK とする
• /redirect は 303 を返して、リダイレクトはしない
val scn = scenario("RedirectBenchmark")

.exec(http("top")
.g...
この他は公式ドキュメントをどうぞ

http://gatling.io/docs/2.0.0-RC5/general/
index.html
Enjoy!!!
Upcoming SlideShare
Loading in …5
×

はじめての Gatling

Gatling 入門です

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all
  • Be the first to comment

はじめての Gatling

  1. 1. はじめての Gatling Naoya Nakazawa @n0ts 2016/02/16
  2. 2. 目次 • Gatling とは • Gatling のインストール方法 • Gatling レコーダー • Gatling の使い方 • Gatling のレポート • Gatling の実例 Tips
  3. 3. Gatling とは • http://gatling.io • Scala ベースの高負荷テストフレームワーク • ab や wrk のようなベンチマークに近いが、Scala でロ ジックを記述することができる • ab (Apache Bench): • https://httpd.apache.org/docs/2.4/programs/ ab.html • wrk: • https://github.com/wg/wrk
  4. 4. 特長 • HTML レポートで出力することができる • HTTP GET 以外にも POST にも対応している • リファラー、クッキーの付与はデフォルトで対応してい る! • Scala 力が低くても以外と簡単に設定を書くことが出来 る(自験!)
  5. 5. インストール 1. JDK7u6 以降が必要なので、インストール 2. 公式ホームページから zip ファイルをダウンロード http://gatling.io/#/download 3. Linux / OS X なら bin/gatling.sh あるいは、Windows なら bin/gatling.bat で実行するだけ
  6. 6. レコーダー • Gatling のテストシナリオを自動的に生成するツール • bin/recorder.sh で実行する • レコーダーで開始すると、プロキシ経由のリクエスト が自動的に Gatling のシミュレーションファイルとし て保存される
  7. 7. レコーダー画面
  8. 8. レコーダーで生成されるシナリオの例 package computerdatabase // パッケージ名 import io.gatling.core.Predef._ // 必要なインポートたち import io.gatling.http.Predef._ import scala.concurrent.duration._ class BasicSimulation extends Simulation { // クラス定義、Simulation を敬称しないといけない val httpConf = http // HTTP リクエストの共通設定 .baseURL("http://computer-database.gatling.io") // リクエスト対象の URL .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") // 共通の HTTP ヘッダー .doNotTrackHeader("1") // DNT ヘッダーの送信 .acceptLanguageHeader("en-US,en;q=0.5") // 受け入れる言語ヘッダーの送信 .acceptEncodingHeader("gzip, deflate") // エンコーディングヘッダーの送信 .userAgentHeader("Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0") // ユーザエージェントの送信 val scn = scenario("BasicSimulation") // テストシナリオの定義 .exec(http("request_1") // HTTP リクエスト名、"request_1" は最終レポートに表示される .get("/")) // URI / へ GET リクエストする .pause(5) // 一時スリープタイム setUp( // このシミュレーションで実行するシナリオのセットアップ scn.inject(atOnceUsers(1)) // scn という名前で 1 シングルユーザでリクエストする ).protocols(httpConf) // 最初の HTTP リクエストの共通設定を付与する }
  9. 9. 実行例 $ bin/gatling.sh GATLING_HOME is set to $GATLING_ROOT Choose a simulation number: [0] test.BasicSimulation [1] test.FooSimulation ※番号を入力 1 ... ---- Global Information -------------------------------------------------------- > request count 10 (OK=10 KO=0 ) > min response time 5 (OK=5 KO=- ) > max response time 58 (OK=58 KO=- ) > mean response time 16 (OK=16 KO=- ) > std deviation 14 (OK=14 KO=- ) > response time 50th percentile 12 (OK=12 KO=- ) > response time 75th percentile 17 (OK=17 KO=- ) > mean requests/sec 5.141 (OK=5.141 KO=- ) *1 ---- 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/scenariosimulation-xxx/index.html *1: 秒間あたりの処理したりクエスト数、KO は NG という意味
  10. 10. 実行結果 • あわせて results 以下に HTML ファイルとして出力され る http://gatling.io/docs/2.1.1/general/reports.html
  11. 11. Gatling の実例
  12. 12. 同じリクエストを繰り返す • 5 回連続で繰り返す val scn = scenario("RepeatBenchmark") .repeat(5, "n") { exec(http("top").get("/")) }
  13. 13. ある条件のときのみリクエストをする • scenarioProperty が pv のときリクエストをする val scenarioProperty = System.getProperty("scenario", "").toString
 val scn = scenario("DoIfBenchmark") .doIf(scenarioProperty, "pv") { exec(http("pv").get("/pv")) }
  14. 14. ある割合ごとにリクエストをする • / を 50%、/foo を 20%、/bar を 30% ずつリクエスト する val scn = scenario("RandomBenchmark")
 .randomSwitch( 50.0 -> exec(http("top").get("/")), 20.0 -> exec(http("foo").get("/foo")), 30.0 -> exec(http("bar").get("/bar")) )
  15. 15. リクエストに動的にクッキーを付与する • / のクッキー uid を /cookie へ付与する val scn = scenario("CookieBenchmark")
 .exec(http("top") .get("/") .check(headerRegex("Set-Cookie", "uid=(.*); Expires=.*; Domain=.*; Path=.*").saveAs("uid"))) .exec(addCookie(Cookie("uid", "${uid}"))) .exec(http("cookie").get("/"))
  16. 16. リクエストに動的にクッキーを付与する • /baz へのリクエストは "bar UA" にする val userAgent = Map("User-Agent" -> "bar UA") val scn = scenario("UABenchmark")
 .exec(http("baz") .get("/baz") .headers(userAgent) )
  17. 17. ステータスコード 303 はステータス OK とする • /redirect は 303 を返して、リダイレクトはしない val scn = scenario("RedirectBenchmark")
 .exec(http("top") .get("/redirect") .disableFollowRedirect .check(status.is(303)) )
  18. 18. この他は公式ドキュメントをどうぞ
 http://gatling.io/docs/2.0.0-RC5/general/ index.html
  19. 19. Enjoy!!!

×