クイックスタート
Bencherとは何ですか?
Bencherは、連続ベンチマーキングツールのスイートです。 パフォーマンスの後退があなたのユーザーに影響を与えたことはありますか? Bencherなら、それが起こるのを防げた可能性があります。 Bencherは、パフォーマンスの低下を_productionに到達する_前に検出し、防止することを可能にします。
- 実行: お気に入りのベンチマーキングツールを使用してベンチマークをローカルまたはCIで実行します。
bencher
CLIは単にあなたの既存のベンチマークハーネスをラップし、その結果を保存します。 - 追跡: ベンチマークの結果を時間と共に追跡します。ソースブランチ、テストベッド、測定基準に基づいてBencherのWebコンソールを使用して結果を監視、クエリ、グラフ化します。
- キャッチ: CIでパフォーマンスの後退をキャッチします。Bencherは最先端のカスタマイズ可能な分析を使用して、パフォーマンスの後退がProductionに到達する前にそれを検出します。
機能の後退を防ぐためにユニットテストがCIで実行されるのと同じ理由で、Bencherを使用してCIでベンチマークを実行してパフォーマンスの後退を防ぐべきです。パフォーマンスのバグはバグです!
bencher
CLIのインストール
Linux、Mac、およびUnix
Linux、Mac、およびその他のUnix系システムでは、ターミナルで以下を実行します:
curl --proto '=https' --tlsv1.2 -sSfL https://bencher.dev/download/install-cli.sh | sh
Windows
Windowsシステムでは、以下のように_PowerShell_ターミナルで実行します:
irm https://bencher.dev/download/install-cli.ps1 | iex
🐰
このシステムではスクリプトの実行が無効化されています
というエラーが表示される場合:
管理者として実行
でPowershellを開く
- 以下を実行:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
- 次に入力:
Y
- このスクリプトを再実行
追加のインストールオプションについては、bencher
CLIのインストール方法を参照してください。
今度は、bencher
CLIがインストールされていることをテストしましょう。
実行: bencher --version
次のように表示されるはずです:
$ bencher --versionbencher 0.4.36
Bencher Cloudのアカウントを作成する
Bencherはオープンソースで自己ホスティングが可能です。 自己ホスティングに興味がある場合は、Bencher Dockerチュートリアルをチェックしてください。 しかし、このチュートリアルでは、Bencher Cloudを使用します。
Bencher Cloudへ登録する
アカウントを作成したら、メールアドレスを確認する必要があります。 確認リンク付きのメールを確認してください。 その後、Bencher Cloudにログインすることができます。
APIトークンの生成
Bencher APIを使用するためには、APIトークンを生成する必要があります。
Bencherコンソールに移動します。
右上隅のあなたの名前の上にマウスを持って行きます。
ドロップダウンメニューが表示されるはずです。Tokens
を選択します。
APIトークンページに移動したら、➕ Add
ボタンをクリックします。
APIトークンの追加
新しいAPIトークンを生成したら、それをクリップボードにコピーする必要があります。 作業予定のターミナルで、APIトークンを環境変数としてエクスポートします。
Linux、Mac、その他のUnix系システムでは、次のように実行します: export BENCHER_API_TOKEN=YOUR_TOKEN
Windowsでは、次のように実行します: $env:BENCHER_API_TOKEN = "YOUR_TOKEN"
その後、echo $BENCHER_API_TOKEN
またはWrite-Output $env:BENCHER_API_TOKEN
を実行します。
以下のように表示されるはずです:
$ echo $BENCHER_API_TOKENYOUR_TOKEN
🐰 注意: 別のターミナルに移動する場合、APIトークンを再度エクスポートする必要があります。
プロジェクトを作成する
ユーザーアカウントとAPIトークンを取得したので、プロジェクトを作成することができます。 まず、新しいプロジェクトが所属する組織を知る必要があります。
実行:bencher org list
以下のような結果が表示されます:
$ bencher org list[ { "name": "Saul Goodman", "slug": "saul-goodman", "uuid": "4581feb0-6cac-40a9-bd8a-d7865183b01e" "created": "2022-07-06T11:24:36Z", "modified": "2022-07-06T11:24:36Z" }]
あなたの出力は上記と少し異なるはずです:
uuid
は疑似ランダムですname
とslug
はあなたのユーザー名に基づいていますcreated
とmodified
のタイムスタンプは、あなたが登録した時刻になります
では、その組織内に新しいプロジェクトを作成できます。
以下のコマンドのorganization
引数に、組織のslug
(つまり、YOUR_ORG_SLUG
)を代入します。
実行:bencher project create YOUR_ORG_SLUG --name "Save Walter White" --url http://www.savewalterwhite.com
以下のような結果を見るはずです:
$ bencher project create saul-goodman --name "Save Walter White" --url http://www.savewalterwhite.com{ "organization": "4581feb0-6cac-40a9-bd8a-d7865183b01e", "name": "Save Walter White", "slug": "save-walter-white-1234abcd", "uuid": "c6c2a8e8-685e-4413-9a19-5b79053a71b1" "url": "http://www.savewalterwhite.com", "public": true, "created": "2022-07-06T11:36:24Z", "modified": "2022-07-06T11:36:24Z"}
再度、あなたの出力は上記の結果と少し異なるはずです。
大切なのは、このコマンドが動作することです。
プロジェクトのslug
フィールド(つまり、save-walter-white-1234abcd
)を記録しておいてください。
レポートを実行する
ついにベンチマークのメトリックを収集する準備が整いました! このチュートリアルでは簡単のため、モックデータを使用します。
実行:bencher mock
以下のような結果が表示されます:
$ bencher mock{ "bencher::mock_0": { "latency": { "value": 3.7865423396154463, "lower_value": 3.4078881056539014, "upper_value": 4.165196573576991 } }, "bencher::mock_1": { "latency": { "value": 16.398332128878437, "lower_value": 14.758498915990593, "upper_value": 18.03816534176628 } }, "bencher::mock_2": { "latency": { "value": 20.88091359871672, "lower_value": 18.792822238845048, "upper_value": 22.969004958588393 } }, "bencher::mock_3": { "latency": { "value": 33.88103801203782, "lower_value": 30.492934210834036, "upper_value": 37.2691418132416 } }, "bencher::mock_4": { "latency": { "value": 40.90515638867921, "lower_value": 36.81464074981129, "upper_value": 44.99567202754713 } }}
あなたの出力は上記の結果と少し異なるはずです、なぜならデータは疑似ランダムだからです。 大切なのは、このコマンドが動作することです。
では、モックのベンチマークメトリックデータを使用してレポートを実行してみましょう。
下記のコマンドの--project
引数に、プロジェクトslug
(つまり、YOUR_PROJECT_SLUG
)を代入します。
実行:bencher run --project YOUR_PROJECT_SLUG "bencher mock"
以下のような結果が表示されます:
$ bencher run --project save-walter-white-1234abcd "bencher mock"{ "bencher::mock_0": { "latency": { "value": 0.15496641529475275, "lower_value": 0.13946977376527747, "upper_value": 0.17046305682422802 } }, "bencher::mock_1": { "latency": { "value": 18.648298578180437, "lower_value": 16.783468720362393, "upper_value": 20.513128435998482 } }, "bencher::mock_2": { "latency": { "value": 28.20328182167366, "lower_value": 25.382953639506294, "upper_value": 31.023610003841025 } }, "bencher::mock_3": { "latency": { "value": 34.45732560787596, "lower_value": 31.01159304708836, "upper_value": 37.903058168663556 } }, "bencher::mock_4": { "latency": { "value": 44.9237520767597, "lower_value": 40.43137686908373, "upper_value": 49.41612728443567 } }}
View results:- bencher::mock_0: https://bencher.dev/console/projects/save-walter-white-1234abcd/perf?measures=4358146b-b647-4869-9d24-bd22bb0c49b5&branches=95521eff-09fa-4c02-abe1-dd824108869d&testbeds=5b4a6f3e-a27d-4cc3-a2ce-851dc6421e6e&benchmarks=88375e7c-f1e0-4cbb-bde1-bdb7773022ae- bencher::mock_1: https://bencher.dev/console/projects/save-walter-white-1234abcd/perf?measures=4358146b-b647-4869-9d24-bd22bb0c49b5&branches=95521eff-09fa-4c02-abe1-dd824108869d&testbeds=5b4a6f3e-a27d-4cc3-a2ce-851dc6421e6e&benchmarks=e81c7863-cc4b-4e22-b507-c1e238871137- bencher::mock_2: https://bencher.dev/console/projects/save-walter-white-1234abcd/perf?measures=4358146b-b647-4869-9d24-bd22bb0c49b5&branches=95521eff-09fa-4c02-abe1-dd824108869d&testbeds=5b4a6f3e-a27d-4cc3-a2ce-851dc6421e6e&benchmarks=31dede44-d23a-4baf-b639-63f2ac742e42- bencher::mock_3: https://bencher.dev/console/projects/save-walter-white-1234abcd/perf?measures=4358146b-b647-4869-9d24-bd22bb0c49b5&branches=95521eff-09fa-4c02-abe1-dd824108869d&testbeds=5b4a6f3e-a27d-4cc3-a2ce-851dc6421e6e&benchmarks=c7e32369-f3dd-473d-99a3-6289ae32b38e- bencher::mock_4: https://bencher.dev/console/projects/save-walter-white-1234abcd/perf?measures=4358146b-b647-4869-9d24-bd22bb0c49b5&branches=95521eff-09fa-4c02-abe1-dd824108869d&testbeds=5b4a6f3e-a27d-4cc3-a2ce-851dc6421e6e&benchmarks=779bc477-4964-4bae-aa8c-4da3e388822c
ここでもブラウザで各ベンチマークの結果を見ることができます。
View results
からリンクをクリックするか、コピーしてペーストします。
各ベンチマークには一つだけのデータポイントがあるはずなので、データをもっと追加しましょう!
まず、プロジェクトのスラッグを環境変数として設定して、それぞれの実行で--project
を指定しなくても済むようにしましょう。
実行: export BENCHER_PROJECT=save-walter-white-1234abcd
その後、次のように実行してください: echo $BENCHER_PROJECT
以下のように表示されます:
$ echo $BENCHER_PROJECTsave-walter-white-1234abcd
同じコマンドをもう一度--project
なしで実行し、さらにデータを生成します。
実行: bencher run "bencher mock"
さらにデータを生成しますが、今度は結果をbencher run
にパイプします。
実行: bencher mock | bencher run
時々、結果をファイルに保存し、bencher run
でそれらを取得したいことがあります。
実行: bencher run --file results.json "bencher mock > results.json"
また、別のプロセスでベンチマークを実行し、結果をファイルに保存すると、bencher run
がそれらを取得します。
実行: bencher mock > results.json && bencher run --file results.json
最後に、bencher run
の--iter
引数を使用して多くのデータを生成します。
実行: bencher run --iter 16 "bencher mock"
🐰 ヒント:
bencher run
CLIサブコマンドのドキュメントをチェックして、bencher run
ができるすべてのことを完全に把握してください!
アラートを生成する
ベンチマークの履歴データが手元にあるので、アラートを生成しましょう! アラートは、ベンチマーク結果がパフォーマンスリグレッションと判断されたときに生成されます。 それでは、パフォーマンスリグレッションを模擬しましょう!
実行:bencher run "bencher mock --pow 8"
出力の最後に新しいセクションが追加され、View alerts
と表示されます:
View alerts:- bencher::mock_0: https://bencher.dev/console/projects/save-walter-white-1234abcd/alerts/b2329d5a-4471-48ab-bfbd-959d46ba1aa6- bencher::mock_1: https://bencher.dev/console/projects/save-walter-white-1234abcd/alerts/181b1cf5-d984-402a-b0f1-68f6f119fa66- bencher::mock_2: https://bencher.dev/console/projects/save-walter-white-1234abcd/alerts/b9b6c904-c657-4908-97db-dbeca40f8782- bencher::mock_3: https://bencher.dev/console/projects/save-walter-white-1234abcd/alerts/5567ff32-2829-4b6a-969a-af33ce3828db- bencher::mock_4: https://bencher.dev/console/projects/save-walter-white-1234abcd/alerts/49f2768f-ccda-4933-8e1d-08948f57a74d
ブラウザで各ベンチマークのアラートを見ることができます。
View alerts
からリンクをクリックするか、コピーしてペーストします。
🐰 ヒント: パフォーマンスリグレッションがどのように検出されるかの全体像を把握するため、閾値&アラートドキュメントをチェックしてください!
🐰 おめでとうございます!初めてのパフォーマンスリグレッションを捕まえました!🎉