我有一个使用的自动化套件:Mstest,Specflow和Ranorex
受测试的WPF应用程序很大,并且与许多应用程序(如MS Word,浏览器,Sharepoint,Abobe等)进行交互。因此,自动化测试的流程不时会出现打嗝而且测试仍然存在。此挂起时间将继续,直到VS / MsTest 30分钟默认超时到期,然后应用程序被终止并且下一个测试可以开始。
我想减少这段等待时间。谷歌有两个不断出现的选项:
但这些似乎都不适用于这些条件,因为:
答案 0 :(得分:1)
如果您乐意默认将其添加到所有测试中,则无需将其添加到每个功能文件中。只需添加一个没有标记的[BeforeScenario]
,然后在其中插入其他代码,它就会被添加到每个测试中。
您也可以选择退出'一些测试通过检查是否存在opt out标签而在这种情况下不执行代码:
[BeforeScenario()]
public static void BeforeWebScenario()
{
if(!ScenarioContext.Current.ScenarioInfo.Tags.Contains("noReducedTimeout"))
AddReducedTimeout;
}
我不确定如何将MSTest超时属性添加到您的测试中,但是您似乎认为其他答案提供了该信息,那么我将其作为学生的练习。< / p>
如果这不起作用,那么你应该能够通过为specflow添加一个插件来实现这一点,这将允许单元测试生成器使用此超时来增加生成的测试。不幸的是,关于如何做到这一点没有太多细节,但是this blog post应该指出你正确的方向。
如果您确实编写了一个插件,那么编写一个在父步骤定义中添加任何属性的插件通常会非常有用:)
答案 1 :(得分:1)
出于好奇,你在调试有问题的测试吗?据我所知,MsTest在调试会话期间没有考虑超时。
如果没有,您可以在测试初始化中添加一个计时器,设置为您希望的超时值。要添加到Sam Holder的答案中,您可以(使用MsTest语法):
[TestInitialize]
public void Initialize()
{
Timer timer = new Timer(FailTheTest, null, 0, timeoutValue);
}
private void FailTheTest(object state)
{
Assert.Fail("Insert here your timeout message");
}
请务必在事后正确清理测试环境,以免丢失文档或服务电话。
答案 2 :(得分:0)
事实证明,上面的选项2最终对我有用: *编辑Local.testsettings测试超时值
修复是我需要将Local.testsettings指定为TeamCity构建步骤中的附加参数。
实施例: TeamCity - 构建步骤
亚军类型= MsTest
列出程序集文件= /MyProject/UITests.dll
其他命令行参数= / testsettings:&#34;中继/测试/ AutomationTests / ProjectName / local.testsettings&#34;