针对长时间运行函数的Python单元测试
我有一个长期运行的python方法,这个函数将进入文件夹,读取所有文档并提取文本。输出的数量不会是一个常数,因为它可以改变。这个过程可能需要几个小时到几天。如何为这样一个函数编写单元测试,如何根据输出数量的变化来检查其通过或失败,这需要很多小时,这种问题可以通过使用测试资源来解决。当您需要在文件数据上测试函数时,这是一个典型的问题 在针对长时间运行函数的Python单元测试,python,unit-testing,Python,Unit Testing,我有一个长期运行的python方法,这个函数将进入文件夹,读取所有文档并提取文本。输出的数量不会是一个常数,因为它可以改变。这个过程可能需要几个小时到几天。如何为这样一个函数编写单元测试,如何根据输出数量的变化来检查其通过或失败,这需要很多小时,这种问题可以通过使用测试资源来解决。当您需要在文件数据上测试函数时,这是一个典型的问题 在tests目录中(您有一个,不是吗?),您可以创建resources包 你只需要把你的测试数据放在这里。当然,选择一个最小的树结构:测试所需的唯一必要的文件和目录
tests
目录中(您有一个,不是吗?),您可以创建resources
包
你只需要把你的测试数据放在这里。当然,选择一个最小的树结构:测试所需的唯一必要的文件和目录
要访问resources
目录,我建议使用resources\u DIR
变量定义如下:
在\uuuu init\uuuu.py
文件中,您可以编写:
导入操作系统
RESOURCES\u DIR=os.path.dirname(\u文件\u)
您可以在单元测试中轻松导入此变量,并使用它访问测试文件
下面是一个更详细的示例:
tests
+-- resources
| +-- __init__.py
| \-- test_func1
| +-- scenario1
| | +-- <data for scenario1>
| \-- scenario2
| \-- <data for scenario2>
|
+-- test_func1.py
通过不对实际数据运行测试,unittest是关于确定性输入和输出的。在它的执行过程中,一个大目录可能需要几个小时,但您可以控制它的输入,以便它能够覆盖可能的情况并仍然快速运行。将进程拆分为函数,单独测试它们并模拟输入。在一小块示例数据上测试它。在运行消耗大量时间的海量数据之前,请以系统化的方式运行代码。