调试 Numba 测试套件

备注

此处描述的功能仅针对并行测试运行器实现(例如,需要 -m 标志)。

Numba 测试套件提供了一些有用的功能,用于调试测试失败或崩溃。

生成 JUnit XML 输出

你可以通过使用 --junit 标志运行测试来生成与 JUnit 兼容的 XML 报告:

$ python -m numba.runtests <args> --junit

这将生成一个包含测试结果的 junit_numba_<timestamp>.xml 文件。

XML 包含一些额外的元数据作为 testcase 属性:

  • pid: 运行每个测试用例的工作进程的ID

  • start_time: 每个测试用例相对于工作进程启动的开始时间

XML 文件示例:

<?xml version='1.0' encoding='utf-8'?>
<testsuites time="20.745398832">
    <testsuite name="numba_testsuite">
        <testcase name="TestUsecases.test_andor" classname="numba.tests.test_usecases"
            time="1.7033392500000002">
            <properties>
                <property name="pid" value="73274" />
                <property name="start_time" value="1.337771667" />
            </properties>
        </testcase>
        <testcase name="TestUsecases.test_blackscholes_cnd" classname="numba.tests.test_usecases"
            time="1.723800292">
            <properties>
                <property name="pid" value="73275" />
                <property name="start_time" value="1.3350285" />
            </properties>
        </testcase>
        ...
    </testsuite>
</testsuites>

调试由崩溃引起的超时

如果测试套件超时,可能表明有一个工作进程崩溃了。在这种情况下,超时错误将会显示:

  • 在超时前未完成的活跃测试

  • 对于每个受影响的进程ID,列出该进程正在运行的测试列表

例如:

TimeoutError: Active tests didn't finish before timeout:
- test_foo [PID 1234]

Tests ran by each affected process:
- [PID 1234]: test_bar test_baz test_foo

这些信息可以帮助重现依赖于测试执行顺序或进程内状态的崩溃。您可以仅重试在崩溃进程中运行的测试。