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

Фотография

Как его остановить?!


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

#1 vitaliy4us

vitaliy4us

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

  • Members
  • PipPip
  • 81 сообщений

Отправлено 08 апреля 2012 - 16:09

В начале выполнения скрипта TC почему-то просматривает файл, не имеющий к данному скрипту никакого отношения и не упоминающийся в нем. О вообще не используется ни одним из скриптов и создан просто для хранения переменных элементов управления. Так вот, на каждой строчке этого файла TC останавливается по 40 сек. и не найдя ничего шлет ошибки в лог. При этом остановить выполнение скрипта нет никакой возможности. Пока он не дойдет до конца указанного файла (контролирую по строке подсветки), скрипт не может быть остановлен. Приходится ожидать минут 5.
  • 0

#2 vitaliy4us

vitaliy4us

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

  • Members
  • PipPip
  • 81 сообщений

Отправлено 08 апреля 2012 - 17:47

Не могу понять. Прибил этот самый файл. Так он к другому прицепился - есть у меня маленький такой трехстрочный скрипт, который использую для хранения глобальных переменных. Функций в нем нет никаких. Так TC перед запуском моего скрипта, в котором данный файл не упоминается, лезет проверять эти переменные, которые содержат в себе объекты (элементы управления) и не найдя их, отправляет сообщение в лог Object does not exist. Только после этого начинается выполнение самого скрипта, которое проходит нормально. Но в результате всех этих проверок скрипт начинает работать только через минуту после запуска да еще с испорченным логом. Смутно начинаю догадываться, что дело в том, что в упомянутом выше скриптике нет никаких функций, а только переменные. То же самое было и в файле, с которого все началось.
  • 0

#3 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 08 апреля 2012 - 18:03

Возможно обращение к файлу находится в каком-то обработчике события (например, OnStartTest)?
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#4 Dmitry N

Dmitry N

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 09 апреля 2012 - 04:37

Вот бы посмотреть на этот файлик. А ещё лучше на весь проект.
  • 0
С уважением,
Дмитрий

#5 vitaliy4us

vitaliy4us

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

  • Members
  • PipPip
  • 81 сообщений

Отправлено 09 апреля 2012 - 06:00

Вот бы посмотреть на этот файлик. А ещё лучше на весь проект.

Вот отправляю два скриншота из которых суть проблемы понятна.

Прикрепленные файлы

  • Прикрепленный файл  Project.jpg   500,13К   31 Количество загрузок:
  • Прикрепленный файл  File.jpg   261,87К   33 Количество загрузок:

  • 0

#6 vitaliy4us

vitaliy4us

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

  • Members
  • PipPip
  • 81 сообщений

Отправлено 09 апреля 2012 - 06:06

Возможно обращение к файлу находится в каком-то обработчике события (например, OnStartTest)?

Нет, из выполняемого на текущий момент скрипта обращений к данному файлу нет никаких. Более того, все началось с файла (который затем был удален), который был создан уже после того как были написаны существующие скрипты, и предназначался для их последующей модернизации с целью использования часто повторяющихся объектов непосредственно из этого файла (скрипта).
  • 0

#7 Rebz

Rebz

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

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


Отправлено 09 апреля 2012 - 06:49

delete plz.
  • 0

#8 Rebz

Rebz

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

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


Отправлено 09 апреля 2012 - 06:49

смотрите, ТестКомплит сначала выполняет не саму запущенную функци/процедуру, а то, что лежит вне её, причем в других юнитах.
Т.е. пример кода VBS:
unit1
Call log.Message("Я не размещен в теле функции")

unit2
function a
....
end function

function b
...
end function

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

Сообщение отредактировал Rebz: 09 апреля 2012 - 06:53

  • 0

#9 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 09 апреля 2012 - 06:57

Rebz прав. Дело в том, что у вас в том файлике переменные объявлены глобально, т.е. вне функций. Такие переменные вычисляются в самом начале выполения скрипта, перед тем, как собственно функция-тест начинает выполняться. Вот простой аналог вашей ситуации:
answer = 42;

function Test()
{
  Log.Message(answer); // 42
}
Ошибки в логе из-за того, что не все из объявленных объектов существуют в приложении на момент запуска теста.

Возможные варианты решения проблемы:

* Использовать Name Mapping (ака репозитарий объектов - судя по всему, вы пытаетесь его переизобрести :))

* Хранить имена объектов как строки, и в нужный момент конвертировать их в объекты eval'ом. Так вы избежите ошибок "The object doesn't exist" в начале теста:
// Файл с переменными
strMainWindow = "Sys.Process(\"GWTalk\").WinFormsObject(\"Main\")";

// Файл теста
function Test()
{
  ...
  MainWindow = eval(strMainWindow); // Конвертируем строку с именем объекта в сам объект
  MainWindow.Activate();
}

  • 0

#10 vitaliy4us

vitaliy4us

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

  • Members
  • PipPip
  • 81 сообщений

Отправлено 09 апреля 2012 - 07:13

смотрите, ТестКомплит сначала выполняет не саму запущенную функци/процедуру, а то, что лежит вне её, причем в других юнитах.
Т.е. пример кода VBS:
unit1
Call log.Message("Я не размещен в теле функции")

unit2
function a
....
end function

function b
...
end function

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

В том то и дело, что данный скрипт создан для хранения гдобальных пременных, а поместить переменную в функцию, значит лишиться ее "глобальности". Другое дело, что я то хочу использовать эти глобальные переменные только там, где этот скрипт подключается к другому скрипту, а TC хочет сказать, что видит эти переменные везде.
  • 0

#11 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 09 апреля 2012 - 07:26

В том то и дело, что данный скрипт создан для хранения гдобальных пременных, а поместить переменную в функцию, значит лишиться ее "глобальности". Другое дело, что я то хочу использовать эти глобальные переменные только там, где этот скрипт подключается к другому скрипту, а TC хочет сказать, что видит эти переменные везде.


У вас не получится в глобальных переменных хранить окна и контролы (типа Sys.Process(...).WinFormsObject() ), так как при обращении к таким объектам они должны существовать (в вашем случае - при объявлении переменных).
  • 1

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#12 vitaliy4us

vitaliy4us

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

  • Members
  • PipPip
  • 81 сообщений

Отправлено 09 апреля 2012 - 07:28

Rebz прав. Дело в том, что у вас в том файлике переменные объявлены глобально, т.е. вне функций. Такие переменные вычисляются в самом начале выполения скрипта, перед тем, как собственно функция-тест начинает выполняться. Вот простой аналог вашей ситуации:

answer = 42;

function Test()
{
  Log.Message(answer); // 42
}
Ошибки в логе из-за того, что не все из объявленных объектов существуют в приложении на момент запуска теста.

Возможные варианты решения проблемы:

* Использовать Name Mapping (ака репозитарий объектов - судя по всему, вы пытаетесь его переизобрести :))

* Хранить имена объектов как строки, и в нужный момент конвертировать их в объекты eval'ом. Так вы избежите ошибок "The object doesn't exist" в начале теста:
// Файл с переменными
strMainWindow = "Sys.Process(\"GWTalk\").WinFormsObject(\"Main\")";

// Файл теста
function Test()
{
  ...
  MainWindow = eval(strMainWindow); // Конвертируем строку с именем объекта в сам объект
  MainWindow.Activate();
}

Хранить имена объектов как строки это, конечно, выход. Но, честно сказать, не хотелось бы заморачиваться с этим и таскать eval() по всем скриптам. К Name Mapping почему то отношусь с предубеждением (хотелось бы именовать объекты на свой манер, да и пользуюсь в основном полными именами). Что же касается хранения объектов как глобальных переменных в отдельном скрипте, то раньше таких проблем не было и, если их нужно было использовать в каком-то конкретном скрипте, то просто подключал к этому скрипту скрипт с переменными. Возможно, изменил случайно где-то настройки и теперь перед запуском любого скрипта TC проверяет все существующие.
  • 0

#13 vitaliy4us

vitaliy4us

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

  • Members
  • PipPip
  • 81 сообщений

Отправлено 09 апреля 2012 - 07:36

У вас не получится в глобальных переменных хранить окна и контролы (типа Sys.Process(...).WinFormsObject() ), так как при обращении к таким объектам они должны существовать (в вашем случае - при объявлении переменных).


Т.е. даже несмотря на то, что данный unit не подключен к исполняемуму в данный момент скрипту TC все равно будет его проверять? А как быть если я хочу использовать данные переменные только в определенных скриптах и не трогать их во всех прочих случаях?
  • 0

#14 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 09 апреля 2012 - 07:37

Т.е. даже несмотря на то, что данный unit не подключен к исполняемуму в данный момент скрипту TC все равно будет его проверять?


Нет, если не подключен - то не будет.
Ну а смысл вам определять переменные в модуле, который не подключается нигде?
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#15 vitaliy4us

vitaliy4us

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

  • Members
  • PipPip
  • 81 сообщений

Отправлено 09 апреля 2012 - 10:09

Нет, если не подключен - то не будет.
Ну а смысл вам определять переменные в модуле, который не подключается нигде?

Я имею в виду следующее: допустим у меня есть некоторые переменные, содержащие объекты (окна, контролы), которые используются в 50 скриптах, а в 50 не используются. Я создаю скрипт, содержащий только эти переменные и больше ничего и путем USEUNIT подключаю его к тем скриптам, которым эти переменные нужны. В таком случае, при запуске любого из скриптов, к которым данный файл не подключен, TC по идее не должен его проверять?
  • 0

#16 Rebz

Rebz

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

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


Отправлено 09 апреля 2012 - 11:43

если я ничего не путаю, то у меня начинал отрабатывать юнит test, который является "черновиком", хотя он нигде не был подключен. Фича такая.
  • 0

#17 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 09 апреля 2012 - 12:04

Только что проверил, Rebz прав: даже если не подключать модуль, то все, что в нем прописано вне функций, вычисляется до запуска функции.
  • 1

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#18 vitaliy4us

vitaliy4us

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

  • Members
  • PipPip
  • 81 сообщений

Отправлено 09 апреля 2012 - 14:02

Только что проверил, Rebz прав: даже если не подключать модуль, то все, что в нем прописано вне функций, вычисляется до запуска функции.

До запуска функции не связанного с ним скрипта? И это никак не регулируется в настройках?
  • 0

#19 Dmitry N

Dmitry N

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 10 апреля 2012 - 06:06

Это поведение движка JScript и изменить его нельзя.

Мне кажется, вы заморачиваетесь. Пользуйтесь Name Mapping'ом - он удобнее, гибче и эффективнее. Если его правильно настроить, конечно - вы же не обязаны использовать тот Name Mapping, что создаётся автоматически. Могу вот порекомендовать приличное видео, показывающее адвансед фичи Name Mapping'а.
  • 1
С уважением,
Дмитрий


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

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