测试内核#
注意
这是从旧的 IPython wiki 直接复制过来的,目前正在开发中。开发指南的这一部分中的许多信息已经过时。
IPython 使用其内核框架创建包装内核非常容易。它需要扩展 Kernel 类并实现一组用于核心功能(如执行、历史记录等)的方法。也可以用您选择的语言编写一个完整的内核,实现所有 zmq 端口的监听器。
这些方法实现的任何内核的关键问题是确保它符合消息规范。kerneltest 命令是一种测试已安装内核是否符合消息规范并验证结果的方法。
内核测试工具#
kerneltest 工具是 IPython.testing 的一部分,并且也被包含在类似于 iptest 的脚本中。它需要两个参数 - 要测试的内核名称和测试脚本文件。测试脚本文件应为 json 格式,如下一节所述。
kerneltest python test_script.json
您还可以向命令传递一个可选的消息规范版本。目前仅支持版本5,但随着新版本的发布,这可以用于针对特定版本的内核进行测试。
kerneltest python test_script.json 5
需要安装待测试的内核,并且用户 IPython 目录中可用的 kernelspec。该工具将实例化内核并通过 ZMQ 发送命令。对于在内核上执行的每个命令,该工具将验证回复以确保其符合消息规范。在某些情况下还会检查输出,但回复总是返回并在控制台上打印出来。这可以用来验证除了满足消息规范外,内核还生成了正确的输出。
测试脚本文件#
测试脚本文件是一个简单的json文件,它指定了要执行的命令和为该命令执行的测试代码。
{
"command":{
"test_code":<code>
}
}
对于消息规范中的一些命令,如kernel_info,无需指定test_code参数。工具会验证是否具备执行该命令所需的所有输入,并在发现缺失参数时向控制台输出错误信息。由于验证功能内置,且仅传递必需参数,因此可以在json文件中添加额外的字段用于测试文档。
{
"command":{
"test_name":"sample test",
"test_description":"sample test to show how the test script file is created",
"test_code":<code>
}
}
一个用于redis内核的测试脚本示例如下所示
{
"execute":{
"test_code":"get a",
"comments":"test basic code execution"
},
"complete":{
"test_code":"get",
"comments":"test getting command auto complete"
},
"kernel_info":{
"comments":"simple kernel info check"
},
"single_payload":{
"test_code":"get a",
"comments":"test one payload"
},
"history_tail":{
"test_code":"get a",
"comments":"test tail history"
},
"history_range":{
"test_code":"get a",
"comments":"test range history"
},
"history_search":{
"test_code":"get a",
"comments":"test search history"
}
}