2014-01-22 3 views
4

Есть ли способ реализовать крючок AfterScenario для повторного запуска текущего теста в случае сбоя?SpecFlow - Повторить неудачные тесты

Что-то вроде этого:

[AfterScenario("retry")] 
public void Retry() 
{ 
    if (ScenarioContext.Current.TestError != null) 
    { 
    // ?  
    } 
} 

Примечания: Тесты в моем проекте объединены в упорядоченных испытаниях и выполняется с помощью MSTest.

+1

Что условие делает, что это удастся, если вы запустите его второй раз? – rene

+0

Хороший вопрос @rene! Думаю, моя идея мертворожденна. – LeeWay

ответ

0

Цель сценариев Specflow - утверждать, что система ведет себя так, как ожидалось.

Если какая-либо временная проблема приводит к сбою теста, то получение теста для повторного запуска и «надежды на лучшее» не решит проблему! Невозможно ожидать, что при тестировании не следует ожидать поведения. Тест должен давать последовательный результат каждый раз, когда он выполняется.

Отличный пост на том, что делает хороший тест можно найти here и ответ также утверждает, что тест должен быть:

Повторяющиеся: Тесты должны давать одинаковые результаты каждый раз .. каждый время. Тесты не должны полагаться на неконтролируемые параметры.

В этом случае это совершенно правильно, если тест не сработает. Теперь вы должны выяснить, почему именно тест изредка терпит неудачу.

+1

+1 абсолютно согласен с Свежим – AlSki

+0

Тому, кто ниспослал меня, объясните, почему вы считаете, что тесты не должны иметь гарантированного воспроизводимого поведения. –

+2

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

4

Этот плагин является удивительным. https://github.com/arrty/specflow-retry. Я получил его на работу с NUnit и его пример использует MS-Test

Это позволит вам сделать это:

@retry:2 
Scenario: Tag on scenario is preferred 
Then scenario should be run 3 times 
Смежные вопросы