Python中的分布式单元测试和代码覆盖率
我现在的项目有个规定,要求单元测试的代码覆盖率必须达到100%。我们的持续集成服务不允许开发者在没有100%覆盖率的情况下提交代码。
随着项目的发展,运行完整测试套件所需的时间也在增加。虽然开发者通常只会运行与他们正在修改的代码相关的一部分测试,但在提交代码到持续集成之前,他们通常会做一次最终的完整测试,而持续集成服务器本身也会运行完整的测试套件。
单元测试本身是可以并行运行的,因为每个测试都是独立的,彼此之间没有状态影响。它们只返回两种信息:测试通过或失败,以及覆盖了哪些代码行。使用一种类似于“映射/归约”的方法来处理这些测试似乎会非常有效。
有没有什么Python测试框架可以在多个机器上运行测试,并且能在完成后合并结果,同时还能提供代码覆盖率的信息?
3 个回答
1
这可能不是你想要的,但我能想到的最接近的内容是关于Hadoop小组使用JUnit进行测试的。这里有一封邮件。在邮件中提到,可以搜索一下gridunit
的相关论文。
在分布式环境下使用Hadoop进行单元测试是个很有趣的事情。如果有相关的框架,那就更好了,不过开发一个框架其实也不是特别难。如果你感兴趣,可以告诉我。
4
我觉得没有哪个框架能完全满足你的需求。
我知道 py.test 有一个叫做 xdist 的插件,它可以添加分布式测试执行器。你可以利用这个插件来搭建你的持续集成(CI)基础设施。
4
我不知道有没有测试框架可以在一组机器上分布式地运行测试,不过nose这个工具支持在同一台机器上并行执行测试,使用的是多进程功能。
至少,这可能是创建一个分布式测试框架的一个不错起点。