J'ai abandonné Postman pour adopter Bruno
Avec la hype en ce moment autour de ce nouveau client API, j’ai testé Bruno, et je dois dire que je suis conquis. Voici pourquoi j’ai abandonné Postman pour adopter Bruno.
Reprise en main des données
Le premier point hyper important, c’est la reprise en main de mes données. Avec Postman, les données sont stockées dans le cloud et il est difficile de les partager sans payer. Bruno, en revanche, stocke les données sous forme de fichiers directement dans notre projet. Cela signifie que toutes les collections et requêtes API sont versionnées avec Git et incluses dans le processus de développement. Plus besoin de jongler avec des exports/imports compliqués ou de s’inquiéter de la sécurité des données dans le cloud.
Intégration fluide avec CI/CD
Le deuxième point fort de Bruno est sa CLI. Cette interface en ligne de commande permet d’exécuter des tests API facilement et de les intégrer directement dans le pipeline CI/CD. Grâce à cela, les tests API peuvent être automatisés et exécutés à chaque build ou déploiement, assurant ainsi que l’API fonctionne toujours comme prévu. C’est un véritable gain de temps et une garantie supplémentaire de qualité pour nos projets.
Facilité de prise en main
Les interfaces de Bruno et Postman sont très proches, ce qui rend la transition extrêmement facile. On s’y retrouve rapidement et on peut immédiatement commencer à travailler.
En termes de fonctionnalités, on peut tout ou quasiment tout faire avec Bruno. Jusqu’à présent, je n’ai jamais été coincé.
En pratique
La migration n’a pas été compliquée, mais l’import n’a pas été possible à cause des noms des requêtes qui étaient les mêmes dans Postman (ce qui n’est pas possible dans Bruno vu que le nom des requêtes est aussi le nom des fichiers). J’ai finalement décidé de tout recréer à la main, ce qui m’a permis de revoir mes collections et de les organiser de manière plus logique. Ce fut un peu fastidieux, mais cela a permis de refaire une passe et de repartir sur de bonnes bases.
J’en ai profité dans la foulée pour créer des tests et des asserts pour la majorité des requêtes. J’ai aussi joué avec les variables “Pre Request” et “Post Response” pour automatiser au maximum les tests. Au final, j’ai créé 120 assertions et écris 11 tests pour 37 requêtes. Et le meilleur dans tout ça, c’est que je peux choisir quels dossiers de requêtes tester sur la prod et/ou la preprod.
Voici ce que donne mon fichier de configuration pour la CI/CD :
name: API
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
api-test:
name: 'Test'
runs-on: ubuntu-latest
defaults:
run:
working-directory: docs/bruno
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: yarn
- name: Install dependencies
run: yarn install --frozen-lockfile
- name: Create .env file
run: |
echo "ACCESS_KEY=${{ secrets.ACCESS_KEY }}" > .env
echo "SECRET_KEY=${{ secrets.SECRET_KEY }}" >> .env
echo "ADMIN_ACCESS_KEY=${{ secrets.ADMIN_ACCESS_KEY }}" >> .env
echo "ADMIN_SECRET_KEY=${{ secrets.ADMIN_SECRET_KEY }}" >> .env
- name: Test API for preprod
run: npx bru run Sitting -r --env=preprod
- name: Test API for prod
run: |
npx bru run Sitting/Address --env=prod
npx bru run Sitting/Bottle --env=prod
npx bru run Sitting/Invoice --env=prod
npx bru run Sitting/Putaway --env=prod
npx bru run "Sitting/Statistics (Admin Only)" --env=prod
npx bru run Sitting/Transaction --env=prod
npx bru run Sitting/User --env=prod
npx bru run "Sitting/Wine Comment" --env=prod
npx bru run "Sitting/Wine Price" --env=prod
Enfin, je rencontre quelques bugs, notamment un gênant en ce moment qui ne me permet pas d’accéder aux menus déroulants. Impossible donc de choisir un environnement ou une variable, ce qui est un peu embêtant. Je persévère et clique un peu partout et parfois ça finit par fonctionner, mais c’est un peu frustrant. Bizarrement lorsque j’ai testé la première fois et ensuite tout mis en place, je n’ai pas rencontré ce problème…
J’attends les prochaines mises à jour avec impatience pour voir si ces problèmes seront corrigés et découvrir les nouvelles fonctionnalités.