Как пройти тестовые аргументы в Skylark Bazel?

Я пишу несколько тестов bazel, где мне нужно указать полный путь к какому-либо файлу.

bazel test //webservice:checkstyle-test --test_arg="path_to_some_file"

Мой вопрос в том, как вы можете проанализировать входные аргументы в своем тесте bazel? Есть что-нибудь вроде ctx.arg?

СТРОИТЬ

      load("//:checkstyle.bzl", "checkstyle_test")

checkstyle_test(
   name = ""
   src = []
   config = ""
)

checkstyle.bzl

      def _checkstyle_test_impl(ctx):
    // How can I get my input parameter here? 

checkstyle_test = rule(
    implementation = _checkstyle_test_impl,
    test = True,
    attrs = {
        "_classpath": attr.label_list(default=[
            Label("@com_puppycrawl_tools_checkstyle//jar")
        ]),
        "config": attr.label(allow_single_file=True, default = "//config:checkstyle"),
        "suppressions": attr.label(allow_single_file=True, default = "//config:suppressions"),
        "license": attr.label(allow_single_file=True, default = "//config:license"),
        "properties": attr.label(allow_single_file=True),
        "opts": attr.string_list(),
        "string_opts": attr.string_dict(),
        "srcs": attr.label_list(allow_files = True),
        "deps": attr.label_list(),
    },
)

1 ответ

Значение передается исполняемому файлу теста в качестве аргументов программы, когда bazel запускает его во время bazel testсм. https://docs.bazel.build/versions/main/command-line-reference.html#flag--test_arg

Например:

      def _impl(ctx):
  ctx.actions.write(
      output = ctx.outputs.executable,
      content = "echo test args: ; echo $@",
  )

my_test = rule(
  implementation = _impl,
  test = True,
)
      load(":defs.bzl", "my_test")
my_test(name = "foo")
      $ bazel test foo --test_arg=--abc=123 --test_output=streamed
WARNING: Streamed test output requested. All tests will be run locally, without sharding, one at a time
INFO: Analyzed target //:foo (24 packages loaded, 277 targets configured).
INFO: Found 1 test target...
test args:
--abc=123
Target //:foo up-to-date:
  bazel-bin/foo
INFO: Elapsed time: 0.559s, Critical Path: 0.13s
INFO: 5 processes: 3 internal, 2 linux-sandbox.
INFO: Build completed successfully, 5 total actions
//:foo                                                                   PASSED in 0.0s

Executed 1 out of 1 test: 1 test passes.
INFO: Build completed successfully, 5 total actions

Я не думаю, что в настоящее время есть способ получить ценность --test_arg в реализации правила Starlark (не добавлено в ctx.fragments Например).

Другие вопросы по тегам