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
Pythonで始める負荷試験
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Yusuke Nishio
August 28, 2020
Programming
6k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Pythonで始める負荷試験
PyCon JP 2020 Online
2020年8月28日(火)
https://pycon.jp/2020/
Yusuke Nishio
August 28, 2020
More Decks by Yusuke Nishio
See All by Yusuke Nishio
Python研修の作り方 -Teaching Is Learning-
nissy0409240
0
5.5k
Other Decks in Programming
See All in Programming
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
350k
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
220
dRuby over BLE
makicamel
2
390
The NotImplementedError Problem in Ruby
koic
1
970
スマートグラスで並列バイブコーディング
hyshu
0
260
さぁV100、メモリをお食べ・・・
nilpe
0
160
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
1
540
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
410
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
310
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
170
SREは、MCPとSRE Agentをこう使え!
kazumax55
0
120
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
560
Featured
See All Featured
Facilitating Awesome Meetings
lara
57
7k
Code Reviewing Like a Champion
maltzj
528
40k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Amusing Abliteration
ianozsvald
1
210
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
A Tale of Four Properties
chriscoyier
163
24k
Optimizing for Happiness
mojombo
378
71k
How to Think Like a Performance Engineer
csswizardry
28
2.7k
Design in an AI World
tapps
1
250
Practical Orchestrator
shlominoach
191
11k
Transcript
西尾 友佑(@nissy0409240) 2020年8月28日 PyCon2020 Pythonで始める負荷試験
© BrainPad Inc. 2 • 名前: 西尾 友佑(Yusuke Nishio) ◦
Twitter: @nissy0409240 • 所属: ブレインパッドプロダクトビジネス本部 • 登壇歴: PyCon JP 2018登壇 ◦ Python研修の作り方-Teaching Is Learning- • 2020年の主な活動 ◦ リスティング広告関連ツール開発 ◦ BrainPadスポンサーブースの中の人 ◦ PB本部Twitter(@BrainPadProduct)の中の人 ▪ ただいま裏実況中です! 自己紹介
© BrainPad Inc. 3 • 資料公開あり ◦ Speaker Deckにて公開しています •
実況中継大歓迎です ◦ #pyconjp ◦ #pyconjp_4 よろしくお願いします
© BrainPad Inc. 4 • Python製ツールLocustの紹介 • Locustを用いて負荷試験を行う方法 • 負荷試験手法ならびに結果を属人化させない方法
話すこと
© BrainPad Inc. 5 • きっかけ • Locustとは • 負荷試験の実施
• デモ アジェンダ
きっかけ
© BrainPad Inc. 7 • 担当プロダクトでとある機能を実装した • 使われ方によっては最大数万件の更新処理が 発生することが可能性があった •
現状でどれだけ捌けるのかリリース前に 負荷試験を行うことになった ◦ どれくらいのリクエストなら耐えれるかを 調べるだけのシンプルなテスト要件 • 初めての負荷試験でしたので ツールの使い方から調べるレベルでした 背景
© BrainPad Inc. 8 システム構成
© BrainPad Inc. 9 • プロダクトのAPI部分でPythonが使われている ◦ 運用時に使うスクリプトもPythonが使われている ◦ チーム全員書けるので導入コストが低く済む
• Pythonで書けないかと考えた ◦ “python 負荷試験”で検索 ◦ Locustの存在を知る ◦ 使ってみようと考えた • プログラミング言語の中でPythonが 一番手に馴染んでた ◦ シナリオ書く時間短縮に繋がる 考えたこと
Locustとは
© BrainPad Inc. 11 • GUIのインターフェースもついている Python製の負荷試験ツール • 公式サイト ◦
https://locust.io/ • ドキュメント ◦ https://docs.locust.io/en/stable/ • ソースコード ◦ https://github.com/locustio/locust • “Locust”とは日本語でバッタや イナゴのことを意味する Locustとは
© BrainPad Inc. 12 • Pythonで実行可能な処理ならなんでも出来る ◦ エンドポイントをリクエスト毎に変更可能 ◦ リクエスト時のボディを変更可能
◦ DBとの接続も可能 • 制約があっても対応可能 ◦ セッション保持可能 ◦ タスクの実行順制御 ◦ タスク実行割合制御 前提
© BrainPad Inc. 13 • JMeter ◦ 豊富なレポートや複雑なシナリオを 書くことが可能 ◦
古くからあるため情報は沢山ある ◦ メモリ管理が面倒(たまに落ちる) • Gatling ◦ 豊富なレポートや複雑なシナリオを 書くことが可能 ◦ Scalaでシナリオを書ける 他のツールとの比較
© BrainPad Inc. 14 • 下記コマンドを実行(Mac環境) $ pip3 install locust
• 実行後に下記コマンドを実行する $ locust --help ◦ ヘルプが表示されることを確認 • サポートされているPythonのバージョン ◦ 3.6 ◦ 3.7 ◦ 3.8 インストール方法
© BrainPad Inc. 15 • Pythonスクリプトで記述します • ファイル名はなんでもOK ◦ デフォルトではlocustfile.pyに
記載された内容が実行されます シナリオを作成
© BrainPad Inc. 16 シナリオ例
© BrainPad Inc. 17 APIサーバー例
© BrainPad Inc. 18 • 下記コマンドを実行 $ locust -H http://localhost:8080
-f locustfile.py ◦ -fオプションで実行したいシナリオが書かれたファイルを 指定可能 ◦ -Hオプションでリクエスト先エンドポイントを指定可能 ◦ -Pオプションで起動時のポートを指定可能 (デフォルトでは8089ポート) 起動方法
© BrainPad Inc. 19 起動時の画面
負荷試験の実施
© BrainPad Inc. 21 テスト条件の変え方 作成されるクライアント数の最大値 (ユーザー数の最大値と同義) クライアントの作成スピード (毎秒ごと)
© BrainPad Inc. 22 テスト開始 Start swarmingボタンを押すとリクエスト実行 が開始される
© BrainPad Inc. 23 テスト実行中
© BrainPad Inc. 24 テスト実行中
© BrainPad Inc. 25 テスト実行中
© BrainPad Inc. 26 テスト実行中
© BrainPad Inc. 27 テスト実行終了
© BrainPad Inc. 28 テスト結果の共有
© BrainPad Inc. 29 テスト結果の共有
© BrainPad Inc. 30 • Pythonで書かれたソースコードなのでGit管理が可能 ◦ どのような意図でどう実装したかが残る ◦ 実行したシナリオもそのまま共有される
◦ 自分の手元から試すことも可能 シナリオの更新・共有
© BrainPad Inc. 31 • Locustからいくつかのシナリオを実行 どこまで耐えられるのかを計測 現場での様子
© BrainPad Inc. 32 • 検証環境で何回か試しスペックを見積もる • 環境の見直しを行いリリース • リリース後も問題なく稼働
現場での様子
デモ
© BrainPad Inc. 34 • 実行したコード • https://github.com/nissy0409240/locust_demo • 起動方法はREADME.mdをご確認下さい
デモ
© BrainPad Inc. 35 • Locustを用いた負荷試験方法についてお話させて頂きました • 負荷試験という一見コーディングとは関係ない作業も Pythonを用いたツールを用いれば コーディングとして行える
• Pythonに寄せることでツールの使い方ではなく Pythonでどのように記述するかに変わる • コードとして残ることは再現性のある ドキュメントとも言えるのではないか まとめ
© BrainPad Inc. 36 • ブレインパッドではPythonエンジニアを積極採用中です ◦ アプリケーションエンジニア ◦ 機械学習エンジニア
◦ データサイエンティスト • ご応募お待ちしています! ◦ https://www.brainpad.co.jp/recruit/ • 詳しい話はスポンサーブースで! おやくそく
© BrainPad Inc. 37 ご静聴ありがとうございました
株式会社ブレインパッド 〒108-0071 東京都港区白金台3-2-10 白金台ビル3F TEL:03-6721-7002 FAX:03-6721-7010 www.brainpad.co.jp
[email protected]
本資料は、未刊行文書として日本及び各国の著作権法に基づき保護されております。本資料には、株式会社ブレインパッド所有の特定情報が含まれて おり、これら情報に基づく本資料の内容は、御社以外の第三者に開示されること、また、本資料を評価する以外の目的で、その一部または全文を複製、 使用、公開することは、禁止されています。また、株式会社ブレインパッドによる書面での許可なく、それら情報の一部または全文を使用または公開する ことは、いかなる場合も禁じられております。