JupyterLab的Cellbycell测试

nbcelltests的Python项目详细描述


Jupyter实验室生产的Jupyter笔记本电脑的逐单元测试

Build StatusCoverageDocsPyPIPyPInpm

概述

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

安装

Python包安装:pip install nbcelltests

要在JupyterLab中使用,还需要lab和服务器扩展。通常,这些是 自动安装在nbcelltests旁边,所以您不需要做任何特殊的事情 使用它们。实验室扩展将需要重新构建JupyterLab,系统会提示您 安装celltests后第一次启动JupyterLab时要执行的操作(也可以手动执行) 使用jupyter lab build)。请注意,您必须节点.js已安装(对于任何实验室扩展)。在

要查看您有哪些扩展,请检查jupyter labextension list(查找 jupyterlab_celltests)和jupyter serverextension list(查找nbcelltests)。 如果出于某种原因需要手动安装扩展,可以按如下方式进行:

jupyter labextension install jupyterlab_celltests
jupyter serverextension enable --py nbcelltests

(注意:如果在环境中使用,您可能希望将--sys-prefix添加到serverextension命令中。)

“线性执行笔记本?”在

当把笔记本电脑转换成html/pdf/email报告时,它们会被一次从上到下执行,并且被期望包含尽可能少的代码,主要集中在绘图和降价位上。这种类型的库包括PapermillJupyterLab Emails,等等

这不是已经存在了吗?在

Nbval是一个很好的产品(我们在这个项目中利用它),我建议在笔记本回归测试中使用它。但它只允许测试意外失败或简单的输出相等测试。在

为什么我还要这个?在

如果数据源出现故障,这并不一定对您有帮助,但您很可能会注意到这一点。有用的地方是:

  • 当系统中的环境(例如软件包版本)发生变化时
  • 当你在笔记本上玩的时候(例如非线性执行),但不确定你的报告是否还能生成
  • 当您的软件生命周期系统在处理笔记本电脑时遇到困难(除非集成nbdime/nbconvert到脚本,难以测试,难以确保今天有效的东西明天能正常工作,否则无法将其作为代码进行lint/audit)

那么这有什么用呢?在

给定一个笔记本,您可以为单个单元格编写模拟和断言。然后,您可以为这个笔记本生成一个测试脚本,允许您将它挂接到您的测试系统中,从而为您的报告提供单元测试。在

编写测试

当您为一个单元编写测试时,我们在一个unittest类上创建一个新方法,该方法对应于您的单元格的索引,并包括所有以前单元格的累积测试(以模拟到目前为止在笔记本的线性执行中发生的情况)。您可以编写任何您喜欢的模拟和断言,并且可以调用%cell将单元格的内容注入到测试中。 ^{1}$ 测试本身存储在单元元数据中,类似于celltag、幻灯片信息等

运行测试

您可以从.ipynb文件脱机运行测试,也可以从浏览器执行这些测试并查看pytest-html的html插件的结果。

额外测试

  • 每个单元的最大行数
  • 每个笔记本的最大单元格数
  • 每个笔记本的最大函数定义数
  • 每个笔记本的最大类定义数
  • 测试细胞百分比

示例

在提交的examples/Example.ipynb笔记本中,但进行了修改,使单元格0的import语句被复制了10次(以触发测试和lint失败):

测试

通过运行nbcelltests test examples/Example.ipynb生成以下输出

^{pr2}$

皮棉

通过运行nbcelltests lint examples/Example.ipynb生成以下输出

PASSED: Checking lines in cell (max=10;actual=2)(Cell 1)
PASSED: Checking lines in cell (max=10;actual=1)(Cell 2)
PASSED: Checking lines in cell (max=10;actual=1)(Cell 3)
PASSED: Checking lines in cell (max=10;actual=1)(Cell 4)
PASSED: Checking cells per notebook (max=10;actual=4)
PASSED: Checking functions per notebook (max=10;actual=0)
PASSED: Checking classes per notebook (max=10;actual=0)
FAILED: Checking lint:
	examples/Example.ipynb (in /var/folders/s3/1mjw0y192zg3450tkkn1yfnm0000gn/T/tmpp91li59p.py):32:1: F821 undefined name 'test3'
	examples/Example.ipynb (in /var/folders/s3/1mjw0y192zg3450tkkn1yfnm0000gn/T/tmpp91li59p.py):32:6: W291 trailing whitespace

注意:在jupyterlab,笔记本电脑将使用g版本 运行jupyter实验室的python。一本打算成为 因此,使用Python2内核运行可能会产生语法错误 在检查皮棉时。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
用于批量操作的java RESTful API分块响应   java读取在线存储的文本文件   在Java ME中将双精度舍入到小数点后5位   java查找一个数字的最接近因子   java更改JMenuBar的字体   java Kmeans聚类算法运行时间和复杂性   java是否可以阻止try catch返回null   java内容解析器指向具有正确URI的错误表   java Android Kotlin插装测试未被识别为插装测试   java TestNG@Dataprovider   在forloop和print语句中声明变量时发生java错误   java在Android Studio 3中设置JNI