2014-11-20 3 views
3

Я использую несколько C# Упорядоченных тестов на ежедневные прогоны. Каждый тест требует возврата к снимку, поэтому все данные и изменения теряются (что нормально для меня)Действие после неудачного кодированного теста ui

Но ... иногда тест терпит неудачу, и вся информация теряется. Visual studio предоставляет хорошее объяснение и скриншот (очень полезно)

Мой вопрос: есть ли способ или функция для реализации, если при испытании не удается выполнить некоторые файлы (журнал/сбой), скопированы в сетевое местоположение (жестко закодированные функция или ссылка на файл bat/script или что-то в функции воспроизведения) Я попытался с опциями try catch в своих тестах, но вы потеряли хорошую информацию, которую вы получаете от визуальной студии. Если нет никакого способа, чтобы достичь этого, я вернусь к попытке поймать

С уважением

по запросу код:

Это является TestMethod я использую:

//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; 
    } 
+0

Можете ли вы показать нам некоторые из ваших кодов? –

+0

Я не уверен, что это может быть полезно добавить код. это метод испытаний. Использую Mouse.Click (uITaskListItems); Еогеасп (WinControl TaskList в uITaskListItems.GetChildren()) { если (TaskList.Name.Contains (Variables.TaskItem1)) { Mouse.Click (TaskList, MouseButtons.Right); Mouse.Click (uIListMonitor); break; } } – Mordacaj

+0

Извините, я имею в виду заявление 'try' –

ответ

1

Вы можете использовать [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. 
    } 
+0

thx. Собираюсь попробовать и вернемся к вам – Mordacaj

+0

Я использовал инструкцию if в тестовой очистке, и она работает так, как я ее хочу. Этот ответ полезен в этом случае, даже если я узнал, и я использую другой ответ также в некоторых случаях. Спасибо – Mordacaj

1

Вы можете попробовать класс Exception.

Используя класс Exception, вы можете получить всю информацию об ошибке. - «Так же, как то, что Visual Studio сделать»

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

aha. знал о некоторых функциях вывода ex, но вы указали мне на что-то дополнительное. поэтому да, будет использовать опцию try catch, если нет другого способа предоставления. Thx для справки – Mordacaj

+1

Вы даже можете воспользоваться различными исключениями для обеспечения различной функциональности. Например, если сбой утверждения не выполняется, запишите его как обычный неудачный тестовый пример, а также, если элемент управления не найден, затем поймайте исключение UITestControlNotFound для определенного набора действий, когда это произойдет (возможно, сохраните снимок экрана страница для ваших журналов или что-то еще). –

Смежные вопросы