Démarrage Rapide
Quâest-ce que Bencher?
Bencher est un ensemble dâoutils de benchmarking continu. Avez-vous dĂ©jĂ subi un impact de la rĂ©gression de performance sur vos utilisateurs? Bencher aurait pu empĂȘcher cela. Bencher vous permet de dĂ©tecter et dâĂ©viter les rĂ©gressions de performance avant quâelles nâarrivent en production.
- Exécuter: Exécutez vos benchmarks localement ou dans CI en utilisant vos outils de benchmarking préférés. Le CLI
bencher
enveloppe simplement votre harnais de benchmarking existant et enregistre ses rĂ©sultats. - Suivre: Suivez les rĂ©sultats de vos benchmarks dans le temps. Surveillez, interrogez et tracez les rĂ©sultats Ă lâaide de la console web Bencher selon la branche source, la plate-forme de test, et le type de mĂ©trique.
- Attraper: Attrapez les rĂ©gressions de performance dans CI. Bencher utilise des analyses personnalisables de pointe pour dĂ©tecter les rĂ©gressions de performance avant quâelles nâarrivent en production.
Pour les mĂȘmes raisons que les tests unitaires sont exĂ©cutĂ©s en CI pour prĂ©venir les rĂ©gressions de fonctionnalitĂ©s, les benchmarks devraient ĂȘtre exĂ©cutĂ©s en CI avec Bencher pour prĂ©venir les rĂ©gressions de performance. Les bugs de performance sont des bugs!
Installez le CLI bencher
Pour installer le CLI bencher
, vous devrez avoir cargo
installé. Vérifiez si vous avez cargo
installé.
Exécutez: cargo --version
Vous devriez voir quelque chose comme:
$ cargo --version
cargo 1.65.0 (4bc8f24d3 2022-10-20)
Il est acceptable si votre numéro de version est différent. Il est juste important que cette commande fonctionne.
Sinon suivez les instructions pour installer cargo
via rustup
.
Sur Linux ou macOS, exécutez:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Avec cargo
installé, nous pouvons installer le CLI bencher
.
Exécutez:
cargo install --git https://github.com/bencherdev/bencher --tag v0.3.18 --locked bencher_cli
Vous devriez voir quelque chose comme:
$ cargo install --git https://github.com/bencherdev/bencher --tag 0.3.18 --locked bencher_cli
Installing bencher_cli v0.3.18 (/workspace/bencher/services/cli)
Updating crates.io index
âŠ
Finished release [optimized] target(s) in 0.27s
Installing /workspace/.cargo/bin/bencher
Installed package `bencher_cli v0.3.18 (/workspace/bencher/services/cli)` (executable `bencher`)
Encore une fois, il est acceptable si votre sortie est différente. Il est juste important que cette commande fonctionne.
Enfin, testons que nous avons le CLI bencher
installé.
Exécutez: bencher --version
Vous devriez voir:
$ bencher âversion
bencher 0.3.18
Créez un Compte Bencher Cloud
Bencher est open source et auto-hĂ©bergĂ©. Si vous ĂȘtes intĂ©ressĂ© par lâauto-hĂ©bergement, consultez le tutoriel Docker Bencher. Pour ce tutoriel cependant, nous allons utiliser Bencher Cloud.
Inscrivez-vous Ă Bencher Cloud
Une fois que vous avez créé un compte, vous devrez confirmer votre adresse Ă©lectronique. VĂ©rifiez dans vos emails pour un lien de confirmation. AprĂšs cela, vous devriez ĂȘtre connectĂ© Ă Bencher Cloud.
Créez un Jeton API
Pour utiliser lâAPI Bencher, vous aurez besoin de crĂ©er un jeton API.
Rendez-vous sur la Console Bencher.
Passez votre souris sur votre nom dans le coin supérieur droit.
Un menu déroulant devrait apparaßtre. Sélectionnez Tokens
.
Une fois sur la page des jetons API, cliquez sur le bouton â Ajouter
.
Ajoutez un Jeton API
Une fois que vous avez créé votre nouveau jeton API, vous devrez le copier dans votre presse-papiers. Dans le terminal dans lequel vous prĂ©voyez de travailler, exportez le jeton API en tant que variable dâenvironnement.
Exécutez: export BENCHER_API_TOKEN=VOTRE_TOKEN
Si vous exécutez ensuite: echo $BENCHER_API_TOKEN
Vous devriez voir:
$ echo $BENCHER_API_TOKEN
VOTRE_TOKEN
đ° Note: Si vous passez Ă un autre terminal, vous devrez exporter Ă nouveau le jeton API.
Créez un Projet
Maintenant que nous avons un compte dâutilisateur et un jeton API, nous pouvons crĂ©er un Projet. Dâabord, nous devons savoir Ă quelle organisation notre nouveau projet appartiendra.
Exécutez: bencher org ls
Vous devriez voir quelque chose comme:
$ 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"
}
]
Votre sortie devrait ĂȘtre lĂ©gĂšrement diffĂ©rente de celle-ci:
- Le
uuid
est pseudorandom - Le
name
etslug
seront basĂ©s sur votre nom dâutilisateur - Les horodatages
created
etmodified
seront ceux de votre inscription récente
Nous pouvons maintenant crĂ©er un nouveau Projet Ă lâintĂ©rieur de votre Organisation.
Substituez le slug
de votre Organisation Ă lâargument --org
(ie VOTRE_SLUG_ORG
) dans la commande ci-dessous.
Exécuter: bencher project create --org VOTRE_SLUG_ORG --url http://www.savewalterwhite.com "Save Walter White"
Vous devriez voir quelque chose comme:
$ 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"
}
Encore une fois, votre sortie devrait ĂȘtre lĂ©gĂšrement diffĂ©rente que celle-ci.
Il est juste important que cette commande fonctionne.
Prenez note du champ slug
du Projet (ie save-walter-white-12345
).
Exécutez un Rapport
Nous sommes enfin prĂȘts Ă collecter quelques mesures de benchmark! Pour des raisons de simplicitĂ©, nous utiliserons des donnĂ©es fictives dans ce tutoriel.
Exécutez: bencher mock
Vous devriez voir quelque chose comme:
$ 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
}
}
}
Votre sortie devrait ĂȘtre lĂ©gĂšrement diffĂ©rente de celle-ci, car les donnĂ©es sont pseudorandom. Il est juste important que cette commande fonctionne.
Maintenant, exécutons un rapport en utilisant des données fictives de mesures de benchmark.
Substituez votre slug
de Projet Ă lâargument --project
(ie VOTRE_SLUG_PROJET
) dans la commande ci-dessous.
Exécutez: bencher run --project VOTRE_SLUG_PROJET "bencher mock"
Vous devriez voir quelque chose comme:
$ 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": [
[
{
"metric_kind": { ... },
"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?metric_kinds=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?metric_kinds=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?metric_kinds=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?metric_kinds=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?metric_kinds=4358146b-b647-4869-9d24-bd22bb0c49b5&branches=95521eff-09fa-4c02-abe1-dd824108869d&testbeds=5b4a6f3e-a27d-4cc3-a2ce-851dc6421e6e&benchmarks=779bc477-4964-4bae-aa8c-4da3e388822c
Vous pouvez maintenant consulter les résultats de chacun des benchmarks dans le navigateur.
Cliquez ou copiez et collez les liens de View results
.
Il ne devrait y avoir quâun seul point de donnĂ©es pour chaque benchmark, alors ajoutons dâautres donnĂ©es!
Dâabord, mettons notre slug de Projet en tant que variable dâenvironnement, de sorte que nous nâavons pas Ă le fournir avec le --project
à chaque exécution.
Exécutez: export BENCHER_PROJECT=save-walter-white-12345
Si vous exécutez ensuite: echo $BENCHER_PROJECT
Vous devriez voir:
$ echo $BENCHER_PROJECT
save-walter-white-12345
RĂ©-exĂ©cutons la mĂȘme commande encore sans --project
pour générer plus de données.
Exécutez: bencher run "bencher mock"
Maintenant, générions plus de données, mais cette fois nous transmettrons nos résultats dans bencher run
.
Exécutez: bencher mock | bencher run
Parfois, vous pouvez vouloir sauvegarder vos résultats dans un fichier et que bencher run
les récupÚre.
Exécutez: bencher run "bencher mock > results.json" --file results.json
De mĂȘme, vous pouvez avoir un processus sĂ©parĂ© qui exĂ©cute vos benchmarks et sauvegardez vos rĂ©sultats dans un fichier. Ensuite bencher run
viendra simplement les récupérer.
Exécutez: bencher mock > results.json && bencher run --file results.json
Enfin, mettons en place beaucoup de donnĂ©es en utilisant lâargument --iter
de bencher run
.
Exécutez: bencher run --iter 16 "bencher mock"
đ° Astuce: Consultez les doc CLI sous-commande
bencher run
pour un aperçu complet de tout ce quebencher run
peut faire!
Générer une Alerte
Maintenant que nous avons des donnĂ©es historiques pour nos benchmarks, gĂ©nĂ©rons une Alerte! Les alertes sont gĂ©nĂ©rĂ©es lorsquâun rĂ©sultat de benchmark est dĂ©terminĂ© comme une rĂ©gression de performance. Alors simulons une rĂ©gression de performance!
Exécutez: bencher run "bencher mock --pow 8"
Il devrait y avoir une nouvelle section à la fin de la sortie appelée 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
Vous pouvez maintenant voir les Alertes pour chaque benchmark dans le navigateur.
Cliquez ou copiez et collez les liens de View alerts
.
đ° Astuce: Consultez les doc Seuil & Alertes pour un aperçu complet de comment sont dĂ©tectĂ©es les rĂ©gressions de performances!
đ° FĂ©licitations! Vous avez attrapĂ© votre premiĂšre rĂ©gression de performance! đ