测试的目的是找出何时出现问题。不可避免地,对系统所做的更改会导致其中一个测试失败,当这种情况发生时,需要调试测试。
首先,始终建议在调试模式下运行。这可以通过使用命令make debug
编译系统来完成。其次,建议仅运行导致问题的测试。这可以通过将导致问题的测试文件名作为命令行参数传递给测试套件来完成(例如,build/debug/test/unittest test/sql/projection/test_simple_projection.test
)。有关运行测试子集的更多选项,请参阅触发要运行的测试部分。
之后,可以将调试器附加到程序上并对测试进行调试。在sqllogictests中,通常很难在特定查询上中断,然而,我们已经扩展了测试套件,以便为每个运行的查询调用一个名为query_break
的函数,并将行号line
作为参数传递。这允许您在特定查询上设置条件断点。例如,如果我们想在测试文件的第43行中断,我们可以创建以下断点:
gdb: break query_break if line==43
lldb: break s -n query_break -c line==43
你也可以通过在文件中放置mode skip
来跳过某些查询的执行,后面可以跟一个可选的mode unskip
。这两个语句之间的任何查询都不会被执行。
触发运行哪些测试
运行unittest程序时,默认情况下会运行所有快速测试。可以通过添加测试名称作为参数来运行特定测试。对于sqllogictests,这是测试文件的相对路径。 要仅运行单个测试:
build/debug/test/unittest test/sql/projection/test_simple_projection.test
可以通过将目录作为带方括号的参数来执行给定目录中的所有测试。 要运行“projection”目录中的所有测试:
build/debug/test/unittest "[projection]"
所有测试,包括慢速测试,都可以通过使用星号运行测试来执行。 要运行所有测试,包括慢速测试:
build/debug/test/unittest "*"
我们可以使用--start-offset
和--end-offset
参数来运行测试的一个子集。
要运行测试200到250:
build/debug/test/unittest --start-offset=200 --end-offset=250
这些也可以以百分比形式提供。要运行测试的10% - 20%:
build/debug/test/unittest --start-offset-percentage=10 --end-offset-percentage=20
要运行的测试集也可以从包含每行一个测试名称的文件中加载,并使用-f
命令加载。
cat test.list
test/sql/join/full_outer/test_full_outer_join_issue_4252.test
test/sql/join/full_outer/full_outer_join_cache.test
test/sql/join/full_outer/test_full_outer_join.test
仅运行文件中标记的测试:
build/debug/test/unittest -f test.list