Location via proxy:
[ UP ]
[Report a bug]
[Manage cookies]
No cookies
No scripts
No ads
No referrer
Show this form
Submit Search
Submit Search
Upload
はじめての Gatling
•
5 likes
•
10,653 views
Gatling 入門です
Read less
Read more
1 of 19
Download now
Download to read offline
More Related Content
はじめての Gatling
1.
はじめての Gatling Naoya Nakazawa
@n0ts 2016/02/16
2.
目次 • Gatling とは •
Gatling のインストール方法 • Gatling レコーダー • Gatling の使い方 • Gatling のレポート • Gatling の実例 Tips
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.
特長 • HTML レポートで出力することができる •
HTTP GET 以外にも POST にも対応している • リファラー、クッキーの付与はデフォルトで対応してい る! • Scala 力が低くても以外と簡単に設定を書くことが出来 る(自験!)
5.
インストール 1. JDK7u6 以降が必要なので、インストール 2.
公式ホームページから zip ファイルをダウンロード http://gatling.io/#/download 3. Linux / OS X なら bin/gatling.sh あるいは、Windows なら bin/gatling.bat で実行するだけ
6.
レコーダー • Gatling のテストシナリオを自動的に生成するツール •
bin/recorder.sh で実行する • レコーダーで開始すると、プロキシ経由のリクエスト が自動的に Gatling のシミュレーションファイルとし て保存される
7.
レコーダー画面
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.
実行例 $ 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.
実行結果 • あわせて results
以下に HTML ファイルとして出力され る http://gatling.io/docs/2.1.1/general/reports.html
11.
Gatling の実例
12.
同じリクエストを繰り返す • 5 回連続で繰り返す val
scn = scenario("RepeatBenchmark") .repeat(5, "n") { exec(http("top").get("/")) }
13.
ある条件のときのみリクエストをする • scenarioProperty が
pv のときリクエストをする val scenarioProperty = System.getProperty("scenario", "").toString val scn = scenario("DoIfBenchmark") .doIf(scenarioProperty, "pv") { exec(http("pv").get("/pv")) }
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.
リクエストに動的にクッキーを付与する • / のクッキー
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.
リクエストに動的にクッキーを付与する • /baz へのリクエストは
"bar UA" にする val userAgent = Map("User-Agent" -> "bar UA") val scn = scenario("UABenchmark") .exec(http("baz") .get("/baz") .headers(userAgent) )
17.
ステータスコード 303 はステータス
OK とする • /redirect は 303 を返して、リダイレクトはしない val scn = scenario("RedirectBenchmark") .exec(http("top") .get("/redirect") .disableFollowRedirect .check(status.is(303)) )
18.
この他は公式ドキュメントをどうぞ http://gatling.io/docs/2.0.0-RC5/general/ index.html
19.
Enjoy!!!
Download now