当前位置: 首页 > 知识库问答 >
问题:

Jupyter笔记本中函数的单元测试?

赫连琦
2023-03-14
def construct_url(data):
    ...
    return url

def scrape_url(url):
    ... # fetch url, extract data
    return parsed_data

for i in mylist: 
    url = construct_url(i)
    data = scrape_url(url)
    ... # use the data to do analysis

我考虑过的一些方法:

  • 函数移出到实用程序文件中,并在某个标准Python测试库中为该实用程序文件编写测试。可能是最好的选择,尽管这意味着并非所有代码在笔记本中都可见。
  • 使用测试数据在笔记本本身内进行写入断言(给笔记本增加噪声)。
  • 使用专门的Jupyter测试来测试单元格的内容(不要认为这行不通,因为单元格的内容会改变)。

共有1个答案

柯正谊
2023-03-14

Python标准测试工具,如doctest和unittest可以直接在笔记本中使用。

在DocString中具有函数和测试用例的笔记本单元格:

def add(a, b):
    '''
    This is a test:
    >>> add(2, 2)
    5
    '''
    return a + b

运行DocStrings中所有测试用例的笔记本单元格(笔记本中的最后一个):

import doctest
doctest.testmod(verbose=True)
Trying:
    add(2, 2)
Expecting:
    5
**********************************************************************
File "__main__", line 4, in __main__.add
Failed example:
    add(2, 2)
Expected:
    5
Got:
    4
1 items had no tests:
    __main__
**********************************************************************
1 items had failures:
   1 of   1 in __main__.add
1 tests in 2 items.
0 passed and 1 failed.
***Test Failed*** 1 failures.
def add(a, b):
    return a + b
import unittest

class TestNotebook(unittest.TestCase):
    
    def test_add(self):
        self.assertEqual(add(2, 2), 5)
        

unittest.main(argv=[''], verbosity=2, exit=False)
test_add (__main__.TestNotebook) ... FAIL

======================================================================
FAIL: test_add (__main__.TestNotebook)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "<ipython-input-15-4409ad9ffaea>", line 6, in test_add
    self.assertEqual(add(2, 2), 5)
AssertionError: 4 != 5

----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (failures=1)

在调试失败的测试时,在某个时刻停止测试用例的执行并运行调试器通常很有用。为此,在要停止执行的行之前插入以下代码:

import pdb; pdb.set_trace()

例如:

def add(a, b):
    '''
    This is the test:
    >>> add(2, 2)
    5
    '''
    import pdb; pdb.set_trace()
    return a + b

对于本例,下次运行doctest时,执行将在return语句和Python调试器(pdb)启动之前停止。您将直接在笔记本中获得一个pdb提示符,这将允许您检查aB的值、跨行等。

 类似资料:
  • 问题内容: 我正在尝试为Jupyter Notebook内的平台制作教程 在某个时候,我需要在像这样的单元中运行linux命令: 但无法弄清楚如何输入sudo通行证,并且我不想用sudo运行jupyter Notebook,知道如何执行此操作吗? 问题答案: 更新: 我检查了所有方法,所有方法都有效。 1: 请求密码,该密码实际上会隐藏用户的输入,然后在python中运行sudo命令。 2: 上述

  • 问题内容: 我正在研究Jupyter Notebook,并希望通过使用Google GPU使其运行更快。我已经进行了一些研究并找到了解决方案,但是它对我没有用。 解决方案是: “最简单的方法是使用Connect to Local Runtime, 然后选择硬件加速器作为GPU,如Google Colab Free GPU Tutorial中所示 。” 我确实设法将googe colab连接到jup

  • 在Anaconda Navigator中,我切换到在tensorflow上运行应用程序,并安装了jupyter 5.6.0。然后我打开一个蟒蛇3笔记本。然后我导入tensorflow、keras和numpy,没有问题。然后,当我尝试导入matplotlib时,笔记本上显示ImportError:没有名为“matplotlib”的模块。 在激活tensorflow后,我尝试在我的anaconda提示

  • 在wsl(Windows linux子系统)中的conda虚拟环境中运行jupyter笔记本时,复制粘贴url将不起作用。它总是显示“响应时间太长”或“连接超时”。

  • Jupyter笔记本(Python)以漂亮的打印格式返回单元格中最后一个变量的值。 使用打印(df)不会将数据框打印得很好。但这会很好地打印到Jupyter笔记本上: 如何以漂亮的打印格式打印多个变量? 这里只会以漂亮的打印格式打印: 答案如下(摘自:在iPython笔记本中将数据框显示为表)

  • 我正在尝试从git下载Jupyter笔记本。我通过右键单击文件并保存它来下载笔记本。这是一个ipynb文件,但对于它应该包含的内容(114 kb),文件大小对我来说似乎有点大。当我点击Jupyter中的笔记本时,出现以下错误: 无法读取的笔记本:C:\filename。ipynb NotJSONError(“笔记本似乎不是JSON:”\n\n 如何解决此错误,以及如何打开笔记本?