调试 Numba 测试套件
备注
此处描述的功能仅针对并行测试运行器实现(例如,需要 -m
标志)。
Numba 测试套件提供了一些有用的功能,用于调试测试失败或崩溃。
生成 JUnit XML 输出
你可以通过使用 --junit
标志运行测试来生成与 JUnit 兼容的 XML 报告:
$ python -m numba.runtests <args> --junit
这将生成一个包含测试结果的 junit_numba_<timestamp>.xml
文件。
XML 包含一些额外的元数据作为 testcase
属性:
pid
: 运行每个测试用例的工作进程的IDstart_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
这些信息可以帮助重现依赖于测试执行顺序或进程内状态的崩溃。您可以仅重试在崩溃进程中运行的测试。