如何从代码中禁用CodedUI测试代理



我们有一个服务来获取XML中的自定义测试,并将其转换为CodedUI测试。然后,我们启动MSTest的一个过程,将测试加载到测试控制器中,然后测试控制器将测试分发到各个代理中。我们在晚上进行回归测试,所以如果出现问题,没有人可以修复系统。当测试程序中出现某些异常时,它会弹出一个错误窗口,系统上无法再运行任何测试。随后的测试将加载到代理中,并立即失败,因为它们无法执行分配的任务。数千个本应在多个系统上通宵进行的测试现在在几分钟内失败。

我们可以通过返回测试的速度来检测错误的发生,但我们不知道如何禁用代理,以免它再接受任何测试。

附录:

如果测试失败得很惨,以至于没有更多的测试可以尝试成功运行(如前所述,我们可能没有操作来处理一些可能是新的弹出窗口),那么我们希望禁用该代理,因为不需要在它上运行更多的测试:它们都会失败。由于我们有许多代理同时运行,如果其中一个发生故障(并被禁用),负载仍然可以在没有长串故障的情况下进行分配。这些其他回归测试仍然有机会成功(一切正常)或失败(我们是否错过了另一个弹出窗口,或者这是实际的回归失败)。

20秒内2000次故障并不能说明什么,除了一个系统出现了一个没有人意识到的问题,现在我们浪费了一整晚的测试。2次故障(1次是自然故障,1次是由以前的故障引起的)和1次系统故障意味着总夜间运行时间可能会延长一两个小时,我们有关于如何开始一天的有用数据:修复1次测试并重新运行这两次故障。

在这种情况下,需要中止测试运行。如果您自己运行mstest,则需要在命令行进程中注入^c。但是:如果周围没有人来修复它,为什么随之而来的测试失败很重要?如果只是为了快速查看哪个测试是导致错误的原因,为什么不生成一个代码ui检查,看看消息框是否在那里,并用Assert.indeterminal标记测试不确定。导致错误的测试会像一个标志一样突出。

如果您可以检测到要禁用代理的点,则可以通过运行"TestAgentConfig.exe delete"来禁用代理,该命令将代理重置为未配置状态。

最新更新