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
Hirokazu Maruta
February 06, 2019
Technology
0
230
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
87
わかった気になるチューリングマシン
mochisuna
0
33
Elementary algorithm
mochisuna
0
14
ssh-dynamic-forward
mochisuna
0
36
ServerlessFramework-Trello
mochisuna
0
22
TechBash Slack Reaction Award
mochisuna
0
36
techbash-clasp
mochisuna
0
45
vuejs-night-publish
mochisuna
0
730
surprise-lt-for-intern-vol-2
mochisuna
0
38
Other Decks in Technology
See All in Technology
FrontDoorとWebAppsを組み合わせた際のリダイレクト処理の注意点
kenichirokimura
1
450
Reducing Cross-Zone Egress at Spotify with Custom gRPC Load Balancing Recap
koh_naga
0
180
Hands-on Gemini, the Google DeepMind LLM
meteatamel
1
110
Kernel MemoryでAzure OpenAI Serviceとお手軽データソース連携
mitsuzono
1
160
AWS認定資格を取得したので、初めてマネコンを触った時を振り返ってみた。
ainatsuptr
2
100
SIEMを用いて、セキュリティログ分析の可視化と分析を実現し、PDCAサイクルを回してみた
coconala_engineer
0
270
LLM とプロンプトエンジニアリング/チューターをビルドする / LLM and Prompt Engineering and Building Tutors
ks91
PRO
0
250
「手動オペレーションに定評がある」と言われた私が心がけていること / phpcon_odawara2024
blue_goheimochi
2
370
少数チームで挑む: SwiftUI, TCA, KMPを用いた 新規動画配信アプリ 「ABEMA Live」の開発について
tomu28
0
610
継続的な改善 x ⾮連続的な進化
sansantech
PRO
3
120
20240418_Google ColabにLLMが搭載されたようなのでPython x データ分析の勉強方法を考えてみる
doradora09
0
120
コードを書く隙間を見つけて生きていく技術/Findy 思考の現在地
fujiwara3
27
5.7k
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
266
39k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
18
6.9k
Designing with Data
zakiwarfel
95
4.8k
Building Flexible Design Systems
yeseniaperezcruz
318
37k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
321
20k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
60
14k
How To Stay Up To Date on Web Technology
chriscoyier
782
250k
GitHub's CSS Performance
jonrohan
1024
450k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
6
990
jQuery: Nuts, Bolts and Bling
dougneiner
59
7.1k
[RailsConf 2023] Rails as a piece of cake
palkan
22
3.9k
Building Your Own Lightsaber
phodgson
98
5.7k
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ʹർΕͨͱ͔ͦ͏͍͏ͷͰͳ͍ •
νϡʔχϯάͱ͔ͦͦΔؾͳ͔ͬͨ