测试内核#

注意

这完全复制自旧的 IPython wiki,目前正在开发中。本开发指南的许多信息已过时。

IPython 通过其内核框架可以非常容易地创建包装器内核。它需要扩展 Kernel 类并实现一组用于核心功能(如执行、历史记录等)的方法。也可以用您选择的语言编写一个功能齐全的内核,实现所有 zmq 端口的监听器。

通过这些方法实现的任何内核的关键问题是确保它符合消息规范。kerneltest 命令是一种测试已安装内核是否符合消息规范并验证结果的方法。

kerneltest 工具#

kerneltest 工具是 IPython.testing 的一部分,也包含在类似于 iptest 的脚本中。它需要 2 个参数 - 要测试的内核名称和测试脚本文件。测试脚本文件应采用下一节中描述的 json 格式。

kerneltest python test_script.json

您还可以向命令传递一个可选的消息规范版本。目前只支持版本 5,但随着新版本的发布,这可以用于根据特定版本的内核测试内核。

kerneltest python test_script.json 5

要测试的内核需要安装并且 kernelspec 在用户 IPython 目录中可用。该工具将实例化内核并通过 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"
  }
}