你好,我叫Matt Travis,我是Visual C++前端团队的SDET。 除了我在前端的工作之外,我一直在研究一个自动化的滚动测试系统来帮助管理我们在VisualC++中所拥有的巨大的测试矩阵。
我们的下一个版本,Orcas,将不得不在通常的Windows版本、处理器和语言上运行,我们还必须考虑到一些事情,比如作为普通用户而不是管理员运行,与旧版本的visualstudio并行运行,以及运行visualstudio的不同sku(比如Express、Pro或VSTS)。 我们有许多测试套件,包括成千上万个独立的测试用例,它们必须在所有这些不同的配置中运行,而且这些套件通常也有几个不同的模式需要运行。 所有这些测试套件和配置都必须在有限的实验室机器上进行匹配。 正如您可能猜到的,做一个完整的测试通过可能是一个耗时、资源密集的过程。 在过去,我们花了一个月或更多的时间来完成一个完整的测试通过,我们的目标之一,奥卡斯是减少时间。
为了帮助实现这一目标,我一直在开发一个测试调度程序,以帮助将我们的许多测试工具结合起来,并尽可能多地自动化过程。 这是我们的滚动测试系统的一部分,它允许我们不断地对Orcas的当前版本进行测试,以便我们对产品的质量进行(半)实时评估。 以前,我们使用了一个工具,可以为要运行的每个套件生成一个跟踪条目。 然后,一个人必须查看每个条目并使用一个工具,该工具将在另一个工具中生成一个测试运行,该工具将出去抓取一台实验室机器并对其重新成像,在其上安装产品,然后运行测试。 一旦完成了,就必须有人用结果更新跟踪条目,然后测试套件所有者必须调查这些结果,然后关闭跟踪条目。 这个过程很容易延迟,因为需要手动干预,也没有很有效地利用我们的实验室资源,因为我们通常会结束重新成像和重新安装在一台机器上的每一个套件的一切。
新的调度程序生成我们想要运行的测试用例列表,并像以前一样创建跟踪条目,但是它会分析这个列表并将可以在同一个操作系统、硬件、语言等上运行的测试套件存储在一起,然后以我们的测试运行工具可以理解的格式自动创建批处理运行。 这使我们能够更有效地使用实验室机器,大大加快了创建测试运行的过程,因为不需要手动干预。 此外,当我们发现自动化出现问题时,我们可以在一个地方解决它,而所有其他套件都可以从该解决方案中受益。 这本身就帮助我们极大地提高了测试吞吐量,但是我们还向循环的末尾添加了一个自动测试退役队列,以进一步加快速度。 退役队列等待我们的测试运行工具生成结果。 然后,它将结果与特定测试套件的先前结果进行比较,如果结果在可接受的阈值内匹配,它将自动将结果转储到我们的测试历史中,并关闭跟踪条目,而无需任何人工干预。 如果结果不够好,它会通知套件所有者并自动保留一台测试运行机器以供调查,这样所有者就不必花费大量时间来设置正确的机器配置。
这两项改进的结合极大地提高了我们的测试通过时间,从一个多月提高到两三周。 它还允许我们在整个Orcas开发周期中运行我们的测试,这防止了我们在周期结束时有大量积压的测试运行调查,而这正是我们通常在以前的产品中加快测试运行周期的时候。 它还允许人们花更少的时间在一些更平凡的任务上,花更多的时间做更有趣的事情,比如写博客!