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
Yusuke Nishio
August 28, 2020
Programming
4
5.4k
Pythonで始める負荷試験
PyCon JP 2020 Online
2020年8月28日(火)
https://pycon.jp/2020/
Yusuke Nishio
August 28, 2020
Tweet
Share
More Decks by Yusuke Nishio
See All by Yusuke Nishio
Python研修の作り方 -Teaching Is Learning-
nissy0409240
0
4.8k
Other Decks in Programming
See All in Programming
アジャイルを支えるテストアーキテクチャ設計/Test Architecting for Agile
goyoki
9
3.3k
Laravel や Symfony で手っ取り早く OpenAPI のドキュメントを作成する
azuki
2
110
とにかくAWS GameDay!AWSは世界の共通言語! / Anyway, AWS GameDay! AWS is the world's lingua franca!
seike460
PRO
1
860
シールドクラスをはじめよう / Getting Started with Sealed Classes
mackey0225
4
640
【Kaigi on Rails 2024】YOUTRUST スポンサーLT
krpk1900
1
330
Content Security Policy入門 セキュリティ設定と 違反レポートのはじめ方 / Introduction to Content Security Policy Getting Started with Security Configuration and Violation Reporting
uskey512
1
530
A Journey of Contribution and Collaboration in Open Source
ivargrimstad
0
890
見せてあげますよ、「本物のLaravel批判」ってやつを。
77web
7
7.7k
Jakarta EE meets AI
ivargrimstad
0
130
3rd party scriptでもReactを使いたい! Preact + Reactのハイブリッド開発
righttouch
PRO
1
600
AWS IaCの注目アップデート 2024年10月版
konokenj
3
3.3k
『ドメイン駆動設計をはじめよう』のモデリングアプローチ
masuda220
PRO
8
540
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
109
49k
Making the Leap to Tech Lead
cromwellryan
133
8.9k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
364
24k
Facilitating Awesome Meetings
lara
50
6.1k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Designing on Purpose - Digital PM Summit 2013
jponch
115
7k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
Ruby is Unlike a Banana
tanoku
97
11k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Gamification - CAS2011
davidbonilla
80
5k
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]
本資料は、未刊行文書として日本及び各国の著作権法に基づき保護されております。本資料には、株式会社ブレインパッド所有の特定情報が含まれて おり、これら情報に基づく本資料の内容は、御社以外の第三者に開示されること、また、本資料を評価する以外の目的で、その一部または全文を複製、 使用、公開することは、禁止されています。また、株式会社ブレインパッドによる書面での許可なく、それら情報の一部または全文を使用または公開する ことは、いかなる場合も禁じられております。