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
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
110
わかった気になるチューリングマシン
mochisuna
0
45
Elementary algorithm
mochisuna
0
24
ssh-dynamic-forward
mochisuna
0
59
ServerlessFramework-Trello
mochisuna
0
30
TechBash Slack Reaction Award
mochisuna
0
45
techbash-clasp
mochisuna
0
87
vuejs-night-publish
mochisuna
0
1.1k
surprise-lt-for-intern-vol-2
mochisuna
0
52
Other Decks in Technology
See All in Technology
MCP ✖️ Apps SDKを触ってみた
hisuzuya
0
360
GraphRAG グラフDBを使ったLLM生成(自作漫画DBを用いた具体例を用いて)
seaturt1e
1
140
現場の壁を乗り越えて、 「計装注入」が拓く オブザーバビリティ / Beyond the Field Barriers: Instrumentation Injection and the Future of Observability
aoto
PRO
1
460
AWS DMS で SQL Server を移行してみた/aws-dms-sql-server-migration
emiki
0
230
20251027_マルチエージェントとは
almondo_event
1
410
Building a cloud native business on open source
lizrice
0
180
serverless team topology
_kensh
3
230
CREが作る自己解決サイクルSlackワークフローに組み込んだAIによる社内ヘルプデスク改革 #cre_meetup
bengo4com
0
330
コンパウンド組織のCRE #cre_meetup
layerx
PRO
1
270
Wasmの気になる最新情報
askua
0
190
ヘンリー会社紹介資料(エンジニア向け) / company deck for engineer
henryofficial
0
370
頭部ふわふわ浄酔器
uyupun
0
110
Featured
See All Featured
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
How to Think Like a Performance Engineer
csswizardry
27
2.1k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Keith and Marios Guide to Fast Websites
keithpitt
411
23k
GraphQLとの向き合い方2022年版
quramy
49
14k
Designing for humans not robots
tammielis
254
26k
Raft: Consensus for Rubyists
vanstee
140
7.2k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.7k
Six Lessons from altMBA
skipperchong
29
4k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
658
61k
We Have a Design System, Now What?
morganepeng
53
7.8k
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ʹർΕͨͱ͔ͦ͏͍͏ͷͰͳ͍ •
νϡʔχϯάͱ͔ͦͦΔؾͳ͔ͬͨ