DĂ©marrage Rapide


Qu’est-ce que Bencher?

Bencher est une suite d’outils de benchmarking continu. Avez-vous dĂ©jĂ  eu une rĂ©gression de performance qui a impactĂ© vos utilisateurs ? Bencher aurait pu empĂȘcher cela de se produire. Bencher vous permet de dĂ©tecter et de prĂ©venir les rĂ©gressions de performance avant qu’elles n’arrivent en production.

  • ExĂ©cuter: ExĂ©cutez vos benchmarks localement ou en CI en utilisant vos outils de benchmarking prĂ©fĂ©rĂ©s. La CLI bencher enveloppe simplement votre harnais de benchmarking existant et stocke ses rĂ©sultats.
  • Suivre: Suivez les rĂ©sultats de vos benchmarks au fil du temps. Surveillez, interrogez et graphiquez les rĂ©sultats Ă  l’aide de la console web Bencher en fonction de la branche source, du banc d’essai et de la mesure.
  • DĂ©tecter: DĂ©tectez les rĂ©gressions de performances en CI. Bencher utilise des analyses de pointe et personnalisables pour dĂ©tecter les rĂ©gressions de performances 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 !


Installer le CLI bencher

Linux, Mac, & Unix

Pour Linux, Mac, et autres systÚmes de type Unix, exécutez ce qui suit dans votre terminal :

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

Windows

Pour les systÚmes Windows, exécutez ce qui suit dans un terminal PowerShell :

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

🐰 Si vous recevez une erreur qui dit running scripts is disabled on this system:

  • Ouvrez Powershell en utilisant ExĂ©cuter en tant qu'administrateur
  • ExĂ©cutez: Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
  • Tapez: Y
  • RĂ©exĂ©cutez ce script

Pour des options d’installation supplĂ©mentaires, consultez comment installer le CLI bencher.

Maintenant, testons si nous avons installé le CLI bencher.

Exécutez : bencher --version

Vous devriez voir :

$ bencher --version
bencher 0.3.26

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éer un jeton API

Pour utiliser l’API Bencher, vous devrez crĂ©er un jeton API. Allez Ă  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.

Ajouter 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 comme une variable d’environnement.

Sur Linux, Mac et autres systĂšmes de type Unix, lancez : export BENCHER_API_TOKEN=YOUR_TOKEN

Sur Windows, lancez : $env:BENCHER_API_TOKEN = "YOUR_TOKEN"

Si vous exécutez ensuite echo $BENCHER_API_TOKEN ou Write-Output $env:BENCHER_API_TOKEN respectivement.

Vous devriez voir :

$ echo $BENCHER_API_TOKEN
YOUR_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 et slug seront basĂ©s sur votre nom d’utilisateur
  • Les horodatages created et modified 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": [
[
{
"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

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 que bencher 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! 🎉


Continuez: Aperçu du Benchmarking ➡

đŸ€– Ce document a Ă©tĂ© automatiquement gĂ©nĂ©rĂ© par OpenAI GPT-4. Il peut ne pas ĂȘtre prĂ©cis et peut contenir des erreurs. Si vous trouvez des erreurs, veuillez ouvrir une issue sur GitHub.