在集成测试环境中, 根据历史测试结果自动进行测试分配

在我目前和以前的项目中,都遇到了测试运行时间太长,需要把测试分配到多台机器上并行运行的问题。有一些项目在手工的进行测试分配,而本文将介绍如何自动的进行测试分配,从而减少花在这些琐事上的时间。

最开始的问题是什么

随着项目的不断进行,测试会越来越多,而跑一次测试的时间也越来越长,尤其是如果界面测试多的话,那么测试运行时间很容易比较长。以我目前所在的项目为例,基于浏览器的界面测试(以下称为Functional Test)如果单机跑的话大约要80分钟。这样开发人员提交一次代码需要很长时间才能从CI Server上得到结果,而CI反馈周期过长会很大的降低开发人员对CI的关注度,即使仍然关注也会因为不断的切换上下文而降低工作效率。

初始的解决方案

开始时大家会用各种简单的办法来解决这个问题,比如通过tag或annotation(不同的测试框架有不同的概念)手工的把测试分成几部分,然后增加Build agent的数量,让每个Build agent 只跑一部分测试,理想的结果是每个Build agent的测试时间一样长,这样运行测试的时间在理想情况下就是:总的测试时间 / Build agent的数量

但这样同时也带来了新的问题:当增加测试时,设置或修改哪个测试在哪台机器上跑的工作是很琐碎的,我们需要经常关注每个Build agent当前的运行时间是多少, 新的测试加到哪个上面比较合适。我在工作中就经常听到有人说,现在测试太慢了,我们再加一个Build agent, 然后分点测试过去吧。简单重复劳动做的多了,就说明需要关注一下,看看有没有好的办法来解决。 Continue reading “在集成测试环境中, 根据历史测试结果自动进行测试分配”

Could not capture screenshot when test failed on windows

Problems:

We have configured to capture screenshot when selenium (or any web based automation test, e.g. web driver, sahi, etc… ) tests failed, but each time we got is a blank image which only has a black background. The CI agent runs on Windows 2008 in a virtual machine

blank black ground image

Reason:

There is no any real window opened because nobody logged on this machine, Continue reading “Could not capture screenshot when test failed on windows”