Schnellstart


Was ist Bencher?

Bencher ist eine Suite von kontinuierlichen Benchmarking-Tools. Hatten Sie jemals eine Performance Regression, die Ihre Nutzer beeinflusste? Bencher h├Ątte das verhindern k├Ânnen. Bencher erm├Âglicht es Ihnen, Leistungsregressionen vorher zu erkennen und zu verhindern, bevor sie in die Produktion gelangen.

  • Ausf├╝hren: F├╝hren Sie Ihre Benchmarks lokal oder in CI mit Ihren bevorzugten Benchmarking-Tools aus. Das bencher CLI umfasst einfach Ihr vorhandenes Benchmark-Harness und speichert die Ergebnisse.
  • Verfolgen: Verfolgen Sie die Ergebnisse Ihrer Benchmarks im Laufe der Zeit. ├ťberwachen, abfragen und grafisch darstellen der Ergebnisse mit der Bencher Web Konsole auf Basis des Quellzweigs, Testbetts und Ma├čnahme.
  • Auffangen: Fangen Sie Leistungsregressionen in CI ab. Bencher verwendet modernste, anpassbare Analysen, um Leistungsregressionen zu erkennen, bevor sie in die Produktion gelangen.

Aus denselben Gr├╝nden, warum Unit Tests in CI laufen, um Feature Regressionen zu verhindern, sollten Benchmarks in CI mit Bencher ausgef├╝hrt werden, um Leistungsregressionen zu verhindern. Performance-Bugs sind Fehler!


Installation des bencher CLI

Linux, Mac, & Unix

F├╝r Linux, Mac und andere Unix-├Ąhnliche Systeme f├╝hren Sie Folgendes in Ihrem Terminal aus:

Terminal window
curl --proto '=https' --tlsv1.2 -sSfL https://bencher.dev/download/install-cli.sh | sh

Windows

F├╝r Windows-Systeme f├╝hren Sie Folgendes in einem PowerShell-Terminal aus:

Terminal window
irm https://bencher.dev/download/install-cli.ps1 | iex

­čÉ░ Wenn Sie einen Fehler erhalten, der besagt Das Ausf├╝hren von Skripten ist auf diesem System deaktiviert:

  • ├ľffnen Sie Powershell mit Als Administrator ausf├╝hren
  • Ausf├╝hren: Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
  • Eingeben: Y
  • F├╝hren Sie dieses Skript erneut aus

F├╝r weitere Installationsm├Âglichkeiten, siehe wie man das bencher CLI installiert.

Nun, testen wir, ob wir das bencher CLI installiert haben.

F├╝hren Sie aus: bencher --version

Sie sollten sehen:

$ bencher --version
bencher 0.3.26

Erstellen Sie ein Bencher Cloud Konto

Bencher ist Open-Source und selbst hostbar. Wenn Sie an Self-Hosting interessiert sind, schauen Sie sich das Bencher Docker-Tutorial an. F├╝r dieses Tutorial werden wir jedoch Bencher Cloud verwenden.

Registrieren Sie sich f├╝r Bencher Cloud


Sobald Sie ein Konto erstellt haben, m├╝ssen Sie Ihre E-Mail-Adresse best├Ątigen. ├ťberpr├╝fen Sie Ihre E-Mails auf einen Best├Ątigungslink. Danach sollten Sie bei Bencher Cloud angemeldet sein.


Erstellen Sie einen API-Token

Um die Bencher-API verwenden zu k├Ânnen, m├╝ssen Sie ein API-Token erstellen. Navigieren Sie zur Bencher Console. Fahren Sie mit der Maus ├╝ber Ihren Namen in der rechten oberen Ecke. Ein Dropdown-Men├╝ sollte erscheinen. W├Ąhlen Sie Tokens. Sobald Sie auf der API-Tokens-Seite sind, klicken Sie auf den Ô׼ Hinzuf├╝gen-Button.

Ein API-Token hinzuf├╝gen


Sobald Sie Ihr neues API-Token erstellt haben, m├╝ssen Sie es in Ihre Zwischenablage kopieren. In dem Terminal, in dem Sie arbeiten m├Âchten, exportieren Sie das API-Token als Umgebungsvariable.

F├╝hren Sie auf Linux-, Mac- und anderen Unix-├Ąhnlichen Systemen aus: export BENCHER_API_TOKEN=IHR_TOKEN

F├╝hren Sie auf Windows aus: $env:BENCHER_API_TOKEN = "IHR_TOKEN"

Wenn Sie dann echo $BENCHER_API_TOKEN oder Write-Output $env:BENCHER_API_TOKEN ausf├╝hren.

Sie sollten sehen:

$ echo $BENCHER_API_TOKEN
IHR_TOKEN

­čÉ░ Hinweis: Wenn Sie zu einem anderen Terminal wechseln, m├╝ssen Sie das API-Token erneut exportieren.


Erstellen Sie ein Projekt

Jetzt, da wir ein Benutzerkonto und ein API-Token haben, k├Ânnen wir ein Projekt erstellen. Zuerst m├╝ssen wir wissen, zu welcher Organisation unser neues Projekt geh├Ârt.

F├╝hren Sie aus: bencher org ls

Sie sollten so etwas sehen:

$ bencher org ls
[
{
"name": "Saul Goodman",
"slug": "saul-goodman",
"uuid": "4581feb0-6cac-40a9-bd8a-d7865183b01e"
"created": "2022-07-06T11:24:36Z",
"modified": "2022-07-06T11:24:36Z"
}
]

Ihre Ausgabe sollte leicht von der oben gezeigten abweichen:

  • Die uuid ist pseudorandom
  • Der name und slug basieren auf Ihrem Benutzernamen
  • Die created und modified Zeitstempel stammen von Ihrer Anmeldung

Wir k├Ânnen nun ein neues Projekt innerhalb Ihrer Organisation erstellen. Ersetzen Sie Ihren Organisations-slug durch das Argument --org (dh IHR_ORG_SLUG) im unten stehenden Befehl.

F├╝hren Sie aus: bencher project create --org IHR_ORG_SLUG --url http://www.savewalterwhite.com "Save Walter White"

Sie sollten so etwas sehen:

$ bencher project create --org saul-goodman --url http://www.savewalterwhite.com "Save Walter White"
{
"organization": "4581feb0-6cac-40a9-bd8a-d7865183b01e",
"name": "Save Walter White",
"slug": "save-walter-white-12345",
"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"
}

Wiederum sollte Ihr Ergebnis etwas anders aussehen als das oben gezeigte. Es ist nur wichtig, dass dieser Befehl funktioniert. Notieren Sie sich das Projekt slug Feld (z.B. save-walter-white-12345).


F├╝hren Sie einen Bericht aus

Endlich sind wir bereit, einige Benchmark-Metriken zu sammeln! Um die Sache einfach zu halten, verwenden wir in diesem Tutorial Testdaten.

F├╝hren Sie aus: bencher mock

Sie sollten so etwas sehen:

$ 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
}
}
}

Ihre Ausgabe sollte leicht von der oben gezeigten abweichen, da die Daten pseudorandom sind. Es ist nur wichtig, dass dieser Befehl funktioniert.


Jetzt f├╝hren wir einen Bericht mit Test-Benchmark-Messdaten aus. Ersetzen Sie Ihren Projekt slug durch das Argument --project (dh IHR_PROJECT_SLUG) im unten stehenden Befehl.

F├╝hren Sie aus: bencher run --project IHR_PROJECT_SLUG "bencher mock"

Sie sollten so etwas sehen:

$ bencher run --project save-walter-white-12345 "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
}
}
}
{
"branch": "master",
"end_time": "2023-07-18T14:21:27.796871Z",
"results": [
"{\n \"bencher::mock_0\": {\n \"latency\": {\n \"value\": 0.15496641529475275,\n \"lower_value\": 0.13946977376527747,\n \"upper_value\": 0.17046305682422802\n }\n },\n \"bencher::mock_1\": {\n \"latency\": {\n \"value\": 18.648298578180437,\n \"lower_value\": 16.783468720362393,\n \"upper_value\": 20.513128435998482\n }\n },\n \"bencher::mock_2\": {\n \"latency\": {\n \"value\": 28.20328182167366,\n \"lower_value\": 25.382953639506294,\n \"upper_value\": 31.023610003841025\n }\n },\n \"bencher::mock_3\": {\n \"latency\": {\n \"value\": 34.45732560787596,\n \"lower_value\": 31.01159304708836,\n \"upper_value\": 37.903058168663556\n }\n },\n \"bencher::mock_4\": {\n \"latency\": {\n \"value\": 44.9237520767597,\n \"lower_value\": 40.43137686908373,\n \"upper_value\": 49.41612728443567\n }\n }\n}\n"
],
"settings": {},
"start_time": "2023-07-18T14:21:27.773930Z",
"testbed": "base"
}
{
"uuid": "5554a92c-6f5c-481d-bd47-990f0a9bac6d",
"user": { ... },
"project": { ... },
"branch": { ... },
"testbed": { ...},
"start_time": "2023-07-18T14:21:27Z",
"end_time": "2023-07-18T14:21:27Z",
"adapter": "magic",
"results": [
[
{
"measure": { ... },
"threshold": null,
"benchmarks": [ ... ]
}
]
],
"alerts": [],
"created": "2023-07-18T14:21:27Z"
}
View results:
- bencher::mock_0: https://bencher.dev/console/projects/save-walter-white-12345/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-12345/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-12345/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-12345/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-12345/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

Sie k├Ânnen nun die Ergebnisse aus jedem der Benchmarks im Browser anzeigen. Klicken Sie auf die Links unter View results oder kopieren und f├╝gen Sie sie ein. Es sollte nur einen einzigen Datenpunkt f├╝r jedes Benchmark geben, also lassen Sie uns mehr Daten hinzuf├╝gen!


Zuerst setzen wir unseren Projektslug als Umgebungsvariable, damit wir ihn nicht mit --project bei jedem einzelnen Lauf angeben m├╝ssen.

F├╝hren Sie aus: export BENCHER_PROJECT=save-walter-white-12345

Wenn Sie dann ausf├╝hren: echo $BENCHER_PROJECT

Sollten Sie sehen:

$ echo $BENCHER_PROJECT
save-walter-white-12345

Lassen Sie uns den gleichen Befehl erneut ohne --project ausf├╝hren, um mehr Daten zu generieren.

F├╝hren Sie aus: bencher run "bencher mock"


Jetzt generieren wir mehr Daten, aber diesmal leiten wir unsere Ergebnisse in bencher run um.

F├╝hren Sie aus: bencher mock | bencher run


Manchmal m├Âchten Sie vielleicht Ihre Ergebnisse in einer Datei speichern und bencher run holt sie ab.

F├╝hren Sie aus: bencher run "bencher mock > results.json" --file results.json


Ebenso k├Ânnte ein separater Prozess Ihre Benchmarks durchf├╝hren und Ihre Ergebnisse in einer Datei speichern. Dann holt bencher run sie einfach ab.

F├╝hren Sie aus: bencher mock > results.json && bencher run --file results.json


Schlie├člich lassen Sie uns eine Menge Daten mit dem Argument --iter von bencher run generieren.

F├╝hren Sie aus: bencher run --iter 16 "bencher mock"


­čÉ░ Tipp: Schauen Sie sich die Unterlagen zu bencher run CLI-Unterbefehl f├╝r einen vollst├Ąndigen ├ťberblick dar├╝ber, was bencher run alles kann!


Erstellen Sie einen Alert

Jetzt, da wir einige historische Daten f├╝r unsere Benchmarks haben, lassen Sie uns einen Alert generieren! Alerts werden erzeugt, wenn ein Benchmark-Ergebnis als Leistungsr├╝ckgang erkannt wird. Also simulieren wir einen Leistungsr├╝ckgang!

F├╝hren Sie aus: bencher run "bencher mock --pow 8"


Am Ende der Ausgabe sollte ein neuer Abschnitt namens View alerts:

View alerts:
- bencher::mock_0: https://bencher.dev/console/projects/save-walter-white-12345/alerts/b2329d5a-4471-48ab-bfbd-959d46ba1aa6
- bencher::mock_1: https://bencher.dev/console/projects/save-walter-white-12345/alerts/181b1cf5-d984-402a-b0f1-68f6f119fa66
- bencher::mock_2: https://bencher.dev/console/projects/save-walter-white-12345/alerts/b9b6c904-c657-4908-97db-dbeca40f8782
- bencher::mock_3: https://bencher.dev/console/projects/save-walter-white-12345/alerts/5567ff32-2829-4b6a-969a-af33ce3828db
- bencher::mock_4: https://bencher.dev/console/projects/save-walter-white-12345/alerts/49f2768f-ccda-4933-8e1d-08948f57a74d

Sie k├Ânnen nun die Alerts f├╝r jedes Benchmark im Browser anzeigen. Klicken Sie auf die Links unter View alerts oder kopieren und f├╝gen Sie sie ein.


­čÉ░ Tipp: Schauen Sie sich die Schwellenwert- & Alert-Dokumentation f├╝r einen vollst├Ąndigen ├ťberblick dar├╝ber an, wie Leistungsr├╝ckg├Ąnge erkannt werden!



­čÉ░ Herzlichen Gl├╝ckwunsch! Sie haben Ihren ersten Leistungseinbruch erkannt! ­čÄë


Weiter: ├ťbersicht ├╝ber Benchmarking Ô×í

­čĄľ Dieses Dokument wurde automatisch von OpenAI GPT-4 generiert. Es ist m├Âglicherweise nicht korrekt und kann Fehler enthalten. Wenn Sie Fehler finden, ├Âffnen Sie bitte ein Problem auf GitHub.