测试 Databricks 笔记本

本页简要介绍了一些在直接在 Databricks 笔记本中测试代码时有用的技术。 可以单独使用这些方法,或将它们一起使用。

有关如何在 Databricks 笔记本中设置和组织函数和单元测试的详细演练,请参阅笔记本单元测试

许多单元测试库直接在笔记本中工作。 例如,可使用内置的 Python unittest 包测试笔记本代码。

def reverse(s):
    return s[::-1]

import unittest

class TestHelpers(unittest.TestCase):
    def test_reverse(self):
        self.assertEqual(reverse('abc'), 'cba')

r = unittest.main(argv=[''], verbosity=2, exit=False)
assert r.result.wasSuccessful(), 'Test failed; see logs above'

测试失败将显示在单元格的输出区域中。

单元测试失败

使用 Databricks 小组件选择笔记本模式

可使用小组件在单个笔记本中将测试调用与正常调用区分开来。 以下代码可生成屏幕截图中显示的示例:

dbutils.widgets.dropdown("Mode", "Test", ["Test", "Normal"])

def reverse(s):
  return s[::-1]

if dbutils.widgets.get('Mode') == 'Test':
  assert reverse('abc') == 'cba'
  print('Tests passed')
else:
  print(reverse('desrever'))

第一行会生成“模式”下拉菜单:

小组件自定义执行

隐藏测试代码和结果

若要隐藏测试代码和结果,请从单元格操作菜单中选择“隐藏代码”或“隐藏结果”。 即使隐藏了结果,也会显示错误。

安排测试自动运行

要定期和自动运行测试,可使用计划的笔记本。 可将作业配置为将通知电子邮件发送到指定的电子邮件地址。

计划笔记本测试

将测试代码与笔记本分开

可以使用 %run 或 Databricks Git 文件夹将测试代码与笔记本分开。 使用 %run 时,测试代码包含在你从另一个笔记本调用的单独笔记本中。 使用 Databricks Git 文件夹时,可以将测试代码保留在非笔记本源代码文件中

本部分演示了如何使用 %run 和 Databricks Git 文件夹将测试代码与笔记本分开的一些示例。

使用 %run

下面的屏幕截图显示了如何使用 %run 从另一个笔记本运行某个笔记本。 若要详细了解如何使用 %run,请参阅使用 %run 导入笔记本。 用于生成示例的代码显示在屏幕截图的下方。

分离测试代码

下面是此示例中使用的代码。 此代码假定笔记本 shared-code-notebook 和 shared-code-notebook-test 位于同一工作区文件夹中。

shared-code-notebook:

def reverse(s):
  return s[::-1]

shared-code-notebook-test:

在一个单元格中:

%run ./shared-code-notebook

在随后的单元格中:

import unittest

class TestHelpers(unittest.TestCase):
    def test_reverse(self):
        self.assertEqual(reverse('abc'), 'cba')

r = unittest.main(argv=[''], verbosity=2, exit=False)
assert r.result.wasSuccessful(), 'Test failed; see logs above'

使用 Databricks Git 文件夹

对于存储在 Databricks Git 文件夹中的代码,可以直接从笔记本调用测试并运行它。

笔记本测试调用

还可使用 Web 终端像在本地计算机上一样在源代码文件中运行测试。

Git 文件夹测试调用

设置 CI/CD 样式工作流

对于 Databricks Git 文件夹中的笔记本,可以通过将笔记本测试为在每个提交时运行来设置 CI/CD 样式工作流。 请参阅 Databricks GitHub Actions