Перейти к содержимому

Фотография

TestComplete перехват событий с генерацией Exception


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 6

#1 nikk60

nikk60

    Новый участник

  • Members
  • Pip
  • 38 сообщений

Отправлено 26 февраля 2013 - 17:44

Отредактировано:
Модераторам: если пренесете в форум "SmartBear (AutomatedQA) - Functional Testing" буду благодарен.
Сам не нашел такой кнопки

Вопрос:

Тест Item состоит из 2х частей
1. Подготовка
2. Сам тест

Требуется разное поведение при возникновении ошибок
В подготовке и завершении событие Log.Error должно
1. Писать в лог Warning «Ошибка при подготовке »
2. Останавливать TestItem (не продолжая подготовку и сам тест не запуская)

В самом тесте:
1. Писать в лог Erorr ошибку теста
2. Останавливать TestItem
Планировал конструировать TestItem так:
function MyTestItem () {
  Try {
    // Подготовка
    Log.Error (“Где то сломалась подготовка”);
    // Подготовка продолжение 
  }
  Catch (error) {
    Log.Warning (“Подготовка сломалась”);
    Runner.stop();
  }
  try {
    // Сам тест
    //…. 
  }
  Catch (error)  {
    Log.Error (“Сам тест сломался”);
    Runner.stop();
  }
}
И на событие Log.error навесить обработчик:

function GeneralEvents_OnLogError(Sender, LogParams){  
  throw ('исключение из перехвата');   
}

Однако, 'исключение из перехвата' в блок catch уже не попадает. И несмотря ни на что продолжает работать в данном случае «Подготовка продолжение»
Runner.stop(); в самом перехвате меня не устраивает, т.к. исклчение надо обработать по разному для подготовки и самого теста.
Какое может быть решение?
Спасибо.
  • 0

#2 Rebz

Rebz

    Опытный участник

  • Members
  • PipPipPipPip
  • 471 сообщений


Отправлено 27 февраля 2013 - 06:37

А почему не хотите использовать ErrorCount/WarningCount?
И ещё в настройках TestItem есть колонка - останавливать тест при ошибке ( там правой кнопкой мыши, Field Chooser - перенестите в таблицу колонку stop on error).
  • 0

#3 Vader

Vader

    Активный участник

  • Members
  • PipPip
  • 129 сообщений
  • Город:Харьков

Отправлено 27 февраля 2013 - 10:44

Какое может быть решение?

Решение - не пользоваться эксепшенами в TC, т.к. работают они неадекватно. Вот тут обсуждалось, например.
  • 0

#4 nikk60

nikk60

    Новый участник

  • Members
  • Pip
  • 38 сообщений

Отправлено 28 февраля 2013 - 06:31

А почему не хотите использовать ErrorCount/WarningCount?


Как это может помочь?

И ещё в настройках TestItem есть колонка - останавливать тест при ошибке ( там правой кнопкой мыши, Field Chooser - перенестите в таблицу колонку stop on error).


в настройках TestItem три варианта
- ничего не делать (понятно)
- остановить весть проект (понятно что не надо)
- остановить выполнение TestItem - хорошо, НО это на самом деле значит что ТЕКУЩИЙ Item ПРОДОЛЖИТ работу, но не будет запускать только дочерние.
Это не правильное для мегня поведение - т.к. я хочу останавливать текущий и приступать к следующему

Решение для последнего случая - этого в перехвате события Log.Error вызывать Runner.Stop()
Но мне этого тоже не надо, Runner.Stop() я хочу вызывать уже в блоке перехвата exception
Но вообще печально что механизм исключений ТАК стремно работает в ТС...
  • 0

#5 Rebz

Rebz

    Опытный участник

  • Members
  • PipPipPipPip
  • 471 сообщений


Отправлено 28 февраля 2013 - 07:01


А почему не хотите использовать ErrorCount/WarningCount?


Как это может помочь?

Если я правильно понял, вам нужно понять были ошибки или нет, по завершении теста смотреть ErrorCount, если он больше 0, то exit function.
Вообще я TestItem-ами не пользуюсь и последовательность действий задаю в юните сценария. Тогда при exit function будет выполняться следующий тест + можно обрабатывать что вернет предыдущая функция и в зависимости от этого закончить/пропустить/начать новую функцию.
  • 0

#6 nikk60

nikk60

    Новый участник

  • Members
  • Pip
  • 38 сообщений

Отправлено 04 марта 2013 - 07:35



А почему не хотите использовать ErrorCount/WarningCount?


Как это может помочь?

Если я правильно понял, вам нужно понять были ошибки или нет, по завершении теста смотреть ErrorCount, если он больше 0, то exit function.
Вообще я TestItem-ами не пользуюсь и последовательность действий задаю в юните сценария. Тогда при exit function будет выполняться следующий тест + можно обрабатывать что вернет предыдущая функция и в зависимости от этого закончить/пропустить/начать новую функцию.


Мне тоже не сильно нравится работа с TestItems в TC (заводить ручками и т.д.)
Но как если не пользоваться делать 1
Красивый отчет, где будет видно, что test138 – сработал, а test235 – нет?
И не совсем понял, как управлять выполнением – завершение теста если не прошел и переход к новому. Не могули бы вы сориентировать?
  • 0

#7 Rebz

Rebz

    Опытный участник

  • Members
  • PipPipPipPip
  • 471 сообщений


Отправлено 04 марта 2013 - 07:56

Мне тоже не сильно нравится работа с TestItems в TC (заводить ручками и т.д.)
Но как если не пользоваться делать 1
Красивый отчет, где будет видно, что test138 – сработал, а test235 – нет?
И не совсем понял, как управлять выполнением – завершение теста если не прошел и переход к новому. Не могули бы вы сориентировать?


В логи формировать папки с каждым тестом. Из лога будет видно какой лог завален, какой нет. Можно писать в файл, к примеру.

пример на VBS

sub scenario
  Call Func1
  Call Func2
  Call Func3
  Call FuncN
end sub


sub scenario2
 result1 = Func1
  if result <> "-1" then 
	Call Func2
	Call Func3
  end if  
Call FuncN
end sub


Function Func1
   ....
  ErrCount = Log.ErrCount
  
  If ErrCount > 0 Then
    Func1 = "-1"   ' - тут или в других местах ловим ошибки, если есть хотя бы одна, то ф-ция возвращает -1
  end if
End Funtcion
scenario - линейная функция
scenario2 - здесь закладываем логику выполнения. Если Func1 завершилась с ошибкой, то мы не выполняем Func2, Func3. Можно определить код ошибки под определенные ошибки. НЕ сохранилась сущность - "-1", кнопки не появилось, "-2" и т.д.
Надеюсь пример наглядный.
  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных