【发布时间】:2012-11-07 00:15:06
【问题描述】:
我一直在从事一个相当大的 Python 项目,并进行了许多测试。
应用程序的某些特定部分需要一些 CPU 密集型测试,而我们在提交之前测试所有内容的方法不再有意义。
从那时起,我们就采用了基于标签的选择性测试方法。问题是,随着代码库的增长,维护上述标记方案变得有些麻烦,我想开始研究我们是否可以构建更智能的东西。
在之前的工作中,测试系统只测试受提交更改影响的代码。
似乎Mighty Moose 对CLR 语言采用了类似的方法。以这些为灵感,我的问题是,Python 项目中的智能选择性测试有哪些替代方案(如果有的话)?
如果没有,构建这样的东西有什么好的初始方法?
【问题讨论】:
-
认为您可以区分字节码并设置存根以强制执行已更改的路径?
-
您是否知道选择性测试方法可能导致的问题?一个地方的改变可能会破坏其他地方的代码,所以它可能不是一种可靠的方法。但是,您可以通过调用特定的测试用例或使用例如来测试项目的某些部分。
skipIf装饰器(如在unittest模块中)。这是一个关于测试结构的问题,而不是关于执行会受到特定更改影响的测试用例的神奇工具。另一方面,分析每个测试用例的覆盖率可以帮助确定哪些部分由特定测试用例执行(并使用它)。 -
在提交上使用 git pre-hook 然后获取已更改的文件将允许他们仅针对提交时已更改的文件运行 python 测试套件。这需要非常严格的文件/类命名架构,如果有人不遵循该架构,则会破坏针对更改代码的特定测试。
-
这是关于我会考虑一个测试服务器、一些并行运行测试的能力、一个夜间构建/测试计划或这些的组合。如果测试发生在预期会发生此类事情的分支上,那么一夜之间失败的测试是可以的。