0

我正在为 ASP.NET MVC Web 应用程序编写编码的 UI 测试。我正在使用 Visual Studio 2012。

基本上我有一堆测试方法,如下所示:

在此处输入图像描述

我使用有序的测试文件按我想要的顺序一次运行所有这些文件。

问题是测试的工作方式是,如果一个测试失败,它会在输出中被标记为 ref/failed,如果我再次运行它,测试通常会起作用。我希望能够将我的有序测试设置为运行,如果测试方法失败,它将自动尝试再次运行该测试方法

我该怎么做呢?我正在考虑if在每个测试方法的末尾添加一个语句,例如:

if(TestFailed) {
    RecallTest();
}

我会使用某种计数器,但是如何在编码的 UI 测试中编写上述内容?

4

2 回答 2

2

有几种方法可以处理这个问题。最明显的是这样的:

[TestMethod]
public void myTestMethod()
{
    int iteration = 0;
    if (iteration < 2)
    {
       try
       {
           // the usual test code goes here
       }
       catch (Exception)
       {
            // handles any exception kind
            iteration++;
            myTestMethod(); 
       }
    }
}

这将仅在方法失败时递归调用测试方法。您可以将其设置为捕获任何异常 (Exception) 或仅捕获特定异常 - 只需更改 catch 块中的异常类型。

这在 CodedUI 测试中通常是不鼓励的,因为它可能与测试运行器的内置异常报告交互不良(我建议查看添加日志记录以报告您遇到了失败)。但是,它只会给您一次重新运行(警告:我自己实际上并没有尝试过 - 您可能需要调整代码以确保根据您的测试代码进行测试清理)。

于 2013-07-03T11:40:04.273 回答
1

尝试使用播放错误处理:

 Playback.PlaybackError += Playback_PlaybackError;

这样,您可以注册一个事件处理程序,每次播放遇到错误时都会调用该处理程序。

在事件处理方法中,您可以告诉回放重复引发错误的操作:

static void Playback_PlaybackError(object sender, PlaybackErrorEventArgs e)
{                              
    e.Result = PlaybackErrorOptions.Retry;
}

可以添加一个计数器来防止错误和重试的无限循环。

于 2014-11-19T07:57:40.063 回答