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

12 投票
3 回答
1782 浏览
提问于 2025-04-17 10:40

我现在的项目有个规定,要求单元测试的代码覆盖率必须达到100%。我们的持续集成服务不允许开发者在没有100%覆盖率的情况下提交代码。

随着项目的发展,运行完整测试套件所需的时间也在增加。虽然开发者通常只会运行与他们正在修改的代码相关的一部分测试,但在提交代码到持续集成之前,他们通常会做一次最终的完整测试,而持续集成服务器本身也会运行完整的测试套件。

单元测试本身是可以并行运行的,因为每个测试都是独立的,彼此之间没有状态影响。它们只返回两种信息:测试通过或失败,以及覆盖了哪些代码行。使用一种类似于“映射/归约”的方法来处理这些测试似乎会非常有效。

有没有什么Python测试框架可以在多个机器上运行测试,并且能在完成后合并结果,同时还能提供代码覆盖率的信息?

3 个回答

1

这可能不是你想要的,但我能想到的最接近的内容是关于Hadoop小组使用JUnit进行测试的。这里有一封邮件。在邮件中提到,可以搜索一下gridunit的相关论文。

在分布式环境下使用Hadoop进行单元测试是个很有趣的事情。如果有相关的框架,那就更好了,不过开发一个框架其实也不是特别难。如果你感兴趣,可以告诉我。

4

我觉得没有哪个框架能完全满足你的需求。

我知道 py.test 有一个叫做 xdist 的插件,它可以添加分布式测试执行器。你可以利用这个插件来搭建你的持续集成(CI)基础设施。

4

我不知道有没有测试框架可以在一组机器上分布式地运行测试,不过nose这个工具支持在同一台机器上并行执行测试,使用的是多进程功能。

至少,这可能是创建一个分布式测试框架的一个不错起点。

撰写回答