測試核心#

注意

這完全複製自舊的 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"
  }
}