Тест Rerun CodedUI во время выполнения

1

У меня есть тест CodedUI. Это спорадический сбой по исключению (не может сфокусировать элемент). Могу ли я сделать что-то подобное

[TestMethod]
public void MySporadicFailedTest()
{
        try {
          //Some Test action
        }
        catch((Exception ex)) {
          if (ex is System.Exception.ElementNotFocused){
            //retry test
          }
        }
}
  • 1
    Да. Но, если выдается это исключение, то почему вы ожидаете, что повторная проверка сделает что-то лучше? Я предлагаю вам выполнить некоторые веб-поиски для отладки кодированных тестов пользовательского интерфейса и для обработки сообщения об ошибке, о котором было сообщено. Поместить полное сообщение об ошибке в вопрос здесь было бы хорошей идеей.
  • 0
    Ошибка не важна в моем вопросе. Я могу попытаться избежать этого. Меня интересует возможность перезапуска теста.
Показать ещё 1 комментарий
Теги:
coded-ui-tests

4 ответа

1

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

public static class TestRetryExtensions 
{
    public static void WithRetry<T>(this Action thingToTry, int timeout = 30) where T: Exception
    {
        var expiration = DateTime.Now.AddSeconds(timeout)
        while (true) 
        {
            try 
            {
                thingToTry();
                return;
            }
            catch (T) 
            {
                if (DateTime.Now > expiration) 
                {
                    throw;
                }
                Thread.Sleep(1000);
            }
        }
    }
}

Затем, в рамках моего фактического теста:

uiMap.ClickSomeThing();
uiMap.EnterSomeText();
Action clickSomeOtherThingAction = () => uiMap.ClickSomeOtherThingThatFailsForNoReason();
clickSomeOtherThingAction.WithRetry<UITestControlHiddenException>(60);

Он пытается выполнить действие. Если это не удается, за исключением того, что вы не знаете, что это случайная "нормальная" вещь, она выдает исключение как обычно. Если это не удается, за исключением того, что вы говорите ему, чтобы повторить попытку, он будет продолжать попытки этого действия (с задержкой 1 секунда между попытками) до тех пор, пока тайм-аут не будет превышен, и в этот момент он просто отбрасывает и отменяет исключение.

0
 we can include below line of code in test clean up method to re run the     failed  script
if (TestContext.CurrentTestOutCome==TestContext.unittestoutcome.failed)
{
  var type=Type.GetType(TestContext.FullyQualifiedTestClassName);
  if (type !=null)
   {
     var method=Type.GetMethod(TestContext.TestName);
     var event=Activator.CreateInstance(type);
   }
 method.invoke(event);

}

  • 1
    Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, почему и / или как этот код отвечает на вопрос, повышает его долгосрочную ценность.
0

Если тест codedUI постоянно терпит неудачу без надлежащей причины, вы можете добавить код для повышения эффективности теста и сделать его безопасным. Если тест с ошибкой, особенно при фокусировке на элемент, сначала попытайтесь сфокусироваться на элементе верхнего уровня, а затем попробуйте сосредоточить дочерние элементы. Эта LINK может помочь вам написать тесты с отказоустойчивым тестированием.

0

Пока вы можете поймать, какое когда-либо исключение бросается, вы можете обернуть свой тестовый код в цикл повтора. Затем он будет проверять тестовый код определенное количество раз, прежде чем сдаться:

 for (var i = 0; i < TimesToRetry; i++)
 {
     try{
        //perform test

        //test ran correctly - break out loop to end test
        break;
     }
     catch(Exception){
        //might want to log exception
     }
 }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню