3.9. Отладка скриптов

Назад: 3.8 Использование логов и анализ результатов Содержание Дальше: 3.10 Работа с несколькими модулями (Units)

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

В TestComplete есть все необходимые инструменты для отладки скриптов. Если вы используете язык DelphiScript, то вам не нужно ничего дополнительно, однако для доступа к отладочным функциям при использовании других языков необходимо установить MS Script Debugger.

Кроме того, убедитесь, что опция Debug – Enable Debugging включена. Еще желательно включить опции Tools – Options – Engines – General – Debug – Highlight execution point и Tools – Options – Engines – Log – Show Log on Pause.

Для изучения возможностей режима отладки мы создадим 2 функции TestDebug1 и TestDebug2, каждая из которых будет помещать в лог сообщения. Кроме того, функция TestDebug1 будет вызывать функцию TestDebug2.

function TestDebug1()
{
  Log.Message(“TestDebug1, message 1″);
  TestDebug2();
  Log.Message(“TestDebug1, message 1″);
}

function TestDebug2()
{
  Log.Message(“TestDebug2, message 1″);
  Log.Message(“TestDebug2, message 2″);
}

Теперь поставим точку прерывания в функции TestDebug1 на строке вызова функции TestDebug2. Для этого необходимо щелкнуть мышью на этой сроке и нажать клавишу F9. После этого строка станет красной.
  

Если теперь запустить функцию TestDebug1, то ее выполнение будет приостановлено непосредственно перед вызовом функции TestDebug2, а в панели закладок появится новое окно Pause Log, в котором находится лог текущего работающего скрипта.
 
 

Как видно из приведенного скриншота, первое сообщение уже отправлено в лог и TestComplete ждет наших дальнейших действий. Вернемся на вкладку модуля скрипта.

Здесь мы можем сделать следующие действия:

  • продолжить выполнение скрипта, нажав F5. При этом выполнение будет продолжено до следующего брекпоинта или до конца, если других брекпоинтов нет
  • продолжить выполнение построчно с помощью клавиши F10. При этом будет выполнена следующая строка текущей функции (в нашем случае полностью отработает вызов функции TestDebug2)
  • продолжить выполнение построчно функции, вызываемой в данной строке, с помощью клавиши F11. При этом мы переместимся на первую строку вызываемой функции TestDebug2, но ее выполнение не начнется, его тоже надо будет проходить по шагам
  • продолжить выполнение скрипта до того места, где находится текстовый курсор (F4)

Теперь добавим в наши функции объявления переменных и ознакомимся с другими возможностями отладочного режима.
function TestDebug1()
{
  var p, i, s, a = new Array(), u;
 
  Log.Message(“TestDebug1, message 1″);
  TestDebug2();
  p = Sys.Process(“TestComplete”);
  i = 12; s = “some text”; a[0] = 10;
 
  Log.Message(“TestDebug1, message 1″);
}

Поставьте брекпоинты на строках Log.Message и запустите функцию. После остановки на первом брекпоинте обратите внимание на нижнюю часть окна TestComplete, где находятся вкладки Call Stack, Locals, Watch List и Breakpoints.

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

Теперь нажмите F5 и после того, как выполнение скрипта остановится на следующем брекпоинте, снова обратите внимание на вкладку Locals. Теперь мы видим, какое значение в данный момент имеют все переменные кроме переменной u, которая так и не была инициализирована:
  

Если щелкнуть по значку + возле переменной p – раскроется список доступных свойств этого объекта (в данный момент это свойства процесса “TestComplete”). Если щелкнуть на нем правой кнопкой мыши и выбрать пункт меню Inspect, откроется окно, аналогичное Object Browser-у, в котором можно посмотреть все свойства и методы объекта.

Теперь перейдите на вкладку Watch List. Здесь вы можете как смотреть значения любых переменных (локальных и глобальных), так и вычислять целые выражения. Ниже показан пример проверки существования процесса и нескольких переменных.
  

На вкладке Breakpoints отображаются все брекпоинты, которые есть в проекте.
 
 

На вкладке Call Stack отображается порядок вызова вложенных функций. Например, в нашем случае, если остановить выполнение скрипта в середине функции TestDebug2, то мы увидим, что первой была вызвана функция TestDebug1, а затем из нее TestDebug2.

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

 

В TestComplete есть все необходимые инструменты для отладки скриптов. Если вы используете язык DelphiScript, то вам не нужно ничего дополнительно, однако для доступа к отладочным функциям при использовании других языков необходимо установить MS Script Debugger.

 

Кроме того, убедитесь, что опция Debug – Enable Debugging включена. Еще желательно включить опции Tools – Options – Engines – General – Debug – Highlight execution point и Tools – Options – Engines – Log – Show Log on Pause.

 

Для изучения возможностей режима отладки мы создадим 2 функции TestDebug1 и TestDebug2, каждая из которых будет помещать в лог сообщения. Кроме того, функция TestDebug1 будет вызывать функцию TestDebug2.

 

function TestDebug1() 

{ 

  Log.Message(“TestDebug1, message 1″); 

  TestDebug2(); 

  Log.Message(“TestDebug1, message 1″); 

} 

 

function TestDebug2() 

{ 

  Log.Message(“TestDebug2, message 1″); 

  Log.Message(“TestDebug2, message 2″); 

} 

 

Теперь поставим точку прерывания в функции TestDebug1 на строке вызова функции TestDebug2. Для этого необходимо щелкнуть мышью на этой сроке и нажать клавишу F9. После этого строка станет красной.

 

Если теперь запустить функцию TestDebug1, то ее выполнение будет приостановлено непосредственно перед вызовои функции TestDebug2, а в панели закладок появится новое окно Pause Log, в котором находится лог текущего работающего скрипта.

 

 

Как видно из приведенного скриншота, первое сообщение уже отправлено в лог и TestComplete ждет наших дальнейших действий. Вернемся на вкладку модуля скрипта.

 

Здесь мы можем сделать следующие действия:

- продолжить выполнение скрипта, нажав F5. При этом выполнение будет продолжено до следующего брекпоинта или до конца, если других брекпоинтов нет

- продолжить выполнение построчно с помощью клавиши F10. При этом будет выполнена следующая строка текущей функции (в нашем случае полностью отработает вызов функции TestDebug2)

- продолжить выполнение построчно функции, вызываемой в данной строке, с помощью клавиши F11. При этом мы переместимся на первую строку вызываемой функции TestDebug2, но ее выполнение не начнется, его тоже надо будет проходить по шагам

- продолжить выполнение скрипта до того места, где находится текстовый курсор (F4)

 

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

function TestDebug1() 

{ 

  var p, i, s, a = new Array(), u; 

   

  Log.Message(“TestDebug1, message 1″); 

  TestDebug2(); 

  p = Sys.Process(“TestComplete”); 

  i = 12; s = “some text”; a[0] = 10; 

   

  Log.Message(“TestDebug1, message 1″); 

} 

 

Поставьте брекпоинты на строках Log.Message и запустите функцию. После остановки на первом брекпоинте обратите внимание на нижнюю часть окна TestComplete, где находятся вкладки Call Stack, Locals, Watch List и Breakpoints.

 

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

 

 

Теперь нажмите F5 и после того, как выполнение скрипта остановится на следующем брекпоинте, снова обратите внимание на вкладку Locals. Теперь мы видим, какое значение в данный момент имеют все переменные кроме переменной u, которая так и не была инициализирована:

 

Если щелкнуть по значку + возле переменной p – раскроется список доступных свойств этого объекта (в данный момент это свойства процесса “TestComplete”). Если щелкнуть на нем правой кнопкой мыши и выбрать пункт меню Inspect, откроется окно, аналогичное Object Browser-у, в котором можно посмотреть все свойства и методы объекта.

 

Теперь перейдите на вкладку Watch List. Здесь вы можете как смотреть значения любых переменных (локальных и глобальных), так и вычислять целые выражения. Ниже показан пример проверки существования процесса и нескольких переменных.

 

На вкладке Breakpoints отображаются все брекпоинты, которые есть в проекте.

 

 

На вкладке Call Stack отображается порядок вызова вложенных функций. Например, в нашем случае, если остановить выполнение скрипта в середине функции TestDebug2, то мы увидим, что первой была вызвана функция TestDebug1, а затем из нее TestDebug2.

Назад: 3.8 Использование логов и анализ результатов Содержание Дальше: 3.10 Работа с несколькими модулями (Units)