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 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": [
    [
      {
        "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 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.