编码 UI 测试失败后的操作

本文关键字:操作 失败 UI 测试 编码 | 更新日期: 2023-09-27 18:31:03

我在日常运行中使用多个 c# 有序测试。每个测试都需要恢复到快照,以便丢失所有数据和更改(这对我来说没关系)

但。。。有时测试失败,所有信息都会丢失。Visual studio提供了一个很好的解释和一个截图(非常有用)

我的问题:有没有办法或功能来实现,如果测试失败,一些文件(日志/崩溃)被复制到网络位置(硬编码功能或链接到蝙蝠/脚本文件或播放功能中的某些内容)我已经在我的测试中尝试过尝试捕获选项,但你会失去从视觉工作室获得的好信息。如果没有办法做到这一点,我会回到尝试捕获

问候

根据要求,一些代码:

这是我使用的测试方法:

//playback options + delay
Logging.playback();
Try{
Mouse.Click(uITaskListItems);
foreach (WinControl TaskList in uITaskListItems.GetChildren())
{
 if (TaskList.Name.Contains(Variables.TaskItem1))
 {
   Mouse.Click(TaskList, MouseButtons.Right);
   Mouse.Click(uIListMonitor);
   break;
  }
 }
}catch(Exception ex){
Logging.Log(ex.Message);
Assert.Fail();

和播放选项

private static void Playback_PlaybackError(object sender, PlaybackErrorEventArgs e)
{
   // Wait a second
   System.Threading.Thread.Sleep(1000);
   // Retry the failed test operation
   e.Result = PlaybackErrorOptions.Retry;
 }
 //playback options
 public static void playback()
 {
   Playback.PlaybackSettings.MatchExactHierarchy = true;
   Playback.PlaybackSettings.SmartMatchOptions = SmartMatchOptions.Control;
   Playback.PlaybackSettings.SmartMatchOptions = SmartMatchOptions.TopLevelWindow;
   Playback.PlaybackSettings.SmartMatchOptions = SmartMatchOptions.None;
   Playback.PlaybackSettings.SearchTimeout = 2000;
   Playback.PlaybackSettings.ShouldSearchFailFast = true;
   Playback.PlaybackSettings.ThinkTimeMultiplier = 2;
   Playback.PlaybackSettings.WaitForReadyLevel = WaitForReadyLevel.AllThreads;
   Playback.PlaybackSettings.WaitForReadyLevel = WaitForReadyLevel.UIThreadOnly;
   Playback.PlaybackSettings.WaitForReadyLevel = WaitForReadyLevel.Disabled;
   Playback.PlaybackSettings.WaitForReadyTimeout = 2000;
   Playback.PlaybackError -= Playback_PlaybackError;
   Playback.PlaybackError += Playback_PlaybackError;
   Playback.PlaybackSettings.DelayBetweenActions = 300;
  }

编码 UI 测试失败后的操作

您可以使用将在每次测试后执行的[TestCleanup]方法。代码可能基于以下内容。

[TestCleanup()]
public void MyTestCleanup()
{
    switch (TestContext.CurrentTestOutcome)
    {
        case UnitTestOutcome.Passed:
            // Success.
            break;
        case UnitTestOutcome.Aborted:
        case UnitTestOutcome.Error:
        case UnitTestOutcome.Failed:
        case UnitTestOutcome.Inconclusive:
        case UnitTestOutcome.InProgress:
        case UnitTestOutcome.Timeout:
        case UnitTestOutcome.Unknown:
            // Oh dear.
            break;
        default:
            // Should never be called.
            break;
    }
}

更简单的例程可能只使用单个if语句:

    if (TestContext.CurrentTestOutcome != UnitTestOutcome.Passed )
    {
        // Oh dear.
    }

您可以尝试 Exception 类。

使用 Exception 类,您可以获取错误的所有信息。-"就像视觉工作室所做的一样"

try
{
  //make some noise...
}
catch(Exception ex)
{
     Console.WriteLine(ex.InnerException);
     //ex.Data, ex.HelpLink, ex.HResult, ex.Messages etc..
}