JupyterLab的单元格测试
项目描述
jupyterlab_celltests
JupyterLab生产笔记本的单元格测试
概述
Celltests
是为编写线性执行笔记本的测试而设计的。其主要用途是用于单元测试报告。
"线性执行笔记本是什么意思?"
当将笔记本转换为html/pdf/email报告时,它们一次从上到下执行,并预期包含尽可能少的代码,主要关注绘图和markdown部分。这类库包括Papermill、JupyterLab Emails等。
这已经存在了吗?
Nbval是一个很好的产品,我建议您使用它进行笔记本回归测试。但它只允许测试意外的失败或简单的输出相等性测试。
那么,为什么我还要这个?
即使数据源出现问题,这也可能无法直接帮助您,但您可能仍然会注意到这一点。它的用途在于
- 当您的系统(例如包版本)正在发生变化时
- 当您在笔记本中玩耍时(例如非线性执行),但不确定您的报告是否仍然可以生成
- 当您的软件生命周期系统在处理笔记本时遇到困难(除非集成nbdime/nbconvert到脚本中,否则无法作为代码进行lint/audit,难以测试,难以确保今天的功能明天仍然可用)
那么这究竟有什么作用呢?
给定一个笔记本,您可以针对单个单元格编写模拟和断言。然后您可以为此笔记本生成一个测试脚本,允许您将其集成到测试系统中,从而提供报告的单元测试。
编写测试
当您为单元格编写测试时,我们会在与单元格索引相对应的unittest
类上创建一个新的方法,包括所有之前单元格的累积测试(以模拟笔记本线性执行中到目前为止发生的情况)。您可以编写任何喜欢的模拟和断言,并可以调用%cell
将单元格的内容注入到测试中。 测试本身存储在单元格元数据中,类似于celltags、幻灯片信息等。
运行测试
您可以从.ipynb
文件中离线运行测试,或者您可以从浏览器中执行它们,并查看pytest-html
的html插件的测试结果。
额外测试
- 每个单元格的最大行数
- 每个笔记本的最大单元格数
- 每个笔记本的最大函数定义数
- 每个笔记本的最大类定义数
- 测试单元格的百分比
示例
在提交的Untitled.ipynb
笔记本中,但进行了修改,使得单元格0的导入语句被复制了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%]
lint
Checking lines in cell 0: FAILED
Checking lines in cell 1: PASSED
Checking lines in cell 2: PASSED
Checking lines in cell 3: PASSED
Checking cells per notebook <= 10: PASSED
Checking functions per notebook <= 10: PASSED
Checking classes per notebook <= 10: PASSED
Checking cell test coverage >= 50: PASSED
注意:在jupyterlab中,笔记本将使用运行jupyter lab自身的python版本进行lint检查。因此,一个旨在与Python 2内核一起运行的笔记本在lint检查时可能会生成语法错误。
项目详情
下载文件
下载适用于您的平台文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
构建分布
哈希 对于 jupyterlab_celltests-0.1.3-py2.py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c3c409f7b66d4d2fb5e74f0633e05eecb76dca2773b3f2a8efe820bf0802e3da |
|
MD5 | 22d3d945422db021768ff65da0d9b047 |
|
BLAKE2b-256 | ae25c9f728a816320339313c439486d0470470087b2be9960fdaf94f3f0dd3c1 |