跳转到主要内容

JupyterLab的单元格测试

项目描述

jupyterlab_celltests

JupyterLab生产笔记本的单元格测试

Build Status Coverage Docs PyPI PyPI npm

概述

Celltests是为编写线性执行笔记本的测试而设计的。其主要用途是用于单元测试报告。

"线性执行笔记本是什么意思?"

当将笔记本转换为html/pdf/email报告时,它们一次从上到下执行,并预期包含尽可能少的代码,主要关注绘图和markdown部分。这类库包括PapermillJupyterLab 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.tar.gz (2.9 MB 查看哈希值)

上传时间

构建分布

jupyterlab_celltests-0.1.3-py2.py3-none-any.whl (39.2 kB 查看哈希值)

上传于 Python 2 Python 3

支持者

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面