Récemment, j’ai dû mettre en place un script générique de lancement de tests behat via composer. En fait, la vraie raison de ce script est la possibilité de le lancer sur une CI et de n’afficher une erreur que si elle se produit, en lançant les tests par tag via le paramètre –tags=@maSuite
Sans plus attendre, voici le script exécuté par composer par la commande test:it (en local), ou test:it:ci (sur la ci), et qui s’appelle ainsi:
./tests/AppBundle/behat.sh -t tag1,tag2,tag3,tag4,tag5
ou
./tests/AppBundle/behat.sh -t tag1,tag2,tag3,tag4,tag5 -p ci -f progress -c no-colors
Voici le script, somme toute simple à comprendre:
#!/usr/bin/env bash function showHelp { echo "Help:" echo "-t tags" echo "-p profile (default or ci)" echo "-f format (pretty or progress)" echo "-c colors (colors or no-colors)" echo "-h display this help" } if [[ $# -eq 0 ]]; then echo "No arguments supplied" showHelp exit fi function createErrorFolder { rm -rf ./var/reports && mkdir ./var/reports } function launchBehatTests { IFS=',' read -r -a tagsArray <<< "$tags" total=${#tagsArray[*]} for (( i=0; i<${total}; i++ )) do ./vendor/bin/behat --config app/config/behat.yml --tags='@'${tagsArray[i]} --profile=${profile} --format=${format} --${colors} -vvv result=$? if [[ result -eq 1 ]]; then exit 1 fi done } tags="" profile="default" format="pretty" colors="colors" while getopts t:p:f:c:h opts; do case ${opts} in t ) tags=${OPTARG} ;; p ) profile=${OPTARG} ;; f ) format=${OPTARG} ;; c ) colors=${OPTARG} ;; h ) showHelp exit ;; esac done if [[ tags == "" || profile == "" || format == "" || colors == "" ]]; then echo "All arguments must be provided" showHelp exit 1; fi createErrorFolder launchBehatTests
J’ai configuré behat pour que les captures d’écran des tests qui échouent se trouvent dans var/reports, d’où la création de répertoire.