2014-11-06 96 views
2

我有使用自动化套件:MSTest的,Specflow和RanorexSpecflow忽略Visual Studio的单元测试属性“超时”

下测试的WPF应用程序是很大并且有许多应用,如微软的Word,浏览器时,SharePoint,的Abobe互动等等。因此,自动化测试的流程不时出现问题,并且测试挂起。然后这个挂起的时间一直持续到VS/MsTest 30分钟默认超时到期,在应用程序被终止并且下一个测试可以开始之前。

我想减少这个等待时间。有迹象表明,拿出不断在谷歌2种选择:

  1. 集[TestMethod的,超时(x)]的
  2. 编辑Local.testsettings测试超时值

但这些都不似乎工作在这些条件下,因为:

  1. Specflow忽略任何MSTEST属性添加如下所示:

    [TestMethod, Timeout(1000)] 
        [When(@"I test")] 
        public void WhenITest() 
        { 
         // some code 
        } 
    
  2. “如果您使用.testsettings文件...不允许您从第三方测试框架运行测试。” Source

所以我需要一个解决办法!而且看起来最好的方法是直接使用Specflow钩子(在Answer 3中建议here)。但是要将其实现为一个巨大的框架,并确保每个功能文件都添加了标签,这似乎是潜在的人为错误。

任何人都会遇到类似的问题吗?

+0

**“如果您使用.testsettings文件...不允许您从第三方测试框架运行测试。”**如果无法编辑VS 30分钟超时,该如何启动这对于第三方框架? – 2014-11-06 16:36:14

回答

1

出于好奇,你调试问题的考验?据我所知,MsTest在调试会话期间不会考虑超时。

如果没有,您可以添加一个计时器到您的测试初始化​​,设置为您希望的超时值。要添加到山姆持有人的答案,你可以有(与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"); 
    } 

一定要正确事后清理你的测试环境中,以免留下的文件,或者服务电话挂。

+0

你是正确的,我需要建立我的项目作为释放。我有几个错误需要通过我的项目配置来解决才能获得成功的构建。现在我已经测试了.testSettings Timeout值并且它正在工作。我们非常感谢您的帮助。 – 2014-11-11 10:40:17

1

如果您很高兴在默认情况下将其添加到所有测试中,则无需将其添加到每个功能文件。只需添加一个没有标签的[BeforeScenario],并在其中插入额外的代码,并将其添加到每个测试中。

你也可以“退出”一些测试通过检查选择退出标签存在,且在这种情况下不执行代码:

[BeforeScenario()] 
public static void BeforeWebScenario() 
{ 
    if(!ScenarioContext.Current.ScenarioInfo.Tags.Contains("noReducedTimeout")) 
     AddReducedTimeout; 
} 

我不知道你如何将添加的MSTest超时属性给你的测试,但你似乎认为另一个答案提供了这些信息,那么我将把它作为学生的练习。

如果这不起作用,那么您应该可以通过为specflow添加一个插件来完成此操作,该插件将允许单元测试生成器使用此超时扩大生成的测试。不幸的是,关于如何做到这一点,并没有太多的细节,但this blog post应该指出你在正确的方向。

如果你写一个插件,写一个,增加了父步骤定义的任何属性可能是有用的一般:)

+0

感谢您的回复Sam Holder。事后看来,[BeforeScenario]的想法不会工作,因为我真正需要的是[DuringScenario],这在Specflow中显然不存在。我没有编写代码,我不相信我的编码足够强大,无法创建自己的插件。我很惊讶没有更直接的方式来实现这一点。 – 2014-11-06 16:32:49

+0

创建插件并不困难。我有一个类似的插件,我正在编写这个插件,它为测试添加了一些NCrunch特定属性。我会看看是否可以选择添加超时。与此同时,另一种选择是使用NCunch生成测试 – 2014-11-06 16:38:14

+0

为什么不在“BeforeScenario”中添加一个定时器,该定时器在脚本标记设置为减少超时时调用'Assert.Fail()'? – Keysharpener 2014-11-06 16:45:07

0

所以事实证明,上述最终方案2为我工作: *编辑Local.testsettings测试超时值

的修复是我需要指定Local.testsettings作为一个额外的参数TeamCity构建步骤。

实施例: 的TeamCity - 建立步骤

  • 转轮类型= MSTEST

  • 列表组件文件= /MyProject/UITests.dll

  • 附加命令行参数= /testsettings :“Trunk/Tests/AutomationTests/ProjectName/local.testsettings”