JupyterLab的Cellbycell测试
jupyterlab-celltests的Python项目详细描述
jupyterlab_细胞测试
Jupyter实验室生产的Jupyter笔记本电脑的逐单元测试
概述
Celltests
是为线性执行的笔记本编写测试而设计的。它主要用于单元测试报告。在
“线性执行笔记本?”
当把笔记本电脑转换成html/pdf/email报告时,它们会被一次从上到下执行,并且被期望包含尽可能少的代码,主要集中在绘图和降价位上。这种类型的库包括Papermill,JupyterLab Emails,等等
这不是已经存在了吗?
Nbval是一个很棒的产品,我建议将其用于笔记本回归测试。但它只允许测试意外失败或简单的输出相等测试。在
为什么我还要这个?
如果数据源出现故障,这并不一定对您有帮助,但您很可能会注意到这一点。有用的地方是:
- 当系统中的环境(例如软件包版本)发生变化时
- 当你在笔记本上玩的时候(例如非线性执行),但不确定你的报告是否还能生成
- 当您的软件生命周期系统在处理笔记本电脑时遇到困难(除非集成nbdime/nbconvert到脚本,难以测试,难以确保今天有效的东西明天能正常工作,否则无法将其作为代码进行lint/audit)
那么这有什么用呢?
给定一个笔记本,您可以为单个单元格编写模拟和断言。然后,您可以为这个笔记本生成一个测试脚本,允许您将它挂接到您的测试系统中,从而为您的报告提供单元测试。在
编写测试
当您为一个单元编写测试时,我们在一个unittest
类上创建一个新方法,该方法对应于您的单元格的索引,并包括所有以前单元格的累积测试(以模拟到目前为止在笔记本的线性执行中发生的情况)。您可以编写任何您喜欢的模拟和断言,并且可以调用%cell
将单元的内容注入到测试中。
测试本身存储在单元元数据中,类似于celltag、幻灯片信息等
运行测试
您可以从.ipynb
文件脱机运行测试,也可以从浏览器执行它们并查看pytest-html
的html插件的结果。
额外测试
- 每个单元的最大行数
- 每个笔记本的最大单元格数
- 每个笔记本的最大函数定义数
- 每个笔记本的最大类定义数
- 测试细胞百分比
示例
在提交的Untitled.ipynb
笔记本中,但经过修改,使单元格0的import语句被复制了10次(以触发测试和lint失败):
测试
Untitled_test.py::TestExtension::test_cell0 PASSED [8%] Untitled_test.py::TestExtension::test_cell1 PASSED [16%] Untitled_test.py::TestExtension::test_cell2 PASSED [25%] Untitled_test.py::TestExtension::test_cell3 PASSED [33%] Untitled_test.py::TestExtension::test_cell_coverage PASSED [41%] Untitled_test.py::TestExtension::test_cells_per_notebook PASSED [50%] Untitled_test.py::TestExtension::test_class_definition_count PASSED [58%] Untitled_test.py::TestExtension::test_function_definition_count PASSED [66%] Untitled_test.py::TestExtension::test_lines_per_cell_0 FAILED [75%] Untitled_test.py::TestExtension::test_lines_per_cell_1 PASSED [83%] Untitled_test.py::TestExtension::test_lines_per_cell_2 PASSED [91%] Untitled_test.py::TestExtension::test_lines_per_cell_3 PASSED [100%]
皮棉
^{pr2}$注意:在jupyterlab中,笔记本将使用 运行jupyter实验室的python。一本打算成为 因此,使用Python2内核运行可能会产生语法错误 在检查皮棉时。在
- 项目
标签: