web-dev-qa-db-fra.com

Comment demander à Bazel de relancer un test mis en cache?

J'essaie d'analyser et de corriger un test feuilleté qui est souvent vert.
Mon problème est qu'une fois le test réussi, Bazel ne le relance pas tant qu'aucune des entrées n'a changé.
.

Existe-t-il un moyen de demander à Bazel d'exécuter le test même s'il a réussi?
J'aimerais quelque chose comme bazel test --force-attempts=50 //my-package:my-target

16
Ittai

En plus de --cache_test_results, Bazel a en fait un indicateur spécialement conçu pour diagnostiquer les tests feuilletés: --runs_per_test , qui relancera un test N fois et ne gardera que les journaux des échecs:

$ bazel test --runs_per_test=10 :flaker
INFO: Found 1 test target...
FAIL: //:flaker (run 10 of 10) (see /output/testlogs/flaker/test_run_10_of_10.log).
FAIL: //:flaker (run 4 of 10) (see /output/testlogs/flaker/test_run_4_of_10.log).
FAIL: //:flaker (run 5 of 10) (see /output/testlogs/flaker/test_run_5_of_10.log).
FAIL: //:flaker (run 9 of 10) (see /output/testlogs/flaker/test_run_9_of_10.log).
FAIL: //:flaker (run 3 of 10) (see /output/testlogs/flaker/test_run_3_of_10.log).
Target //:flaker up-to-date:
  bazel-bin/flaker
INFO: Elapsed time: 0.828s, Critical Path: 0.42s
//:flaker                                                                FAILED

Executed 1 out of 1 tests: 1 fails locally.

Vous pouvez l'utiliser pour déterminer rapidement la fragilité d'un test et obtenir des journaux défaillants.

10
kristina

Apparemment, il y a un drapeau pour ça :)

https://docs.bazel.build/versions/master/user-manual.html#flag--cache_test_results

--cache_test_results = (oui | non | auto) (-t)

Si cette option est définie sur "auto" (par défaut), Bazel ne réexécutera un test que si l'une des conditions suivantes s'applique:

Bazel détecte les changements dans le test ou ses dépendances, le test est marqué car plusieurs tests externes ont été demandés avec --runs_per_test, le test a échoué. Si "non", tous les tests seront exécutés sans condition.

Si "oui", le comportement de mise en cache sera le même que auto, sauf qu'il peut mettre en cache les échecs de test et les exécutions de test avec --runs_per_test.

Notez que les résultats des tests sont toujours enregistrés dans l'arborescence de sortie de Bazel, que cette option soit activée ou non, de sorte que vous n'avez pas besoin d'avoir utilisé --cache_test_results lors des exécutions précédentes du test de Bazel afin d'obtenir des accès au cache. L'option affecte uniquement si Bazel utilisera les résultats précédemment enregistrés, pas s'il enregistrera les résultats de l'exécution en cours.

Les utilisateurs qui ont activé cette option par défaut dans leur fichier .bazelrc peuvent trouver les abréviations -t (on) ou -t- (off) pratiques pour remplacer la valeur par défaut lors d'une exécution particulière.

20
Ittai