Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
load-test-with-gatling
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Hirokazu Maruta
February 06, 2019
Technology
0
270
load-test-with-gatling
負荷試験を実施したのでその何ようについて社外発表で登壇しました。
How to Run a load test with gatling.
Hirokazu Maruta
February 06, 2019
Tweet
Share
More Decks by Hirokazu Maruta
See All by Hirokazu Maruta
encryption
mochisuna
0
120
わかった気になるチューリングマシン
mochisuna
0
48
Elementary algorithm
mochisuna
0
27
ssh-dynamic-forward
mochisuna
0
61
ServerlessFramework-Trello
mochisuna
0
30
TechBash Slack Reaction Award
mochisuna
0
45
techbash-clasp
mochisuna
0
91
vuejs-night-publish
mochisuna
0
1.1k
surprise-lt-for-intern-vol-2
mochisuna
0
55
Other Decks in Technology
See All in Technology
Introduction to Bill One Development Engineer
sansan33
PRO
0
360
AIエージェントを開発しよう!-AgentCore活用の勘所-
yukiogawa
0
170
プロダクト成長を支える開発基盤とスケールに伴う課題
yuu26
4
1.3k
~Everything as Codeを諦めない~ 後からCDK
mu7889yoon
3
390
配列に見る bash と zsh の違い
kazzpapa3
3
160
予期せぬコストの急増を障害のように扱う――「コスト版ポストモーテム」の導入とその後の改善
muziyoshiz
1
1.9k
広告の効果検証を題材にした因果推論の精度検証について
zozotech
PRO
0
180
変化するコーディングエージェントとの現実的な付き合い方 〜Cursor安定択説と、ツールに依存しない「資産」〜
empitsu
4
1.4k
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
3
940
OpenShiftでllm-dを動かそう!
jpishikawa
0
110
Embedded SREの終わりを設計する 「なんとなく」から計画的な自立支援へ
sansantech
PRO
3
2.5k
仕様書駆動AI開発の実践: Issue→Skill→PRテンプレで 再現性を作る
knishioka
2
660
Featured
See All Featured
How GitHub (no longer) Works
holman
316
140k
Optimising Largest Contentful Paint
csswizardry
37
3.6k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
75
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.7k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
82
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.7k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Making Projects Easy
brettharned
120
6.6k
How to Ace a Technical Interview
jacobian
281
24k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
370
Prompt Engineering for Job Search
mfonobong
0
160
Transcript
ԶͷΨτϦϯά͕ՐΛͥ͘ʂ giftee SaaS div. Engineer ·ΔͨͻΖ͔ͣ ʢެ։൛ʣ
ڈͷ12݄ͷ
େΩϟϯϖʔϯ͕͋Γ·ͨ͠ ެ։༻ࢿྉͳͷͰ ৄࡉΛফ͍ͯ͠·͢
Ͱɻ
Α͋͘Δ
ࠓͷγεςϜͬͯɺ େنҊ݅ ͑ΒΕΔΜ͚ͩͬʁ
ʮΑͬ͠Όෛՙςετͨ͠Ζʂʯ ኯ(ʈ)(ʈ)
ԶͷΨτϦϯά͕ՐΛͥ͘ʂ giftee SaaS div. Engineer ·ΔͨͻΖ͔ͣ ʢެ։൛ʣ
ࣗݾհ • ؙాʢ·ΔͨͻΖ͔ͣʣ • Twitter: @mochi_suna • giftee.co SaaSνʔϜΤϯδχΞ •
झຯɿϐΞϊɺϘυήɺΞΠίϯ࡞ʢΧούʣ • ۙگɿ4݄ʹ݁ࠗࣜΛ߇͑ͯ·͢
͓ࣄʹ͍ͭͯ͏গ͠ ٠͕ਅ໘ʹॻ͍ͯͨͷͰ۷ΓԼ͛·͢ɾɾɾ • ֎෦ൢചը໘ͷCMS • νέοτൃ݊APIͷ࡞ • νέοτ݊໘ͷ࡞
Agenda • What is "Gatling" • Why Gatling • How
to use Gatling • Tips • Report
ɾɾɾͱ͍͏͜ͱͰ
ࠓճऔΓѻ͏ͷ
None
※ͷͩͱ͜Ε͕ਅͬઌʹࢥ͍͖ͭ·͢ ໊લ͔Βੌͦ͏ ɺອըͷ ѱಙਓ͕υϠإͰ ΨτϦϯάߏ͑Δ͕࢟ ͜͜ʹೖ͍ͬͯ·ͨ͠
What is "Gatling" • "Load and Performance testing framework" •
"Open-source, based on Scala” • JMeterʹର͢Δ͙Β͍༗໊ • Scalaྗͳׂͯ͘ͱॻ͚Δ • ϨϙʔτػೳͳͲཉ͍͠ػೳ͕ॆ࣮
ʑ໊͍͠લͩ͠ྑͦ͞͏ શྗͰஶ࡞ݖʹ՞ചΔελΠϧ ͕ ΨτϦϯάͷ αΠϘʔάೣ Վ͍ͳ͕Β ΨτϦϯάΛͿͬ์͢ ঁͷࢠ ͕ ΨτϦϯάͷ
ΨϯμϜ ΠϯΫͰԚ͠߹͏ ήʔϜͷΩϟϥ ৭ʑೖͬͯ·ͨ͠ ΨτϦϯάߏ͑ͨ ѱಙқͷ υϠإ
ͳͥGatlingΛ͏ʁ
ଟ༷ͳෛՙࢼݧπʔϧ • ੈͷதʹෛՙࢼݧπʔϧͬͯࢁ΄Ͳ͋Δ͚Ͳ…
༻్ʹ߹ΘͤͯબΜͩΒྑ͍ ࠓճͷ߹ • flood.io (※)Ͱςετ݁ՌΛڞ༗͍ͨ͠ • ͱʹ͔͘ظ͕ؒ͘ૣ͘࡞Γ͔ͨͬͨ • γʔέϯεςετ͍͢͠ Λຬͨ͢ͷͰ͋ΕԿͰΑ͔ͬͨ
flood.io ΫϥυϕʔεͷϩʔυςεταʔϏε • ෛՙࢼݧͷͨΊʹࣗલͰαʔόʔཱͯΔͷ͠ΜͲ͍ • ϩʔΧϧͩͱࢼݧ༰ˍ݁Ռͱ͍͏ܗͰڞ༗͠ʹ͍͘ ͜͏͍ͬͨΛΑ͠ͳʹͯ͘͠ΕΔ
flood.io͕αϙʔτ
ݸਓతͳͰ ʮJMeterͰҎલςετͨ͜͠ͱ͋ΔΑʯ ʮ͓ɺΒ͍·͢Ͷʯ ʮͲΕͲΕʯ
ݸਓతͳͰ ʮJMeterͰҎલςετͨ͜͠ͱ͋ΔΑʯ ʮ͓ɺΒ͍·͢Ͷʯ ʮͲΕͲΕʯ
ݸਓతͳͰ ʮJMeterͰҎલςετͨ͜͠ͱ͋ΔΑʯ ʮ͓ɺΒ͍·͢Ͷʯ ʮͲΕͲΕʯ
͋ͬɺ͜ΓΌແཧͩ ʹ͠Α͏ɻ
ͪͳΈʹ ࠓճૉૣ͍ରԠ͕Ͱ͖ͳ͍ͱஅ͕ͨ͠… • https://github.com/flood-io/ruby-jmeter
ͪͳΈʹ ࠓճૉૣ͍ରԠ͕Ͱ͖ͳ͍ͱஅ͕ͨ͠… • https://github.com/flood-io/ruby-jmeter • JMeterͷςετγφϦΦΛRubyͰॻ͚Δ • flood.io͕࡞͍ͬͯΔ ͜Μͳͷ͋Δʢશ෦ऴΘ͔ͬͯΒͬͨʣ
ଟ༷ͳෛՙࢼݧπʔϧʢ࠶ܝʣ • ੈͷதʹෛՙࢼݧπʔϧͬͯࢁ΄Ͳ͋Δ͚Ͳ…
ଟ༷ͳෛՙࢼݧπʔϧʢ࠶ܝʣ • ੈͷதʹෛՙࢼݧπʔϧͬͯࢁ΄Ͳ͋Δ͚Ͳ… ༻్ʹ߹Θ͖ͤͯͳͷ͓͏
ɹɹ ্࠷ڧͷੜ͕ڝ͏ͳͱ་͢γʔϯ ɹɹ͕ೖ͍ͬͯ·ͨ͠
ຊɿGatlingΛ͏
Πϯετʔϧ 1.JDK8ͷΠϯετʔϧ 2.ຊՈαΠτ͔ΒzipΛDL 3.zipΛల։ Ҏ্
ϓϩδΣΫτͷத • ల։ͨ͠ϓϩδΣΫτͷσΟϨΫτϦߏ
ϓϩδΣΫτͷத • ओʹ͜ͷล͕͏ͱ͜Ζ ɿgatlingͷ࣮ߦϑΝΠϧͳͲʢbin/gatling.shʣ ɿ࣮ߦ݁ՌͷϨϙʔτ ɿ࣮ߦ͍ͨ͠εΫϦϓτΛஔ͘ͱ͜Ζ
user-filesʹϑΝΠϧΛՃ • user-files/…/advancedԼ • σϑΥϧτͰαϯϓϧ͕͋Δ • ׂͱࢀߟʹͳΔ
͜͜ʹεΫϦϓτΛՃ ؆୯ͳྫ 1. ੩తϖʔδʹΞΫηε 2. 200OKΛ֬ೝ 3. ࠷ॳʹ10userΛੜ
ࡉ͔͘ݟ͍ͯ͘ http.baseURL • ςετରͷURLΛࢦఆ • γφϦΦ͜͜Ͱࢦ ఆͨ͠URLʹର࣮͠ߦ • setUp(*).protocols
ࡉ͔͘ݟ͍ͯ͘ scenario • ॲཧ͍ͨ͠γφϦΦ • ग़ྗ໊ΛࢦఆͰ͖Δ • γφϦΦಉ࢜Λ࿈ଓͰܨ͛Δ ͜ͱͰ͖Δ •
inject͢Δ͜ͱͰϢʔβʔͷ ಈ͖Λ੍ޚͰ͖Δ
ࡉ͔͘ݟ͍ͯ͘ setUp • ϢʔβʔΛ੍ޚ • ʮԿਓͷϢʔβʔ͕ʯ • ʮಉ࣌ʹʯ • ʮͲ͏ૢ࡞͢Δ͔ʯ
Έ͍ͨͳಈ͖Λ࣮ݱͰ͖Δ
݁ՌΛݟΔ • ίϚϯυΛ࣮ߦ͢Δͱ͜Μͳ݁Ռ͕ग़Δ
݁ՌΛݟΔ • ίϚϯυΛ࣮ߦ͢Δͱ͜Μͳ݁Ռ͕ग़Δ Global: ɹશγφϦΦͷ݁Ռ GlobalҎԼ: • ֤γφϦΦͷ݁Ռ •
ϦμΠϨΫτφϯόϦϯά
࣮ߦ݁Ռ • શ݅ॲཧ͕ऴΘΔͱhtmlʹు͖ग़͞ΕΔ • ΤϥʔɾɺԠ࣌ؒ • ϦΫΤετͳͲ͕Θ͔Δ
Tips
Ϣʔβʔ੍ޚฤ
nਓΛಉ࣌ʹ্ཱͪ͛Δ atOnceUsers(n) ͜ͷ߹n=100
ඵؒnਓϢʔβʔ͕ΞΫηε constantUsersPerSec(n) during(t seconds) • n=100 • t=5 • 100ਓͣͭΞΫςΟϒ’Ϣʔβʔ͕૿͍͑ͯΔ
tඵͰϦΫΤετ͕nਓ·Ͱ૿Ճ rampUsers(n) during(t seconds) • n=100 • t=5 5ඵ͔͚ͯ100userʹͳΔ 20[user/s]Ͱۉ͞Ε͍ͯΔͷ͕Θ͔Δ
࣮ફɿෛՙΛ্͔͛ͯΒΩʔϓ 1. 100ϢʔβʔͰ։࢝ 2. 5ඵ͔͚ͯ200ਓ૿Ճ 3. ఆ300ਓͰ10ඵΩʔϓ
ศརͳૢ࡞
POSTͷϨεϙϯεΛอଘ͢Δ • ͋ΔAPIʹPOSTͯ͠ɺͦͷ݁ՌΛར༻͍ͨ͠ • saveAsͰσʔλΛอଘ • ࣦഊͨ͠߹exitHereIfFailedͰଈதஅ
body͋ΓͰPOST • bodyʹJSONΛ͚ͩ͢ • ؔԽ͓ͯ͘͠ͱศར
GETʢϨεϙϯεΛར༻ʣ • جຊతʹPOSTͱಉ͡ • session => ͰηογϣϯใΛར༻Մೳ • session(“hoge")ͰऔಘՄೳ
SessionʹΛอଘ • exec͔Βsession.setͰ֨ೲՄೳ • "${url}" ͰࢀরͰ͖ΔΑ͏ʹͳΔ
৭ʑ͍͚ͬͨͲ
खΛಈ͔͞ͳ͍ͱ Θ͔Μͳ͍ΑͶ
ԶͷΨτϦϯά
αϯϓϧ࡞Γ·ͨ͠ https://github.com/mochisuna/load-test-sample localhost:8080 localhost:3306 localhost:8000 POST: create_user GET: refer_user POST:
display_user
POST: Ϣʔβʔ࡞ localhost:8080 localhost:3306 localhost:8000
GET: Ϣʔβʔऔಘ localhost:8080 localhost:3306 localhost:8000
POST: ϦμΠϨΫτ localhost:8080 localhost:3306 localhost:8000
POST: ϦμΠϨΫτ localhost:8080 localhost:3306 localhost:8000
ՐΛͥ͘ खΛ৳ͯ͠ઓ͏ Πϯυਓ͕ೖͬͯ·ͨ͠
݁Ռ
࣮ߦ͢Δͱɾɾɾ • Redirect 1ͰࢮΜͰΔΘ • Nginx͕ࢮΜͰΜͳʔʢଞਓࣄʣ ͳͲ͕Θ͔Δ
࣮ࡍͷࢼݧͰͲ͏͔ͩͬͨ
flood.ioͰ࣮ફ Ͳ͕͜ ϘτϧωοΫ͔ ͙͢Θ͔Δ
݁ՌΛ౿·͑அ ࠓ·ͰɿʮͱΓ͋͑ͣ૿͠ͱ͖Ό͑͑Ζʯ ࠓճɿ • ʮnͰr [req/s]͍͚ͨʯ • ʮm%༨ʹεέʔϧΞτ͓͖ͯ͠·͠ΐ͏ʯ
݁ՌΛ౿·͑அ ࠓ·ͰɿʮͱΓ͋͑ͣ૿͠ͱ͖Ό͑͑Ζʯ ࠓճɿ • ʮnͰr [req/s]͍͚ͨʯ • ʮm%༨ʹεέʔϧΞτ͓͖ͯ͠·͠ΐ͏ʯ ఆྔతͳஅɾίετݮʂ
͜ͷ݁ՌΛ౿·͑ຊ൪ ɹɹɹɹɹ66,901݅ ɹɹɹɹɹ41,400݅ ɹɹɹɹɹ51,000݅ ɹɹɹɹɹ 6,750݅ ετΞ" ετΞ# ετΞ$ ετΞ%
͜ͷ݁ՌΛ౿·͑ຊ൪ ɹɹɹɹɹ66,901݅ ɹɹɹɹɹ41,400݅ ɹɹɹɹɹ51,000݅ ɹɹɹɹɹ 6,750݅ ετΞ" ετΞ# ετΞ$ ετΞ%
ແఀࢭͰ͍ग़͠ୡʂ
·ͱΊ • gatlingͭΑ͍ͧʔ͍ͧ͢͝ʔ • ෳࡶͳॲཧಛघͳϢʔβʔૢ࡞τϨʔεՄೳ • flood.ioศར • ్தͰόʔδϣϯ্͕Γ͕ͬͨ •
Scalaྗͳ͍͚ͯ͘Δ͚Ͳɺͨ·ʹσόοά͕େม • ಛʹsessionपΓ
ͦͷଞ • ຊAWSʹσϞڥݐ͔ͯͨͬͨ • ʮTerraformͰશࣗಈώϡʔʂʯͱ͔ͬͯͨΒ ࣌ؒͳ͘ͳͬͨ • αϯϓϧ࡞Δͷָ͔ͬͨ͠
ఆ࣭
ෛՙࢼݧΛ͢ΔλΠϛϯάʁ • ݱঢ়ɺׂͱରྍ๏త • खॱΛཱ֬͢Δͷʹίετ͔͔Δ͠ɾɾɾ • ຊCI/CDͱಉ͙͡Β͍ͷසʹ͍ͨ͠ • ଞͷاۀ͞Μͱ͔Ͳ͏ͯ͠ΔΜͩΖ͏ʁ
Ͳͷ͙Β͍ͷظؒͰ࣮ࢪͨ͠ʁ • ຊ൪ɿ12/5 • ෛՙࢼݧνʔϜൃɿ11/13 • طଘͷڥΛಉ͡ͷΛߏஙɿʙ11/19 • γφϦΦ࡞ɿʙ11/29ʢ͔ͳΓ٧·ͬͨɾɾɾʣ •
ෛՙࢼݧɿʙ12/5ʢ·ͰΘͪΌΘͪΌʣ
Ͳͷ͙Β͍ͷظؒͰ࣮ࢪͨ͠ʁ • ຊ൪ɿ12/5 • ෛՙࢼݧνʔϜൃɿ11/13 • طଘͷڥΛಉ͡ͷΛߏஙɿʙ11/19 • γφϦΦ࡞ɿʙ11/29ʢ͔ͳΓ٧·ͬͨɾɾɾʣ •
ෛՙࢼݧɿʙ12/5ʢ·ͰΘͪΌΘͪΌʣ ख࡞ۀͰݐͯͨڥͷෳ͕ࠈͩͬͨ
ͳΜͰgo • ॻ͖͔͚ͨͬͨͩ • αϯϓϧʹϚδʹͳΓͨ͘ͳ͔ͬͨ • ͜ͷنͷαϯϓϧͳΒָʹॻ͚ΔͰ͢ • ผʹීஈͬͯΔRailsʹർΕͨͱ͔ͦ͏͍͏ͷͰͳ͍ •
νϡʔχϯάͱ͔ͦͦΔؾͳ͔ͬͨ