[英]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.