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

Фотография

QTP 10 - как пройти тест н-е количество раз?


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

#1 piersto

piersto

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

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Pierre Stoiko

Отправлено 07 июля 2011 - 23:26

Скажем есть скрипт:

Window("Program Manager").WinListView("SysListView32").Activate "AlReader2.exe"
Window("AlReader2").WinMenu("Menu").Select "File;Open"
Window("AlReader2").Dialog("Open File").Close
Window("AlReader2").Close

Открыл прогу, нажал на кнопку файл - опен - открылось окно- закрыл его - закрыл прогу.
С помощью GO ... LOOP QTP будет проходить этот скрипт, пока не остановлю.
А можно узнать, сколько раз QTP пробежала скрипт?
Спасибо.

PS Название темы не совсем верное, так как с одним вопросом разобрался сам.
  • 0

#2 tab15

tab15

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

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

Отправлено 08 июля 2011 - 07:33

Можно просто добавить переменную, которая при каждом прохождении цикла будет увеличиваться на 1, а в конце ее в репорт записать.
i = 0
do
  ...
  i = i + 1
loop
Reporter.ReportEvent MicDone, "Столько раз", i
(c синтаксисом могу напутать давно в qtp не работал)
  • 0

#3 ch_ip

ch_ip

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

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 08 июля 2011 - 08:12

Самое простое - обернуть все в самостоятельный цикл.
Dim i
For i=0 to 9
  Reporter.ReportEvent 4, "Iteration number  = " & Cstr(i+1), ""
  '------------'
  'Here code to run in cycle should be placed'
  '------------'
Next

Бесконечные циклы не есть хорошо. Если хотите, чтобы выполнялся долго, пока не прервете, лучше написать цикл с выходом по таймауту, вдруг QTP не отреагирует на break?
Public Function TimerEx
    TimerEx = CDbl(Date) * 86400 + Timer()
End Function

Dim timeout, start_time
timeout = 3600  'seconds in 1 hour'

start_time = TimerEx
Do
  Reporter.ReportEvent 4, "Iteration number  = " & Cstr(i+1), ""
  '------------'
  'Here code to run in cycle should be placed'
  '------------'
Loop While Timer < start_time + timeout

  • 0

#4 ch_ip

ch_ip

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

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 08 июля 2011 - 08:16

Можно просто добавить переменную, которая при каждом прохождении цикла будет увеличиваться на 1, а в конце ее в репорт записать.

i = 0
do
  ...
  i = i + 1
loop
Reporter.ReportEvent MicDone, "Столько раз", i
(c синтаксисом могу напутать давно в qtp не работал)

Так не получится, потому что бесконечный цикл написан, а выход из него будет осуществляться через остановку скрипта, поэтому до отправки сообщения в лог дело никогда не дойдет
  • 0

#5 Zenturio

Zenturio

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

  • Members
  • PipPipPipPip
  • 386 сообщений
  • ФИО:Дмитрий
  • Город:Смоленск - Москва


Отправлено 08 июля 2011 - 09:33

Скажем есть скрипт:

Window("Program Manager").WinListView("SysListView32").Activate "AlReader2.exe"
Window("AlReader2").WinMenu("Menu").Select "File;Open"
Window("AlReader2").Dialog("Open File").Close
Window("AlReader2").Close

Открыл прогу, нажал на кнопку файл - опен - открылось окно- закрыл его - закрыл прогу.
С помощью GO ... LOOP QTP будет проходить этот скрипт, пока не остановлю.
А можно узнать, сколько раз QTP пробежала скрипт?
Спасибо.

PS Название темы не совсем верное, так как с одним вопросом разобрался сам.


Зачем делать цикл, сделайте Action и запускайте ее сколько угодно раз.
  • 0

#6 ch_ip

ch_ip

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

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 08 июля 2011 - 09:45

Зачем делать цикл, сделайте Action и запускайте ее сколько угодно раз.

Чтобы запустить сценарий произвольное количество раз все равно придется писать цикл :)
Ибо зацикливание сценариев, по умолчанию, предусмотренное в QTP, завязано на количество заполненных строк в DataTable. Не вижу смысла для такой просто операции создавать фейковые параметры с тучей пустых строчек.
  • 0

#7 tab15

tab15

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

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

Отправлено 10 июля 2011 - 12:16

Так не получится, потому что бесконечный цикл написан, а выход из него будет осуществляться через остановку скрипта, поэтому до отправки сообщения в лог дело никогда не дойдет

Это понятно:) У топикстартера, насколько я понимаю, уже есть условия остановки скрипта. Ему нужно просто узнать сколько раз этот самый скрипт пробежит.
  • 0

#8 ch_ip

ch_ip

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

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 11 июля 2011 - 12:17

Это понятно:) У топикстартера, насколько я понимаю, уже есть условия остановки скрипта. Ему нужно просто узнать сколько раз этот самый скрипт пробежит.

Топикстартер вообще куда-то пропал...
  • 0

#9 iFomin

iFomin

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

  • Members
  • Pip
  • 51 сообщений
  • ФИО:4min Il
  • Город:мск


Отправлено 18 июля 2011 - 21:53

Тут очень много простых способов:
1) Устанавливать на каждой итерации переменную окружения Windows
2) Писать счетчик в лог или в (первую строку) DataTable на каждой операции
3) Определить другое условие выхода из цикла (например, состояние переменной окружения)
4) На попробовать - создать глобальный объект, в нем хранить счетчик, а в деструкторе записывать этот счетчик в лог, или показывать message box. Не уверен, что в QTP сработает.

Если хочется к пунтам 1/2 добавить дополнительной автоматизации, можно запускать QTP-сессию через COM, тогда сможете перехватить момент остановки теста по любому условию и выполнить дальше произвольный код.
  • 0

#10 ch_ip

ch_ip

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

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 19 июля 2011 - 12:39

4) На попробовать - создать глобальный объект, в нем хранить счетчик, а в деструкторе записывать этот счетчик в лог, или показывать message box. Не уверен, что в QTP сработает.

Отлично работает. Мы на этом построили вывод стектрейса в логи
  • 0

#11 iFomin

iFomin

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

  • Members
  • Pip
  • 51 сообщений
  • ФИО:4min Il
  • Город:мск


Отправлено 27 июля 2011 - 18:44


4) На попробовать - создать глобальный объект, в нем хранить счетчик, а в деструкторе записывать этот счетчик в лог, или показывать message box. Не уверен, что в QTP сработает.

Отлично работает. Мы на этом построили вывод стектрейса в логи

Хм, а вот интересно, как вы стектрейсы собираете? Переопределяете RunAction, в методы вставляете маркеры? Или я о каких-то других стектрейсах думаю..
  • 0

#12 ch_ip

ch_ip

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

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 28 июля 2011 - 19:21



4) На попробовать - создать глобальный объект, в нем хранить счетчик, а в деструкторе записывать этот счетчик в лог, или показывать message box. Не уверен, что в QTP сработает.

Отлично работает. Мы на этом построили вывод стектрейса в логи

Хм, а вот интересно, как вы стектрейсы собираете? Переопределяете RunAction, в методы вставляете маркеры? Или я о каких-то других стектрейсах думаю..

У нас полный стектрейс именно кода без привязки к сценариям, потому что
1) мы слабо использовали сценарии. Предпочитали все выносить в библиотеки и работать непосредственно с кодом
2) Тяжело отследить сценарии и сделать иерархию в собственном логе такую же, как в родном qtp-шном логе. Хотя, мне сейчас в голову пришла мысль, что трейс сценариев можно точно так же через terminate объектов отслеживать, просто мы этой целью раньше не задавались, поэтому и не попробовали

Реализован через вставку "маркеров" во все функции - в начале кода каждой функции идет вызов функции, которая добавляет всю информацию о вызванной функции в трейс-хеш (имя функции, имена параметров и их значения; уровень, на котором была вызвана функция, считается автоматически). Когда случается любая ошибка или фейл проверки в лог автоматом выводится содержимое трейс-хеша
Для некоторых мелких функций, которые часто вызываются в цикле много тысяч раз сделано исключение, и их вызовы в трейс не попадают

RunAction, кажется, нельзя переопределить. Если знаете, как это сделать, очень прошу поделиться этим ноу-хау.

P.S. Кажется, пора выносить в отдельную тему обсуждение организации стек-трейса в QTP
  • 0


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

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