我们有一个启用repos和repos中的文件的Databricks平台。因此,我们可以在repos中拥有.py文件,这些文件可以被Databricks笔记本调用。
我们目前正在测试在Databricks集群上运行单元测试的可行性,而不是在我们的Git/CI环境中使用(PySpark)映像。
Databricks中的repo看起来像
| - notebook
| - mycode.py
| - mycode_test.py
这里,mycode.py
包含一个在Spark数据框架上应用转换的函数。文件mycode_test.py
包含一个使用pytest的单元测试构建。(和一些fixture来创建测试数据和处理Spark会话/Spark上下文)。
我们从笔记本运行pytest,而不是从命令行。因此,Databricks笔记本看起来像:
import pytest
retcode = pytest.main(['-k', 'mycode_test',
'-o', 'cache_dir=/dbfs/FileStore/',
'--junitxml', '/dbfs/FileStore/pytestreport.xml',
'-v'
]
)
此代码片段在标准Databricks集群上运行良好(安装了运行时10.4 LTS和pytest),单元测试的结果在单元格下面打印出来。
但是,没有输出存储在缓存目录或junit xml文件的指针中。
问题:
- 我们错过了什么吗?
- 我们是否可以假设它实际上在未知位置生成输出,因为
pytest.main
没有崩溃? - 是否在Databricks内的。fuse-mounts导致这里的问题?
我在pytest.main
命令的初始路径设置过程中似乎犯了一些错误。我现在已经更新了这些路径,它们可以工作了。
同样,这可能只适用于当你在一个Databricks Repo中工作,并启用了repos中的文件时。
import pytest
retcode = pytest.main(['-k', 'mycode_test',
'-o', 'cache_dir=/dbfs/FileStore/',
'--junitxml', '/dbfs/FileStore/pytestreport.xml',
'-v'
]
)