测试内核#

注意

这是从旧 IPython wiki 中逐字复制的内容,目前正在开发中。本开发指南中此部分的大部分信息已过时。

IPython 使用其内核框架可以非常轻松地创建包装内核。它需要扩展 Kernel 类并为 execute、history 等核心函数实现一组方法。还可以用你选择的语言编写一个完整内核,为所有 zmq 端口实现侦听器。

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

kerneltest 工具#

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

kerneltest python test_script.json

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

kerneltest python test_script.json 5

要测试的内核需要安装,并且内核规范在用户 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"
  }
}