Python中的分布式单元测试和代码覆盖率

12

我的当前项目要求其单元测试覆盖率达到100%。我们的持续集成服务不允许开发人员在没有达到100%覆盖率的情况下推送代码。

随着项目的发展,运行整个测试套件所需的时间也随之增长。虽然开发人员通常只运行与他们修改的代码相关的子集测试,但他们通常会在提交到CI之前进行最后一次完整运行,而CI服务器本身也会运行整个测试套件。

由于单元测试天生就非常易于并行化,因为它们是自包含和无状态的。它们仅返回两个信息:通过/失败和覆盖的代码行数。因此,采用Map/Reduce解决方案似乎会非常有效。

是否有Python测试框架可以在机群上运行具有代码覆盖率,并在完成后合并结果的测试呢?


你找到了任何能够做到你想要的事情的东西吗? - Ian Goodfellow
很遗憾,我们还没有。我们通过优化单元测试本身并削减大量不必要的工作来获得了更多时间。我们还向CI集群添加了机器,以便可以并行构建(和测试),但我们仍然每次运行所有测试。希望在某个时候,我们能够将一些开发工作集中在这个问题上。 - Joe Shaw
https://pypi.org/project/pytest-xdist/ - Mauricio Scheffer
3个回答

4

我不知道有哪些测试框架可以在一组机器上分布式运行测试,但是nose支持使用multiprocessing在同一台机器上并行运行测试。

至少这可能是创建分布式测试框架的好起点。


4

我认为没有一个框架完全符合你的需求。

我知道py.test有xdist插件,可以添加分布式测试执行器。你可以在其基础上构建你的CI基础设施。


链接已失效。 - Mateusz Piotrowski
https://pypi.org/project/pytest-xdist/ - Mauricio Scheffer

1

虽然不完全符合您的要求,但我能想到最接近的是Hadoop组使用JUnit进行Hadoop测试。这里是mail。如邮件中所述,请搜索gridunit论文。

以分布式方式进行Hadoop单元测试非常有趣。任何围绕此的框架都将非常有用,但开发框架不应该很困难。如果感兴趣,请告诉我。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接