[英]Testing IPython Notebooks
我開始使用IPython筆記本來記錄我的一些代碼和交互式使用示例。 為了避免文檔從代碼中過時,我希望筆記本中的代碼能夠定期執行以捕獲輸出中的任何更改並標記運行時錯誤。
我使用nosetests
來運行回歸測試,並想知道是否有辦法讓它為此目的執行IPython筆記本。 請注意,我不是試圖從IPython筆記本中運行nosetests
(就像在ipython_nose中一樣 )。 更多關於doctest
插件的內容。 這樣的插件存在嗎?
我最近編寫了一個類似的腳本,其中大部分基於這個關於'測試Jupyter筆記本'的博客
這是博客上稍微修改過的版本:
from glob import glob
import nbformat
from nbconvert.preprocessors import ExecutePreprocessor
from nbconvert.preprocessors.execute import CellExecutionError
def _notebook_run(path):
"""
Execute a notebook via nbconvert and collect output.
:returns (parsed nb object, execution errors)
"""
kernel_name = 'python%d' % sys.version_info[0]
this_file_directory = os.path.dirname(__file__)
errors = []
with open(path) as f:
nb = nbformat.read(f, as_version=4)
nb.metadata.get('kernelspec', {})['name'] = kernel_name
ep = ExecutePreprocessor(kernel_name=kernel_name, timeout=10) #, allow_errors=True
try:
ep.preprocess(nb, {'metadata': {'path': this_file_directory}})
except CellExecutionError as e:
if "SKIP" in e.traceback:
print(str(e.traceback).split("\n")[-2])
else:
raise e
return nb, errors
您現在可以將此功能用作:
def test_notebooks():
for notebook in glob("./*.ipynb"):
nb, errors = _notebook_run(notebook)
assert errors == []
nosebook可能適合您的目的。 我構建它來處理這樣的情況:它不需要筆記本中的特殊標記,並進行@minrk提到的一些清理。
最近Andrea Zonca發表了pytest-ipynb 。 我還沒有測試它,但它似乎符合你的要求(也許不是針對鼻子,但它具有像故障時的細胞指示一樣的簡潔功能)。 我一定會用它來測試學生的作業和材料:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.