После нескольких экспериментов с Bazel я пришел к выводу, что нет простого способа расширить py_test
, чтобы добавить к нему выходные данные.Также было бы довольно сложно создать собственное правило с нуля.
Однако оказывается, что все тесты в Bazel определяют некоторые переменные окружения, которые могут использоваться.На самом деле, был задан другой, аналогичный вопрос, который решил эту проблему, используя их: bazel - доступный для записи архивируемый путь для выполнения теста
В моих тестах я запускаю pytest изнутри Python, поэтомуЛегко программно расширить аргументы запуска:
def _get_log_file_args():
# Prepare the path to the log file, based on environmental
# variables defined by Bazel.
#
# As per docs, tests should not rely on these variables
# defined, so the framework will omit logging to file
# if necessary variables are undefined.
# See: https://docs.bazel.build/versions/master/test-encyclopedia.html#initial-conditions
LOG_DIR_ENV_VARIABLE = "TEST_UNDECLARED_OUTPUTS_DIR"
log_dir = os.environ.get(LOG_DIR_ENV_VARIABLE)
if log_dir:
file_log_path = os.path.join(log_dir, "test_output.log")
return [f"--log-file={file_log_path}"]
logger.warning(f"Environment variable '{LOG_DIR_ENV_VARIABLE}' used as the logging directory is not set. "
"Logging to file will be disabled.")
return [] # no file logging
Затем нужно обработать окончательный ZIP-архив на ./bazel-out/darwin-fastbuild/testlogs/<package-name>/<target-name>/test.outputs/outputs.zip
(согласно связанному вопросу).