为什么bamboo junit解析器呈现“未命名测试套件”

inkz8wg9  于 2023-01-30  发布在  其他
关注(0)|答案(1)|浏览(163)

我看到几个测试用例出现在一个竹JUnitParser步骤中,没有为测试用例呈现测试套件名称。

ctrmrzij

ctrmrzij1#

通过模拟测试结果,我们可以看到bamboo至少有两种形式的测试套件命名检测。

显式命名的测试套件

最明智的解析操作发生在显式命名的测试套件下,在xml中这由testsuite标签中的name属性表示。

<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
  <testsuite name="test_dummy_suite_name" tests="1" failures="0" errors="0">
    <testcase name="test_dummy_case_name" status="run" duration="0.001" time="1"></testcase>
  </testsuite>
</testsuites>

在这种情况下,bamboo正确地解析了测试套件的名称,如下所示:

Pytest生成的xml

当Pytest通过--junit-xml= xml_path. xml参数生成junit xml时,它有一个约定,即在保留其junit_suite_name的默认值时,用通用的pytest字符串注入测试套件名称。

<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
    <testsuite errors="0" failures="1" hostname="XXX" name="pytest" skipped="0" tests="3" time="0.038" timestamp="2022-03-03T17:51:33.038037">
        <testcase classname="classnameX.classnameY" file="junit_explore/test_module.py" line="3" name="test_passing1" time="0.001"></testcase>
        <testcase classname="junit_explore.test_module" file="junit_explore/test_module.py" line="6" name="test_passing2" time="0.000"></testcase>
        <testcase classname="" file="junit_explore/test_module.py" line="6" name="test_passing_empty_classname" time="0.000"></testcase>
    </testsuite>
</testsuites>

Bamboo看起来很熟悉这个约定,实际上它会退而求其次,解析测试用例的classname属性,对.字符进行标记化,以提取后面的子字符串。

我们可以看到,对于classname属性为空的测试用例,Bamboo可以稳健地处理这种情况,但最终无法确定测试套件名称,并福尔斯到unnamed test suite表示,因为这是它为此类测试用例所拥有的所有上下文。

  • 背景故事 *:事实证明,从bazel执行中运行pytest junit生成会以某种方式剥离或干扰类名的生成。我现在还不完全清楚为什么会出现这种情况。pytest在下面的源代码www.example.com中生成了这个属性的值https://github.com/pytest-dev/pytest/blob/55debfad1f690d11da3b33022d55c49060460e44/src/_pytest/junitxml.py#L126。我可能能够跟踪整个代码库,看看是否可以在那里确定任何东西。

背景故事更新3/21/2022我深入研究了bazel行为并编写了一个nodes.py的工具化构建版本,发现会话根目录无法通过他们的相对路径逻辑session.config.rootdir实现来建立。

相关问题