在我目前和以前的项目中,都遇到了测试运行时间太长,需要把测试分配到多台机器上并行运行的问题。有一些项目在手工的进行测试分配,而本文将介绍如何自动的进行测试分配,从而减少花在这些琐事上的时间。
最开始的问题是什么
随着项目的不断进行,测试会越来越多,而跑一次测试的时间也越来越长,尤其是如果界面测试多的话,那么测试运行时间很容易比较长。以我目前所在的项目为例,基于浏览器的界面测试(以下称为Functional Test)如果单机跑的话大约要80分钟。这样开发人员提交一次代码需要很长时间才能从CI Server上得到结果,而CI反馈周期过长会很大的降低开发人员对CI的关注度,即使仍然关注也会因为不断的切换上下文而降低工作效率。
初始的解决方案
开始时大家会用各种简单的办法来解决这个问题,比如通过tag或annotation(不同的测试框架有不同的概念)手工的把测试分成几部分,然后增加Build agent的数量,让每个Build agent 只跑一部分测试,理想的结果是每个Build agent的测试时间一样长,这样运行测试的时间在理想情况下就是:总的测试时间 / Build agent的数量
但这样同时也带来了新的问题:当增加测试时,设置或修改哪个测试在哪台机器上跑的工作是很琐碎的,我们需要经常关注每个Build agent当前的运行时间是多少, 新的测试加到哪个上面比较合适。我在工作中就经常听到有人说,现在测试太慢了,我们再加一个Build agent, 然后分点测试过去吧。简单重复劳动做的多了,就说明需要关注一下,看看有没有好的办法来解决。 Continue reading “在集成测试环境中, 根据历史测试结果自动进行测试分配”