QTP - Краткое руководство

QTP означает QuickTстандартное восточное время Pпрофессиональный, продукт HEwlett PАкард (HP). Этот инструмент помогает тестировщикам без проблем выполнять автоматическое функциональное тестирование после завершения разработки скрипта.

HP QTP использует Visual Basic Scripting (VBScript)для автоматизации приложений. Механизм сценариев не нужно устанавливать отдельно, поскольку он доступен как часть ОС Windows. Текущая версия VBScript - 5.8, которая доступна как часть Win 7. VBScript - НЕ объектно-ориентированный язык, а объектно-ориентированный язык.

Инструменты тестирования

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

Классификация инструментов

Инструменты можно классифицировать по нескольким параметрам. Он включает -

  • Назначение инструмента
  • Действия, которые поддерживаются в инструменте
  • Тип / уровень тестирования, который он поддерживает.
  • Вид лицензирования (open source, freeware, коммерческое)
  • Используемая технология

Типы инструментов

Sr.No. Тип инструмента Используется для Использован
1 Инструмент управления тестированием Управление тестированием, планирование, регистрация дефектов, отслеживание и анализ. Тестеры
2 Инструмент управления конфигурацией Для реализации, исполнения, отслеживания изменений Все члены команды
3 Инструменты статического анализа Статическое тестирование Разработчики
4 Инструменты для подготовки тестовых данных Анализ и дизайн, Генерация тестовых данных Тестеры
5 Инструменты выполнения тестов Реализация, исполнение Тестеры
6 Тестовые компараторы Сравнение ожидаемых и фактических результатов Все члены команды
7 Инструменты измерения покрытия Обеспечивает структурное покрытие Разработчики
8 Инструменты тестирования производительности Мониторинг работоспособности, время отклика Тестеры
9 Инструменты планирования и отслеживания проектов Для планирования Руководители проекта
10 Инструменты управления инцидентами Для управления тестами Тестеры

Где подходит QTP?

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

QTP - История и эволюция

HP Quick Test Professional изначально принадлежала Mercury Interactive и была приобретена HP. Его первоначальное название было Astra Quick Test, а позже было названо Quick Test Professional, но последняя версия известна как Unified Functional Tester (UFT).

История версий

Теперь давайте посмотрим на историю версий QTP.

Версии Сроки
Astra Quick Test v1.0 - v5.5 - Mercury Interactive С мая 1998 г. по август 2001 г.
QuickTest Professional v6.5 - v9.0 - Mercury Interactive С сентября 2003 г. по апрель 2006 г.
Hp-QuickTest Professional v9.1 - v11.0 - приобретено и выпущено HP С февраля 2007 г. по сентябрь 2010 г.
Hp-Unified Functional Testing v11.5 - v11.53 С 2012 по ноя 2013

Преимущества

  • Разработка автоматических тестов с использованием VBScript не требует высококвалифицированного программиста и относительно проста по сравнению с другими объектно-ориентированными языками программирования.

  • Простота использования, удобство навигации, проверки результатов и создания отчетов.

  • Легко интегрируется с инструментом управления тестированием (Hp-Quality Center), который упрощает планирование и мониторинг.

  • Также может использоваться для тестирования мобильных приложений.

  • Поскольку это продукт HP, HP и ее форумы предоставляют полную поддержку для решения технических проблем.

Недостатки

  • В отличие от Selenium, QTP работает только в операционной системе Windows.

  • Поддерживаются не все версии браузеров, и тестировщикам необходимо дождаться выпуска патча для каждой из основных версий.

  • Сказав, что это коммерческий инструмент, стоимость лицензирования очень высока.

  • Несмотря на то, что время написания сценариев меньше, время выполнения относительно выше, поскольку это увеличивает нагрузку на ЦП и оперативную память.

Для любого автоматизированного внедрения инструмента, следующие этапы / этапы его. Каждый из этапов соответствует определенной деятельности, и каждая фаза имеет определенный результат.

  • Test Automation Feasibility Analysis- Первый шаг - проверить, можно ли автоматизировать приложение. Не все приложения можно автоматизировать из-за его ограничений.

  • Appropriate Tool Selection- Следующим по важности этапом является выбор инструментов. Это зависит от технологии, в которой создано приложение, его функций и использования.

  • Evaluate the suitable framework- После выбора инструмента следующим шагом будет выбор подходящей структуры. Существуют различные виды фреймворков, и каждый из них имеет свое значение. Подробнее о фреймворках мы поговорим позже в этом руководстве.

  • Build Proof of Concept- Proof of Concept (POC) разработан со сквозным сценарием для оценки того, может ли инструмент поддерживать автоматизацию приложения. Он выполняется по сквозному сценарию, который гарантирует автоматизацию основных функций.

  • Develop Automation Framework- После построения POC выполняется разработка фреймворка, что является решающим шагом для успеха любого проекта автоматизации тестирования. Фреймворк должен быть построен после тщательного анализа технологии, используемой приложением, а также его основных функций.

  • Develop Test Script, Execute, and Analyze- После завершения разработки сценария сценарии выполняются, результаты анализируются, а дефекты регистрируются, если таковые имеются. Сценарии тестирования обычно контролируются версиями.

QTP - это коммерческий инструмент, и пробную версию можно загрузить напрямую с сайта HP. Для загрузки доступна только текущая версия - Единое функциональное тестирование (11.5x). Ниже приведен URL-адрес, по которому можно загрузить пробную версию.

URL-адрес загрузки - QTP

Процесс установки

Step 1 - Щелкните ссылку «Пробные и демонстрационные версии» и выберите «HP Unified Functional Testing 11.50 CC English SW E-Media Evaluation», как показано ниже -

Step 2- После выбора «HP Unified Functional Testing 11.50» открывается мастер загрузки. Заполните Личные данные и нажмите Далее.

Step 3 - Прочтите «Условия использования» и нажмите «ДАЛЕЕ».

Step 4- Откроется окно загрузки. Теперь нажмите кнопку «Загрузить».

Step 5- Загруженный файл будет в формате .RAR. Теперь вам нужно распаковать архив, и содержимое папки будет таким, как показано ниже, и выполнить Setup.exe.

Step 6 - После запуска установочного файла для установки выберите «Unified Functional Testing Set up» из списка, как показано ниже -

Step 7 - Затем нажмите «Далее», чтобы продолжить.

Step 8- В окне пользовательской настройки выберите плагины, которые необходимы для вашей автоматизации, т.е. вы должны выбрать плагины на основе технологии вашего тестируемого приложения. Например, если ваше приложение основано на .NET, убедитесь, что вы выбрали .NET.

Step 9- После выбора необходимых плагинов для установки нажмите Далее. После завершения установки вы увидите окно кнопки «Готово».

Step 10- После завершения установки откроется диалоговое окно «Дополнительные требования для установки». Выберите в списке все, кроме «Запуск мастера установки лицензии» и нажмите «ЗАПУСТИТЬ». Нам НЕ НУЖНО выбирать «Запустить мастер установки лицензии», потому что мы устанавливаем пробную версию, которая по умолчанию дает лицензию на 30 дней.

Step 11- После выполнения дополнительных требований к установке отображается галочка, которая, в свою очередь, означает, что компоненты установлены успешно. Теперь нажмите "Закрыть".

Запуск UFT и страницы надстроек

Step 1 - После установки приложение можно запустить из меню «Пуск», как показано на рисунке.

Step 2- Откроется страница лицензии. Вы можете нажать «Продолжить», поскольку мы установили пробную лицензию.

Step 3 - Откроется диалоговое окно надстроек, в котором пользователь может выбрать необходимые надстройки.

Note - Не загружайте все надстройки, а только необходимые надстройки и нажмите OK.

Step 4 - После загрузки необходимых надстроек для пользователя открывается инструмент UFT 11.5, и первый взгляд на UFT выглядит, как показано ниже -

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

Шаги для записи и воспроизведения следующие:

Step 1 - Нажмите «Новый» тест на стартовой странице, как показано ниже -

Step 2- При нажатии на ссылку «Новый» открывается новое окно теста, в котором пользователю необходимо выбрать тип теста. Выберите «GUI Test», дайте имя тесту и место, где его нужно сохранить.

Step 3- После создания нового теста открывается экран нового теста, как показано ниже. Теперь щелкните вкладку «Action1», которая по умолчанию создана с 1 действием.

Step 4 - Щелкните меню «Запись» и выберите «Настройки записи и запуска», как показано ниже -

Step 5- Откроется диалоговое окно «Параметры записи и запуска», в котором в зависимости от типа приложения можно выбрать веб-приложения, приложения Java или Windows. Например, здесь мы запишем веб-приложение (http://easycalculation.com/).

Step 6- Щелкните Запись. Internet Explorer открывается автоматически с веб-адресом.https://www.easycalculation.com/согласно настройкам. Щелкните ссылку «Числа» в разделе «Алгебра», введите число и нажмите «Рассчитать». После завершения действия нажмите кнопку «Стоп» на панели записи. Вы заметите, что сценарий создается, как показано ниже -

Step 7- Теперь воспроизведите сценарий, нажав кнопку воспроизведения. Скрипт воспроизводится, и отображается результат.

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

Значение записи и воспроизведения

  • Он используется в качестве метода предварительного расследования, чтобы проверить, может ли UFT поддерживать технологию / приложение.

  • Используется для создания теста базовой функциональности приложения или функции, не требующей длительного обслуживания.

  • Его можно использовать для записи как движений мыши, так и ввода с клавиатуры.

Режимы записи

  • Normal Recording - Это режим записи по умолчанию, в котором записываются объекты и операции, выполняемые в тестируемом приложении.

  • Analog Recording - Это записывает не только действия клавиатуры, но и движения мыши относительно экрана или окна приложения.

  • Low-Level Recording- При этом записываются точные координаты объектов независимо от того, распознает ли UFT объект или НЕТ. Он просто записывает координаты, поэтому НЕ записывает движения мыши.

  • Insight Recording - UFT записывает операции, основываясь на их внешнем виде, а не на их собственных свойствах.

Как выбрать режимы записи

После нажатия кнопки «Запись» пользователь может выбрать режим записи на панели записи, которая появляется на экране после начала записи. Выбор можно сделать из любого из рассмотренных выше.

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

  • Запустить IE - https://www.easycalculation.com/
  • Нажмите «Числа» в разделе «Алгебра».
  • Щелкните ссылку "Квадратный корень"
  • Введите значение для вычисления квадратного корня. Скажем 10
  • Нажмите "Рассчитать"

Сценарий, записанный в режимах записи по умолчанию, аналогового и низкого уровня, приведен ниже -

' DEFAULT RECORDING MODE 
Browser("Free Online Math Calculator").Page("Free Online Math 
Calculator").Link("Numbers").Click 

Browser("Free Online Math Calculator").Page("Numbers Calculator - 
Math").Link("Square Root").Click 

Browser("Free Online Math Calculator").Page("Square Root 
Calculator").WebEdit("n").Set "10" 

Browser("Free Online Math Calculator").Page("Square Root 
Calculator").WebButton("calculate").Click 

' ANALOG RECORDING MODE 
Desktop.RunAnalog "Track1" 

' LOW LEVEL RECORDING MODE 
Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Click 
235,395 

Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Click 
509,391 

Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Click 
780,631 

Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Type 
"10" 

Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Click 
757,666

Записи с использованием режима записи Insight будут такими, как показано ниже -

Репозиторий объектов

Репозиторий объектов - это набор объектов и свойств, с помощью которых QTP сможет распознавать объекты и воздействовать на них. Когда пользователь записывает тест, объекты и их свойства фиксируются по умолчанию. Без понимания объектов и их свойств QTP НЕ сможет воспроизводить сценарии.

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

Sr.No. Тема и описание
1 Object Spy и его особенности

Чтобы понять использование объекта-шпиона и связанных с ним функций.

2 Работа с репозиторием объектов

Добавление, редактирование, удаление объектов из репозитория объектов и связанных с ним функций.

3 Типы репозитория объектов

Имеет дело с общими объектами и локальным репозиторием объектов и их контекстом в отношении сценариев.

4 Пользовательские объекты

Имеет дело с обстоятельствами использования объектов, определенных пользователем.

5 Репозиторий объектов в XML

Имеет дело с преобразованием OR в XML и использованием объекта Repository как XML.

6 Сравнение и объединение ИЛИ

Такие операции, как «Сравнить ИЛИ», «Объединить ИЛИ» для эффективной работы с репозиторием объектов.

7 Порядковые идентификаторы

Обстоятельства использования порядковых идентификаторов и их преимущества.

8 Дочерние объекты

Использование дочерних объектов для эффективного написания сценариев

Действия помогают тестировщикам разбивать скрипты на группы операторов QTP. Действия аналогичны функциям в VBScript; однако есть несколько отличий. По умолчанию QTP создает тест с одним действием.

Действия Функции
Действие - это встроенная функция QTP. Функции VBScript поддерживаются как VBScript, так и QTP.
Параметры действий передаются только по значению. Параметры функции передаются либо по значению, либо по ссылке.
Действия имеют расширение .mts Функции сохраняются как .vbs или .qfl
Действия могут быть повторно использованы, а могут и не использоваться. Функции всегда можно использовать повторно.

К свойствам действия можно получить доступ, щелкнув правой кнопкой мыши в окне редактора скриптов и выбрав «Свойства».

Свойства действия содержат следующую информацию -

  • Название действия
  • Location
  • Многоразовый флаг
  • Входные параметры
  • Выходные параметры

Типы действий

Есть три типа действий -

  • Non-reusable action - Действие, которое может быть вызвано только в том конкретном тесте, в котором оно было разработано, и может быть вызвано только один раз.

  • Reusable action - Действие, которое можно вызывать несколько раз, любой тест, в котором оно находится, а также может использоваться любыми другими тестами.

  • External Reusable action- Это многократно используемое действие, сохраненное в другом тесте. Внешние действия доступны только для чтения в вызывающем тесте, но его можно использовать локально с редактируемой копией информации таблицы данных для внешнего действия.

Работа с действиями

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

Sr.No. Тип действия и описание
1 Вставить призыв к новому действию

Вставляет новое действие из существующего действия

2 Вставить призыв к копии действия

Вставляет копию существующего действия

3 Вставить призыв к существующему действию

Вставляет призыв к существующему действию многократного использования

DataTable, аналогичный Microsoft Excel, помогает тестировщикам создавать управляемые данными тестовые примеры, которые можно использовать для многократного выполнения действия. Есть два типа таблиц данных -

  • Local DataTable - Каждое действие имеет свою собственную частную таблицу данных, также известную как локальная таблица данных, к которой также можно получить доступ через действия.

  • Global DataTable - Каждый тест имеет одну общую таблицу данных, доступную для всех действий.

Доступ к таблице данных можно получить на вкладке «Данные» QTP, как показано ниже -

Чтобы выполнить тестовый пример для определенного количества итераций, можно установить итерации глобальной таблицы данных в диалоговом окне настроек теста, к которому можно получить доступ, используя Файл → Настройки → Выполнить (вкладка), как показано ниже -

пример

Например, если пользователь хочет параметризовать "сложный интерес" http://easycalculation.com/ к которому можно получить доступ, используя http://easycalculation.com/compound-interest.php. Параметры могут быть созданы, как показано ниже. Большинство функций Excel можно использовать и в таблице данных.

DataTable Операции

Существует три типа объектов для доступа к DataTable. Операции DataTable можно хорошо понять, пройдя через следующее:

Sr.No. Тип и описание объекта
1 Методы таблиц данных

Предоставляет подробную информацию о методах таблицы данных.

2 Методы объекта DTParameter

Предоставляет подробную информацию о методах DTParameter.

3 Методы объекта DTSheet

Предоставляет подробную информацию о методах DTSheet.

Контрольные точки, как следует из названия, относятся к точке проверки, которая сравнивает текущее значение указанных свойств или текущее состояние объекта с ожидаемым значением, которое может быть вставлено в любой момент времени в скрипте.

Типы контрольно-пропускных пунктов

Sr.No. Тип и описание
1

Standard Checkpoint

Проверяет значения свойств объекта в тестируемом приложении и поддерживается всеми средами надстроек.

2

Bitmap Checkpoint

Проверяет область вашего приложения как растровое изображение

3

File Content Checkpoint

Проверяет текст в динамически сгенерированном или доступном файле, таком как .txt, .pdf.

4

Table Checkpoint

Проверяет информацию в таблице. Поддерживаются не все среды.

5

Text Checkpoint

Проверьте, соответствует ли текст, отображаемый в определенной области в приложении Windows, указанным критериям.

6

Text Area Checkpoint

Проверяет, отображается ли текстовая строка в определенной области в приложении Windows в соответствии с указанными критериями.

7

Accessibility Checkpoint

Проверяет страницу и сообщает об областях веб-сайта, которые могут не соответствовать Рекомендациям Консорциума World Wide Web (W3C) по доступности веб-контента.

8

Page Checkpoint

Проверяет характеристики веб-страницы. Он также может проверять неработающие ссылки.

9

Database Checkpoint

Проверяет содержимое базы данных, к которой обращается тестируемое приложение.

10

XML Checkpoint

Проверяет содержимое XML-документов или XML-документов на веб-страницах и фреймах.

Вставка контрольной точки

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

Ниже приводится меню контрольной точки, когда пользователь НЕ находится в режиме записи.

Ниже приведено меню контрольной точки, когда пользователь находится в режиме записи.

пример

Контрольные точки добавлены для тестируемого приложения - "http://easycalculation.com/"

' 1. Inserted Standard Checkpoint
Status = Browser("Math Calculator").Page("Math 
   Calculator").Link("Numbers").Check CheckPoint("Numbers")

If Status Then
   print "Checkpoint Passed"
Else
   Print "Checkpoint Failed"
End if

' 2. Inserted BitMap Checkpoint
imgchkpoint = Browser("Math Calculator").Page("Math 
   Calculator").Image("French").Check CheckPoint("French")

If imgchkpoint Then
   print "Checkpoint Passed"
Else
   Print "Checkpoint Failed"
End if

Просмотр свойств контрольной точки

После вставки, если тестировщик хочет изменить значения, мы можем сделать это, щелкнув правой кнопкой мыши по ключевому слову «контрольная точка» скрипта и перейдя к «Свойства контрольной точки», как показано ниже -

Вы также можете найти те же контрольные точки в репозитории объектов, как показано ниже. Он точно показывает, какой тип контрольной точки используется, каковы ожидаемые значения и значения времени ожидания.

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

Например, нажатие на ссылку может загрузить страницу за 1 секунду, иногда за 5 секунд или даже за 10 секунд, чтобы загрузить ее полностью. Это зависит от различных факторов, таких как время отклика сервера приложений, пропускная способность сети и возможности клиентской системы.

Если время меняется, сценарий завершится ошибкой, если тестер не обработает эти различия во времени разумно.

Способы вставки точки синхронизации

  • WaitProperty
  • Exist
  • Wait
  • Синхронизация (только для веб-приложений)
  • Вставка встроенных точек синхронизации QTP.

Допустим, нам нужно вставить точку синхронизации между нажатием на ссылку «числа» и щелчком на «простом калькуляторе процентов» на сайте www.easycalculation.com . Теперь мы рассмотрим все пять способов вставить точку синхронизации для описанного выше сценария.

Метод 1 - WaitProperty

WaitProperty - это метод, который принимает имя свойства, значение и значение тайм-аута в качестве входных данных для выполнения синхронизации. Это динамическое ожидание, поэтому этот вариант рекомендуется.

' Method 1 - WaitProperty with 25 seconds
Dim obj
Set obj = Browser("Math Calculator").Page("Math Calculator")
obj.Link("Numbers").Click

obj.Link("Simple Interest").WaitProperty "text", "Simple Interest",25000
obj.Link("Simple Interest").Click

Метод 2 - Существуют

Exist - это метод, который принимает значение тайм-аута в качестве входных данных для выполнения синхронизации. Опять же, это динамическое ожидание, поэтому этот вариант рекомендуется.

' Method 2 : Exist Timeout - 30 Seconds
Dim obj
Set obj = Browser("Math Calculator").Page("Math Calculator")
obj.Link("Numbers").Click

If obj.Link("Simple Interest").Exist(30) Then
   obj.Link("Simple Interest").Click

Else
   Print "Link NOT Available"
End IF

Метод 3 - Подождите

Ожидание - это жестко запрограммированная точка синхронизации, которая ожидает независимо от того, произошло ли событие или нет. Следовательно, использование Wait не рекомендуется и может использоваться для более короткого времени ожидания, такого как 1 или 2 секунды.

' Method 3 : Wait Timeout - 30 Seconds
Dim obj
Set obj = Browser("Math Calculator").Page("Math Calculator")
obj.Link("Numbers").Click
wait(30)
Browser("Math Calculator").Page("Math Calculator").Link("Simple Interest").Click

Метод 4 - метод синхронизации

Метод синхронизации можно использовать только для веб-приложений, в которых всегда есть задержка между загрузками страниц.

' Method 4 : 
Dim obj
Set obj = Browser("Math Calculator").Page("Math Calculator")
obj.Link("Numbers").Click

Browser("Math Calculator").Sync
Browser("Math Calculator").Page("Math Calculator").Link("Simple Interest").Click

Метод 5 - Вставка встроенных точек синхронизации QTP

Step 1- Войдите в режим записи. Эта опция будет отключена, если пользователь НЕ находится в режиме записи.

Step 2 - Зайдите в «Дизайн» → «Точка синхронизации».

Step 3- Нам нужно выбрать объект, который мы хотим быть точкой синхронизации. После выбора объекта открывается окно объекта, как показано ниже -

Step 4- Нажмите ОК; откроется «Окно добавления синхронизации». Выберите свойство, значение и значение тайм-аута и нажмите ОК, как показано ниже -

Step 5 - Скрипт будет сгенерирован, как показано ниже, что такое же, как у свойства WaitProperty (метод 1), которое мы уже обсуждали -

Browser("Math Calculator").Page("Math Calculator").Link("Numbers").Click

Browser("Math Calculator").Page("Math Calculator").Link("Simple 
   Interest").WaitProperty "text", "Simple Interest", 10000

Синхронизация по умолчанию

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

Перейдите к «Файл» >> «Настройки» >> Вкладка «Выполнить» >> Время ожидания синхронизации объекта, как показано ниже.

Иногда QTP не может найти какой-либо объект, который соответствует распознанному описанию объекта, или он может найти более одного объекта, который соответствует описанию, тогда QTP игнорирует распознанное описание и использует механизм интеллектуальной идентификации для распознавания объекта.

Интеллектуальная идентификация QTP использует два типа свойств:

  • Base Filter Properties - Основные свойства определенного класса тестовых объектов, значения которых нельзя изменить без изменения сути исходного объекта.

  • Optional Filter Properties - Другие свойства также помогают идентифицировать объекты определенного класса, свойства которых вряд ли будут часто меняться, но их можно игнорировать, если они больше не применимы.

Включение интеллектуальной идентификации для объекта

Step 1- Перейдите в «Инструменты» → «Идентификация объекта». Откроется диалоговое окно «Идентификация объекта».

Step 2 - Выберите среду, класс объекта и включите «Включить интеллектуальную идентификацию», как показано ниже -

Step 3 - Нажмите «Настроить» и выберите базовые и дополнительные свойства фильтра.

Step 4- Добавьте свойства в базовые свойства помимо свойства по умолчанию, а также добавьте / удалите дополнительные свойства фильтра. Обратите внимание, что одни и те же свойства не могут быть частью обязательных и вспомогательных свойств, и нажмите «ОК».

Step 5- Убедитесь, что интеллектуальная идентификация включена после добавления объекта этого типа в репозиторий объектов. Для интеллектуальной идентификации установлено значение ИСТИНА. Мы также можем сделать его ложным, если не хотим включать интеллектуальную идентификацию.

Step 6 - Мы даже можем отключить тестовый уровень, применив его на уровне тестового сценария в разделе «Настройки» меню «Файл», как показано ниже -

Step 7 - Если интеллектуальная идентификация отключена в соответствии с Шагом № 6, тогда она не будет применять интеллектуальную идентификацию для любого объекта во время выполнения скрипта.

Step 8 - В случае добавления объектов с умной идентификацией как «Выкл.» QTP не будет использовать умную идентификацию для распознавания в будущем, даже если мы включили ее позже.

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

Существуют различные способы выполнения отладки с использованием точек останова в QTP. Точки останова можно вставить, просто нажав «F9» или используя пункт меню «Выполнить» → «Вставка / удаление точки останова».

После вставки точки останова «красная» точка и линия будут выделены КРАСНЫМ цветом, как показано ниже -

Метод ShortCut Описание
Шаг в F11 Используется для выполнения каждого шага. Переходит в функцию / действие и выполняется строка за строкой. Он останавливается на каждой строке после выполнения.
Переступить F10 Используется для перехода через функцию. Step Over запускает только текущий шаг в активном документе.
Выйти Shift + F11 После входа в функцию вы можете использовать команду «Выйти». Step Out продолжает выполнение до конца функции, а затем приостанавливает сеанс выполнения на следующей строке.

Параметры в точке останова

Доступ к различным параметрам точки останова можно получить, перемещаясь по меню «Выполнить».

Sr.No. ShortCut и описание
1

F9

Вставить / удалить точку останова

2

Ctrl+F9

Включить / отключить точку останова

3

Ctrl+Shift+F9

Очистить все точки останова

4

Use Only Menu

Включить / отключить все точки останова

Панель отладки

Ниже приведены панели в окне отладки -

  • Output - На этой вкладке отображается весь вывод отчетов для печати.

  • Watch - На этой вкладке отображается логический вывод данного выражения.

  • LocalVariables - На этой вкладке отображается вывод локальных переменных.

пример

Панель просмотра показывает выходное выражение, как показано ниже -

Панель локальных переменных показывает значения, содержащиеся в локальных переменных, как показано ниже -

В QTP есть различные способы обработки ошибок. Есть три возможных типа ошибок, с которыми можно столкнуться при работе с QTP. Они -

  • Ошибки синтаксиса
  • Логические ошибки
  • Ошибки времени выполнения

Типы ошибок

Ошибки синтаксиса

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

Чтобы проверить синтаксис, используйте сочетание клавиш Ctrl + F7, и результат отобразится, как показано ниже. Если окно не отображается, можно перейти к «Просмотр» → «Ошибки».

Логические ошибки

Если сценарий синтаксически правильный, но дает неожиданные результаты, это называется логической ошибкой. Логическая ошибка обычно не прерывает выполнение, но дает неверные результаты. Логические ошибки могут возникать из-за множества причин, а именно из-за неправильных предположений или непонимания требований, а иногда и из-за неправильной логики программы (с использованием do-while вместо do-until) или бесконечных циклов.

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

Ошибки времени выполнения

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

  • Файл НЕ найден, но сценарий пытается прочитать файл.
  • Объект НЕ найден, но сценарий пытается воздействовать на этот конкретный объект
  • Деление числа на ноль
  • Индекс массива выходит за границы при доступе к элементам массива

Обработка ошибок времени выполнения

Есть разные способы обработки ошибок в коде.

1. Using Test Settings- Обработку ошибок можно определить в настройках теста, перейдя на вкладку «Файл» >> «Настройки» >> «Выполнить», как показано ниже. Мы можем выбрать любую из указанных настроек и нажать «ОК».

2. Using On Error Statement - Оператор «On Error» используется для уведомления движка VBScript о намерениях обработать ошибки времени выполнения тестером, вместо того, чтобы позволить механизму VBScript отображать сообщения об ошибках, которые не являются удобными для пользователя.

  • On Error Resume Next - On Error Resume Next информирует механизм VBScript о необходимости обработки следующей строки кода при обнаружении ошибки.

  • On error Goto 0 - Это помогает тестировщикам отключить обработку ошибок.

3. Using Err Object - Объект ошибки - это встроенный объект в VBScript, который фиксирует номер ошибки времени выполнения и описание ошибки, с помощью которых мы можем легко отлаживать код.

  • Err.Number- Свойство Number возвращает или устанавливает числовое значение, указывающее на ошибку. Если значение Err.Number равно 0, значит, ошибок не было.

  • Err.Description - Свойство Description возвращает или устанавливает краткое описание ошибки.

  • Err.Clear - Метод Clear сбрасывает объект Err и очищает все предыдущие значения, связанные с ним.

пример

'Call  the function to Add two Numbers Call Addition(num1,num2) 

Function Addition(a,b)  
   On error resume next  
      If NOT IsNumeric(a) or IsNumeric(b) Then 
         Print "Error number is  " &  err.number & " and description is : 
            " &  err.description 
         Err.Clear 
         Exit Function 
      End If 
   Addition = a+b 

   'disables error handling  
   On Error Goto 0 
End function

4. Using Exit Statement- Операторы выхода могут использоваться вместе с объектом Err для выхода из теста, действия или итерации на основе значения Err.Number. Давайте подробно рассмотрим каждый из этих операторов Exit.

  • ExitTest - Выход из всего теста QTP, независимо от настроек итерации во время выполнения.

  • ExitAction - Выход из текущего действия.

  • ExitActionIteration - Выход из текущей итерации действия.

  • ExitTestIteration - Завершает текущую итерацию теста QTP и переходит к следующей итерации.

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

6. Reporter Object- Reporter Object помогает нам сообщить о событии в результаты запуска. Это помогает нам определить, успешно ли выполнено соответствующее действие / шаг.

'Syntax: Reporter.ReportEventEventStatus, ReportStepName, Details, 
[ImageFilePath] 

'Example 
Reporter.ReportEvent micFail, "Login", "User is unable to Login."

Сценарии восстановления

При выполнении сценариев QTP мы можем получить неожиданные ошибки. Чтобы восстановить тесты и продолжить выполнение остальной части сценария после этих неожиданных ошибок, используются сценарии восстановления. Доступ к диспетчеру сценария восстановления можно получить, перейдя в «Ресурсы» → Диспетчер сценария восстановления, как показано ниже -

Шаги по созданию сценария восстановления

Step 1- Нажмите кнопку «Новый» сценарий восстановления; Мастер сценария восстановления открывается, как показано ниже -

Step 2- Выберите триггерное событие. Это соответствует событию, которое может возникнуть в любом из следующих четырех событий -

  • Всплывающее окно
  • Состояние объекта
  • Ошибка тестового запуска
  • Сбой приложения

Step 3- Откроется окно операций восстановления. Операция восстановления может выполнять любую из следующих операций, как показано на снимке экрана ниже -

Step 4 - После указания соответствующей операции восстановления нам также необходимо указать операцию после восстановления, как показано ниже -

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

Step 6 - Создание сценария восстановления завершено, и его необходимо сопоставить с текущим тестом, отметив опцию «Добавить сценарий к текущему тесту» и щелкнув «Готово».

Step 7 - Добавленный сценарий восстановления будет таким, как показано ниже, и нажмите кнопку «Закрыть», чтобы продолжить.

Step 8- После нажатия кнопки «Закрыть» QTP предложит пользователю сохранить созданный сценарий восстановления. Он будет сохранен с расширением .qrs, и мастер закроется.

Проверка

Созданный сценарий восстановления теперь должен быть частью теста, и его можно проверить, перейдя в «Файл» → «Настройки» → вкладка «Восстановление».

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

Типы переменных среды

Built-in Environment Variables- предоставляет ряд параметров среды, которые могут предоставить такую ​​информацию, как имя теста, имя действия, путь тестирования, имя локального хоста, имя операционной системы, тип и ее версия. К именам переменных среды можно получить доступ, перейдя в «Файл» → «Настройки теста» → вкладка «Среда».

User defined Internal- Пользовательские переменные можно сохранить, выбрав «Пользовательские» в окне вкладки «Среда». Нажмите кнопку «+», чтобы ввести имя параметра и значение, как показано ниже -

User Defined External- Пользовательские переменные могут быть сохранены во внешнем файле в виде файла .xml и могут быть загружены в тест, как показано на рисунке ниже. Он также может быть загружен динамически во время выполнения, как описано ниже в одном из примеров.

Переменные среды - поддерживаемые методы

1. ExternalFileName Property- Возвращает имя загруженного файла переменных внешней среды, указанного на вкладке «Среда» диалогового окна «Параметры теста». Если файл переменных внешней среды не загружен, это свойство возвращает пустую строку.

x = Environment.ExternalFileName 
print x

2. LoadFromFile Method- Загружает указанный файл переменных среды (.xml) динамически во время выполнения. При использовании этого метода переменные среды не нужно добавлять вручную на вкладку «Среда».

Environment.LoadFromFile "D:\config.xml"
b = Environment.Value("Browser")
print b

3. Value Property- Извлекает значение переменных среды. Мы также можем установить значение определяемых пользователем внутренних переменных среды, используя это свойство.

' Get the Value of the InBuilt Environment Variables
a = Environment.Value("OS")
print a
b = Environment.Value("ActionName")
print b
  
'Loaded from External File
Environment.LoadFromFile "D:\config.xml"
c = Environment.Value("Browser")
print c

Чтобы сделать сценарий модульным, в сценарий QTP добавляются файлы библиотеки. Он содержит объявление переменных, функции, классы и т. Д. Они обеспечивают возможность многократного использования, которые могут использоваться во всех сценариях тестирования. Они сохраняются с расширением .vbs или .qfl.

Новый файл библиотеки можно создать, перейдя в «Файл» >> «Библиотека функций».

Связывание библиотек функций

Method 1- Используя «Файл»> «Настройки»> «Ресурсы»> «Связанная библиотека функций». Нажмите кнопку «+», чтобы добавить файл библиотеки функций и добавить его, используя фактический или относительный путь, как показано ниже -

Method 2 - Использование метода ExecuteFile.

'Syntax : ExecuteFile(Filepath)
ExecuteFile "C:\lib1.vbs" 
ExecuteFile "C:\lib2.vbs"

Method 3 - Использование метода LoadFunctionLibrary.

'Syntax : LoadFunctionLibrary(Filepath)
LoadFunctionLibrary "C:\lib1.vbs" 
LoadFunctionLibrary "C:\lib2.vbs"

Method 4- Объектная модель автоматизации (AOM) - это механизм, с помощью которого мы можем управлять различными операциями QTP вне QTP. Используя AOM, мы можем запустить QTP, открыть тест, ассоциировать библиотеки функций и т. Д. Следующий сценарий VbScript должен быть сохранен с расширением .vbs, и после его выполнения будет запущен QTP, и начнется выполнение теста. АОМ будет подробно обсуждаться в следующих главах.

'Launch QTP
Set objQTP = CreateObject("QuickTest.Application")
objQTP.Launch
objQTP.Visible = True
  
'Open the test
objQTP.Open "D:\GUITest2", False, False
Set objLib = objQTP.Test.Settings.Resources.Libraries
  
'Associate Function Library if NOT associated already.
If objLib.Find("C:\lib1.vbs") = -1 Then 
  objLib.Add "C:\lib1.vbs", 1 
End

Результаты теста

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

  • Шаги пройдены
  • Шаги не удалось
  • Параметры среды
  • Графическая статистика

Выполняемые операции в результатах тестирования

Преобразование результатов в HTML

В окне просмотра результатов перейдите к «Файл» → «Экспорт в файл». Откроется диалоговое окно «Экспорт результатов выполнения», как показано ниже -

Мы можем выбрать тип отчета для экспорта. Это могут быть краткие результаты, подробные результаты или даже выбор узлов. После выбора имени файла и его экспорта файл сохраняется как файл .HTML.

Фильтрация результатов

Результаты можно фильтровать по статусу, типу узла и итерациям. Доступ к нему можно получить, нажав кнопку «Фильтр» в «Окне результатов теста».

Возникновение дефектов

Дефекты могут быть зарегистрированы в QC непосредственно из панели окна результатов тестирования путем доступа к «Инструменты» → «Добавить дефект», которые открывают соединение с ALM, как показано ниже -

Результаты теста

Окно автоматических результатов тестирования можно настроить в «Инструменты» → «Параметры» → вкладка «Запуск сеансов». При необходимости мы можем выключить его, а также включить «Автоматически экспортировать результаты при завершении сеанса».

Снимок экрана или фильм можно записать в зависимости от настроек. То же самое можно настроить в «Инструменты» → «Параметры» → вкладка «Снимок экрана». Мы можем сохранить снимок экрана или фильмы на основе следующих трех условий:

  • За ошибки
  • Always
  • Для ошибок и предупреждений

Существуют различные объекты GUI, с которыми QTP взаимодействует во время выполнения скрипта. Следовательно, важно знать основные методы для ключевых объектов GUI, используя которые мы сможем эффективно работать с ним.

Работа с текстовым полем

Ниже приведены методы, с помощью которых мы получаем доступ к текстовому полю во время выполнения.

  • Set - Помогает тестировщику ввести значения в текстовое поле

  • Click - Нажимает на текстовое поле

  • SetSecure - Используется для надежной установки текста в полях пароля

  • WaitProperty - Ожидает, пока значение свойства не станет истинным

  • Exist - Проверяет наличие текстового поля

  • GetROProperty("text") - Получает значение текстового поля

  • GetROProperty("Visible") - Возвращает логическое значение, если оно отображается

пример

Browser("Math Calculator").Sync
Set Obj = Browser("Math Calculator").Page("SQR Calc").WebEdit("n")

'Clicks on the Text Box
Obj.Click

'Verify if the Object Exist - Returns Boolean value
a = obj.Exist
print a

'Set the value
obj.Set "10000" : wait(2)

'Get the Runtime Object Property - Value of the Text Box
val = obj.GetROProperty("value")
print val

'Get the Run Time Object Property - Visiblility - Returns Boolean Value
x = Obj.GetROProperty("visible")
print x

Работа с флажком

Ниже приведены некоторые из ключевых методов, с которыми можно работать с флажком.

  • Set - Помогает тестеру установить значение флажка "ВКЛ" или "ВЫКЛ"

  • Click- Щелкает по флажку. Даже проверки ВКЛ или ВЫКЛ, но пользователь не будет уверен в статусе

  • WaitProperty - Ожидает, пока значение свойства не станет истинным

  • Exist - Проверяет наличие флажка

  • GetROProperty("name") - Получает имя флажка

  • GetROProperty("Visible") - Возвращает логическое значение, если оно отображается

пример

'To Check the Check Box
Set Obj = Browser("Calculator").Page("Gmail").WebCheckBox("PersistentCookie")
Obj.Set "ON"

'To UnCheck the Check Box
Obj.Set "OFF"

'Verifies the Existance of the Check box and returns Boolean Value
val = Obj.Exist
print val

'Fetches the Name of the CheckBox
a = Obj.GetROProperty("name")
print a

'Verifies the visible property and returns the boolean value.
x = Obj.GetROProperty("visible")
print x

Работа с переключателем

Ниже приведены некоторые из ключевых методов, с помощью которых можно работать с Radio Button.

  • Select(RadioButtonName) - Помогает тестеру установить радиоблок "ВКЛ"

  • Click- Щелкает по переключателю. Даже радиокнопка включена или выключена, но тестер не может получить статус

  • WaitProperty - Ожидает, пока значение свойства не станет истинным

  • Exist - Проверяет наличие радиокнопки

  • GetROProperty("name") - Получает имя радиокнопки

  • GetROProperty("Visible") - Возвращает логическое значение, если оно отображается

пример

'Select the Radio Button by name "YES"
Set Obj = Browser("Calculator").Page("Forms").WebRadioGroup("group1")
Obj.Select("Yes")

'Verifies the Existance of the Radio Button and returns Boolean Value
val = Obj.Exist
print val

'Returns the Outerhtml of the Radio Button
txt = Obj.GetROProperty("outerhtml")
print text

'Returns the boolean value if Radio button is Visible.
vis = Obj.GetROProperty("visible")
print vis

Работа с Combo Box

Ниже приведены некоторые из ключевых методов, с помощью которых можно работать с Combo Box.

  • Select(Value) - Помогает тестеру выбрать значение из ComboBox

  • Click - Щелкает по объекту

  • WaitProperty - Ожидает, пока значение свойства не станет истинным

  • Exist - Проверяет наличие поля со списком

  • GetROProperty("Text") - Получает выбранное значение поля со списком

  • GetROProperty("all items") - Возвращает все элементы в поле со списком

  • GetROProperty("items count") - Возвращает количество элементов в поле со списком

пример

'Get the List of all the Items from the ComboBox
Set ObjList = Browser("Math Calculator").Page("Statistics").WebList("class")
x = ObjList.GetROProperty("all items")
print x

'Get the Number of Items from the Combo Box
y = ObjList.GetROProperty("items count")
print y

'Get the text value of the Selected Item
z = ObjList.GetROProperty("text")
print z

Работа с кнопками

Ниже приведены некоторые из ключевых методов, с помощью которых можно работать с кнопками.

  • Click - Нажимает на кнопку

  • WaitProperty - Ожидает, пока значение свойства не станет истинным

  • Exist - Проверяет наличие кнопки

  • GetROProperty("Name") - Получает имя кнопки

  • GetROProperty("Disabled") - Возвращает логическое значение, если включено / отключено

пример

'To Perform a Click on the Button
Set obj_Button = Browser("Math Calculator").Page("SQR").WebButton("Calc")
obj_Button.Click

'To Perform a Middle Click on the Button
obj_Button.MiddleClick

'To check if the button is enabled or disabled.Returns Boolean Value
x = obj_Button.GetROProperty("disabled")
print x

'To fetch the Name of the Button
y = obj_Button.GetROProperty("name")
print y

Работа с веб-таблицами

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

Sr.No. Заявление и описание
1

if statement

An if оператор состоит из логического выражения, за которым следует одно или несколько операторов.

2

if...else statement

An if elseоператор состоит из логического выражения, за которым следует одно или несколько операторов. Если условие истинно. Заявления подifзаявления исполнены. Если условие ложное.Else часть скрипта выполняется

3

if..elseif...else statement

Оператор if, за которым следует один или несколько Elseif операторы, состоящие из логических выражений, за которыми следует необязательный else statement, который выполняется, когда все условие становится ложным.

4

nested if statements

Если или elseif заявление внутри другого if или же elseif заявления).

5

switch statement

А switch Оператор позволяет проверять переменную на предмет наличия списка значений в равной степени.

  • html id - Если у таблицы есть тег id, лучше всего использовать это свойство.

  • innerText - Заголовок таблицы.

  • sourceIndex - Получает исходный индекс таблицы

  • ChildItemCount - Получает количество ChildItems, присутствующих в указанной строке

  • RowCount - Получает количество строк в таблице

  • ColumnCount - Получает количество столбцов в таблице

  • GetcellData - Получает значение ячейки на основе столбца и индекса строки

пример

Browser("Tutorials Point").Sync
' WebTable 
Obj = Browser("Tutorials Point").Page("VBScript Decisions").WebTable("Statement")
' Fetch RowCount
x = Obj.RowCount
print x

' Fetch ColumnCount
y = Obj.ColumnCount(1)
print y

' Print the Cell Data of the Table
For i = 1 To x Step 1
   
   For j = 1 To y Step 1
      z = Obj.GetCellData(i,j)
      print "Row ID : " & i & " Column ID : " & j & " Value : " & z
   Next
Next

'Fetch the Child Item count of Type Link in a particular Cell
z = Obj.ChildItemCount(2,1,"Link")
print z

Что такое виртуальные объекты?

Иногда тестируемое приложение может содержать стандартный оконный объект, но не распознается QTP. В этих условиях объекты могут быть определены как виртуальные объекты (VO) типа «кнопка», «ссылка» и т. Д., Чтобы можно было моделировать действия пользователя над виртуальными объектами во время выполнения.

пример

Допустим, мы автоматизируем сценарий в Microsoft Word. Я активировал приложение MS Word и щелкаю любой значок на ленте. Например, на ленте щелкают вкладку «Вставка», а затем пользователь нажимает кнопку «Изображение». Кнопка распознается как WinObject; следовательно, важность виртуальных объектов очевидна.

Window("Microsoft Word").WinObject("Ribbon").Click 145,45
Window("Microsoft Word").WinObject("Ribbon").WinObject("Picture...").Click 
170,104

Создание виртуального объекта

Step 1 - В таких сценариях виртуальные объекты создаются с помощью диспетчера виртуальных объектов или нового виртуального объекта из «Инструменты» >> «Виртуальный объект» >> «Новый виртуальный объект» и щелкают по кнопке «Далее».

Step 2 - Сопоставьте объект с типом класса и нажмите «Далее».

Step 3- Нажмите кнопку «Отметить объект». Появится курсор-перекрестие, пометит объект, который вы хотите сопоставить, и нажмите «Далее».

Step 4 - Выберите родительский объект виртуального объекта и нажмите «Далее».

Step 5 - Назовите коллекцию, в которой вы хотите сохранить виртуальный объект, и нажмите «Готово».

Диспетчер виртуальных объектов

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

Переход к диспетчеру виртуальных объектов: «Инструменты» >> «Диспетчер виртуальных объектов», как показано ниже -

Использование виртуальных объектов

После создания виртуальных объектов созданный объект можно использовать, как показано ниже -

Window("Microsoft Word").WinObject("Ribbon").VirtualButton("button").Click

Ограничения виртуального объекта

  • QTP не поддерживает виртуальные объекты для аналоговой или низкоуровневой записи.

  • Контрольные точки не могут быть добавлены к виртуальным объектам.

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

  • Хотя мы сопоставляем объект с определенным классом (кнопкой или списком), все методы собственных объектов не поддерживаются виртуальными объектами.

  • Object Spy нельзя использовать с виртуальным объектом.

  • Выполнение теста не удастся, если разрешение экрана изменится при изменении координат.

  • Окно приложения должно иметь такой же размер экрана, чтобы виртуальные объекты были захвачены правильно.

Таким образом, QTP не предоставляет встроенной поддержки для подключения к базе данных, однако с помощью VBScript тестировщики смогут подключаться и взаимодействовать с базами данных с помощью объектов ADODB.

ADODB имеет 4 свойства или метода, с помощью которых мы сможем работать с базами данных. Они -

  • ADODB.Connection - Используется для установления соединения с базой данных

  • ADODB.Command - Используется для выполнения команды SQL (запросы или хранимые процедуры)

  • ADODB.Fields - Используется для выборки определенного столбца из набора записей после выполнения запроса / сохраненной процедуры

  • ADODB.Recordset - Используется для получения данных из базы данных

Как подключиться к базе данных?

Базы данных могут быть подключены с помощью строк подключения. Каждая база данных отличается способом подключения к ней. Однако строки подключения могут быть созданы с помощью www.connectionstrings.com.

Давайте посмотрим, как подключиться к базе данных со следующими параметрами -

  • Database Type - СЕРВЕР MSSQL

  • Server Name - SQLEXPRESS

  • Database Name - Пробная

  • User Id - са

  • password - Пароль123

Результат запроса показан в SQL Server Management Studio следующим образом:

Dim objConnection 
'Set Adodb Connection Object
Set objConnection = CreateObject("ADODB.Connection")     
Dim objRecordSet 
 
'Create RecordSet Object
Set objRecordSet = CreateObject("ADODB.Recordset")     
 
Dim DBQuery 'Query to be Executed
DBQuery = "Select NAME from dbo.EMPLOYEE where AGE = 29"
 
'Connecting using SQL OLEDB Driver
objConnection.Open "Provider = sqloledb.1;Server =.\SQLEXPRESS;
User Id = sa;Password=Password123;Database = Trial"
 
'Execute the Query
objRecordSet.Open DBQuery,objConnection
 
'Return the Result Set
Value = objRecordSet.fields.item(0)				
msgbox Value
 
' Release the Resources
objRecordSet.Close        
objConnection.Close		
 
Set objConnection = Nothing
Set objRecordSet = Nothing

Результат

При выполнении приведенного выше сценария результат отображается в окне сообщения, как показано ниже -

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

Образец XML и их ключевые элементы представлены ниже -

Доступ к XML

Const XMLDataFile = "C:\TestData.xml"
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.Async = False
xmlDoc.Load(XMLDataFile)

' Getting the number of Nodes (books)
Set nodes = xmlDoc.SelectNodes("/bookstore/book")
Print "Total books: " & nodes.Length    ' Displays 2

' get all titles
Set nodes = xmlDoc.SelectNodes("/Booklib/book/value/text()")

' get their values
For i = 0 To (nodes.Length - 1)
   Title = nodes(i).NodeValue
   Print "Title is" & (i + 1) & ": " & Title
Next

Сравнение XML

Мы можем сравнить два заданных XML -

Dim xmlDoc1
Dim xmlDoc2

' Load the XML Files
Set xmlDoc1 = XMLUtil.CreateXMLFromFile ("C:\File1.xml")
Set xmlDoc2 = XMLUtil.CreateXMLFromFile ("C:\File2.xml")

'Use the compare method of the XML to check if they are equivalent
Comp = xmlDoc1.Compare (xmlDoc1, xmlDoc2)

'Returns 1 if the two files are the same
If Comp = 1 Then
   Msgbox "XML Files are the Same"
Else
   Msgbox "XML Files are Different"
End if

Скрипты QTP могут выполняться, только если объекты присутствуют в репозитории объектов. Описания объектов созданы с использованием описательного программирования -

  • Когда тестировщики хотят выполнить операцию с объектом, которого нет в репозитории объектов

  • Когда объекты в приложении очень динамичны по своей природе.

  • Когда репозиторий объектов становится большим, это приводит к снижению производительности, поскольку размер репозитория объектов увеличивается.

  • Когда структура построена, было решено вообще не использовать репозиторий объектов.

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

Синтаксис

Есть два способа создания сценариев с использованием техники описательного программирования. Они -

  • Описание Объекты
  • Описание строк

Описание Объекты

Сценарий разработан с использованием объектов описания, которые зависят от используемых свойств и их соответствующих значений. Затем эти описания используются для создания сценария.

'Creating a description object
Set btncalc = Description.Create()

'Add descriptions and properties
btncalc("type").value = "Button"
btncalc("name").value = "calculate"
btncalc("html tag").value = "INPUT"

' Use the same to script it
Browser("Math Calc").Page("Num Calculator").WebButton(btncalc).Click

Описание строк

Описание объектов разрабатывается с использованием свойств и значений в виде строк, как показано ниже.

Browser("Math Calc").Page("Num Calculator").WebButton("html 
tag:=INPUT","type:=Button","name:=calculate").Click

Дочерние объекты

QTP предоставляет метод ChildObjects, который позволяет нам создавать коллекцию объектов. Родительские объекты предшествуют ChildObjects.

Dim oDesc
Set oDesc = Description.Create
oDesc("micclass").value = "Link"

'Find all the Links
Set obj = Browser("Math Calc").Page("Math Calc").ChildObjects(oDesc)

Dim i
'obj.Count value has the number of links in the page

For i = 0 to obj.Count - 1	 
   'get the name of all the links in the page			
   x = obj(i).GetROProperty("innerhtml") 
   print x 
Next

Порядковые идентификаторы

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

' Using Location
Dim Obj
Set Obj = Browser("title:=.*google.*").Page("micclass:=Page")
Obj.WebEdit("name:=Test","location:=0").Set "ABC"
Obj.WebEdit("name:=Test","location:=1").Set "123"
 
' Index
Obj.WebEdit("name:=Test","index:=0").Set "1123"
Obj.WebEdit("name:=Test","index:=1").Set "2222"
 
' Creation Time
Browser("creationtime:=0").Sync
Browser("creationtime:=1").Sync
Browser("creationtime:=2").Sync

Сам QTP может быть автоматизирован с помощью COM-интерфейса, предоставляемого HP-QTP. Объектная модель автоматизации - это набор объектов, методов и свойств, который помогает тестировщикам контролировать параметры конфигурации и выполнять сценарии с использованием интерфейса QTP. Ключевые конфигурации / действия, которыми можно управлять (но не ограничиваясь ими), перечислены ниже -

  • Загружает все необходимые надстройки для теста
  • Делает QTP видимым во время выполнения
  • Открывает тест, используя указанное место
  • Библиотеки ассоциированных функций
  • Определяет тайм-аут синхронизации общих объектов
  • Начало и конец итерации
  • Включение / отключение интеллектуальной идентификации
  • При настройке ошибок
  • Путь к таблице данных
  • Настройки сценария восстановления
  • Настройки отслеживания журналов

QTP 11.5x предоставляет эксклюзивную документацию по объектной модели автоматизации, на которую можно ссылаться, перейдя в «Пуск» >> «Все программы» >> «HP Software» >> «HP Unified Functional Testing» >> «Документация» >> «Unified». Справочник по автоматизации функционального тестирования ».

Создать скрипт AOM

Тестировщик может сгенерировать сценарий AOM из самого QTP, используя опцию «Создать сценарий». Перейдите к «Выполнить» >> «Настройки» >> «Вкладка« Свойства »>>« Создать сценарий », как показано ниже -

пример

' A Sample Script to Demostrate AOM
Dim App 'As Application
Set App = CreateObject("QuickTest.Application")
App.Launch
App.Visible = True

App.Test.Settings.Launchers("Web").Active = False
App.Test.Settings.Launchers("Web").Browser = "IE"
App.Test.Settings.Launchers("Web").Address = "http://easycalculation.com/"
App.Test.Settings.Launchers("Web").CloseOnExit = True

App.Test.Settings.Launchers("Windows Applications").Active = False
App.Test.Settings.Launchers("Windows Applications").Applications.RemoveAll
App.Test.Settings.Launchers("Windows Applications").RecordOnQTDescendants = True
App.Test.Settings.Launchers("Windows Applications").RecordOnExplorerDescendants = False
App.Test.Settings.Launchers("Windows Applications").RecordOnSpecifiedApplications = True

App.Test.Settings.Run.IterationMode = "rngAll"
App.Test.Settings.Run.StartIteration = 1
App.Test.Settings.Run.EndIteration = 1
App.Test.Settings.Run.ObjectSyncTimeOut = 20000
App.Test.Settings.Run.DisableSmartIdentification = False
App.Test.Settings.Run.OnError = "Dialog"

App.Test.Settings.Resources.DataTablePath = "<Default>"
App.Test.Settings.Resources.Libraries.RemoveAll

App.Test.Settings.Web.BrowserNavigationTimeout = 60000
App.Test.Settings.Web.ActiveScreenAccess.UserName = ""
App.Test.Settings.Web.ActiveScreenAccess.Password = ""

App.Test.Settings.Recovery.Enabled = True
App.Test.Settings.Recovery.SetActivationMode "OnError"
App.Test.Settings.Recovery.Add "D:\GUITest2\recover_app_crash.qrs", 
   "Recover_Application_Crash", 1
App.Test.Settings.Recovery.Item(1).Enabled = True 

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' System Local Monitoring settings
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
App.Test.Settings.LocalSystemMonitor.Enable = false
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Log Tracking settings
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
With App.Test.Settings.LogTracking
   .IncludeInResults = False
   .Port = 18081 
   .IP = "127.0.0.1"
   .MinTriggerLevel = "ERROR"
   .EnableAutoConfig = False
   .RecoverConfigAfterRun = False
   .ConfigFile = ""
   .MinConfigLevel = "WARN" 
End With

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

  • Фреймворк, управляемый ключевыми словами
  • Инфраструктура, управляемая данными
  • Гибридная структура

Фреймворк, управляемый ключевыми словами

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

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

Преимущества

  • Он лучше всего подходит для новичков или нетехнических тестировщиков.

  • Этот подход позволяет писать тесты более абстрактно.

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

  • Есть высокая степень повторного использования.

Недостатки

  • Первоначальные инвестиции в разработку ключевых слов и связанных с ними функций могут занять больше времени.

  • Это может служить ограничением для технически подготовленных тестировщиков.

Платформа, управляемая данными

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

  • datapools
  • Файлы Excel
  • Объекты ADO
  • CSV файлы
  • Источники ODBC

Диаграмма потока

Тестирование, управляемое данными, лучше всего можно понять по следующей диаграмме -

Преимущества

  • Фреймворк, управляемый данными, позволяет сократить объем кода
  • Предлагает большую гибкость для обслуживания и исправления проблем со сценариями
  • Тестовые данные могут быть разработаны

Недостатки

  • Каждый сценарий должен отличаться, чтобы понимать разные наборы данных.

Гибридная структура

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

Факторы, влияющие на

Ниже приведены параметры, которые следует учитывать при разработке фреймворка. Факторы воздействия перечислены ниже -

  • Файлы Framework должны поддерживать программное обеспечение для управления версиями, такое как SVN, CVS, MS Source Control.

  • Платформа должна поддерживать выполнение скриптов в различных средах, а именно QA, SAT, DEV.

  • При изменении объекта скрипты должны выполняться с минимальными изменениями.

  • Фреймворк должен настроить себя и позаботиться о предварительных требованиях, таких как создание папок / баз данных.

  • Фреймворк должен иметь надежную структуру отчетов, чтобы проблемы в скрипте / приложении можно было легко обнаружить.

  • Фреймворк должен обладать большей гибкостью, чтобы его было легко использовать.

  • Framework должна соответствовать стандартам кодирования, чтобы файлы, функции и история изменений поддерживались правильно.

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

Давайте спроектируем простую структуру, взяв образец приложения. Мы автоматизируем несколько сценариев тестируемого приложения и напишем многоразовые функции.

Пример тестируемого приложения "Calculator", приложение по умолчанию, доступное как часть Windows. Давайте теперь создадим различные компоненты каркаса. Здесь мы разработаем гибридный фреймворк и будем использовать репозиторий объектов, поскольку это довольно простое приложение. Однако эту платформу можно масштабировать и для поддержки сложных приложений.

Структура папок Framework показана ниже -

Объяснение структуры папок -

  • Master Driver Script- Скрипт, управляющий всем выполнением. Он выполняет предварительные и начальные настройки, необходимые для выполнения.

  • Library Files - Связанные функции, составляющие библиотеку функций.

  • Data Table - Тестовые данные, необходимые для выполнения.

  • Object Repository - Объекты и их свойства, которые позволяют QTP легко распознавать объекты.

  • Execution Logs - Папка содержит файл журнала выполнения с пользовательскими функциями и историей выполнения функций.

Главный скрипт драйвера

'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
' MASTER DRIVER SCRIPT NAME    : Calculator 
' DESCRIPTION                  : Drivers Script to Execute Automated Test for 
   the Calculator  
' AUTHOR                       : Tutorials Point 
' DATE CREATED                 : 30-Dec-2013 
' OBJECT REPOSITORY ASSOCIATED : Calc.tsr 
' LIBRARY FILES ASSOCIATED     : calculator.qfl, Common.qfl 
' MODIFICATION LOG

' ---------------------------------------------------- 
' First Version       Tutorials point 
'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =  
Option Explicit  

Public ExecDrive  

' Get the Root folder of the Test  so that we can make use of relative paths. 
Dim x : x = Instr(Environment.Value("TestDir"),"Driver")-2 
ExecDrive = mid(Environment.Value("TestDir"),1,x)  

' Get the path of Libraries using relative to the current Drive 
Dim LibPath : LibPath = ExecDrive+"\Libraries\"  

' Dynamically Load the Function Libraries 
LoadFunctionLibrary LibPath + "Calculator.qfl", LibPath + "common_utils.qfl"   

' Capturing the Start Time 
' clscommon is the class object created in common.qfl library file 
clscommon.StartTime = Time()  

' Launching the Application 
SystemUtil.Run "C:\Windows\System32\Calc.exe" : wait (2)  

' Initialize the Data Table Path  
Dim FileName : FileName  = ExecDrive+"\TestData\Calculator.xls" 
Dim SheetSource : SheetSource  = "Calc_test" 
Dim SheetDest : SheetDest = "Global"  

' Import the DataTable into the QTP Script 
DataTable.ImportSheet  FileName , SheetSource , SheetDest   

' Object Repository Path 
Dim RepPath : RepPath = ExecDrive+"\Object_Repository\Calc.tsr" 
RepositoriesCollection.RemoveAll()  
RepositoriesCollection.Add(RepPath)   

' To Keep a Count on iteration 
Dim InttestIteration                   
Dim InttestRows : InttestRows = datatable.GetRowCount   

'  Fetching Date-TimeStamp which will be unique for Naming the Execution Log File 
clscommon.StrDateFormatted = day(date()) & "_" &  MonthName(Month(date()),true) &  
 "_" & YEAR(date())& "_"&hour(now)&"_"&minute(now)  

 ' Name the LogFile  
clscommon.StrLogFile = ExecDrive & "\Execution Logs\" &  
clscommon.StrDateFormatted & ".txt"   

' Create the Execution LogFile which captures the result 
clscommon.Fn_FileCreate(clscommon.StrLogFile)  

' Iniitialize the Parameters and all the relevant Test Details 
Call Fn_InitializeLogFile()  

' Kill all the previous calculator process  
Call fn_Kill_Process("calc.exe")  

For InttestIteration = 1 to InttestRows 
   datatable.SetCurrentRow InttestIteration  
   Dim StrExecute : StrExecute = Ucase(Trim(datatable.Value("Run","Global"))) 
   If StrExecute = "Y" Then  
      clscommon.Number1 = Trim(datatable.Value("Number_1","Global"))  
      clscommon.Number2 = Trim(datatable.Value("Number_2","Global"))  
      clscommon.Number3 = Trim(datatable.Value("Number_3","Global"))  
   
      clscommon.Number4 = Trim(datatable.Value("Number_4","Global"))  
      clscommon.Number5 = Trim(datatable.Value("Number_5","Global"))  
      clscommon.Number6 = Trim(datatable.Value("Number_6","Global"))  
   
      clscommon.Test_Case_ID  = 
         Trim(datatable.Value("Test_Case_ID","Global"))' 
            : clscommon.LogWrite "The Test Case Data is Located at :: " & tcDataPath 
      clscommon.tcScenario = 
         Trim(datatable.Value("Scenario","Global"))' 
            : clscommon.LogWrite "The Test Case Data is Located at :: " & tcDataPath 
      Dim  Expected_Val :  Expected_Val = 
         Trim(datatable.Value("Expected_Val","Global"))'                        
            :  clscommon.LogWrite "The Test Case Data is Located at :: " & tcDataPath 
   
      Select case clscommon.tcScenario  
         Case "Add" 
            clscommon.LogWrite "=== Inside the Test Set :: " & 
               clscommon.tcScenario & " ===" 
                  Call fnCalculate("+",Expected_Val) 
    
         Case "Subtract"   
            clscommon.LogWrite "=== Inside the Test Set :: " & 
               clscommon.tcScenario & " ===" 
                  Call fnCalculate("-",Expected_Val) 
    
         Case "Multiply"   
            clscommon.LogWrite "=== Inside the Test Set :: " & 
               clscommon.tcScenario & " ===" 
                  Call fnCalculate("*",Expected_Val) 
    
         Case "Divide"   
            clscommon.LogWrite "=== Inside the Test Set :: " & 
               clscommon.tcScenario & " ===" 
                  Call fnCalculate("/",Expected_Val) 
    
         Case "Sqrt"   
            clscommon.LogWrite "=== Inside the Test Set :: " & 
               clscommon.tcScenario & " ===" 
                  Call fnCalculate("sqt",Expected_Val) 
      End Select 
   End If  
Next  

' Calling the End Test to Add the result Footer in exec log file. 
Call fn_End_test()  

'  =====================  End of Master Driver Script =====================

Файлы библиотеки

Функции калькулятора записываются в отдельный файл функций, сохраняемый с расширением .qfl или .vbs. Эти функции можно многократно использовать в действиях.

'  Calculator. Qfl File :: Associated Function Library for Calculator Master Driver  

'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =  
' FUNCTION NAME     : Fn_InitializeLogFile 
' DESCRIPTION       : Function to Write the Initial Values in the Log File 
' INPUT PARAMETERS  : varExecDrive,StrDB,StrUId,Strpwd,StrNewDB 
' OUTPUT PARAMETERS : NIL 
' RETURN VALUE      : Pass or Fail message 
' DATE CREATED      : 30-Dec-2013 
'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =  
Public Function Fn_InitializeLogFile() 
   clscommon.LogWrite "********************************************" 
   clscommon.LogWrite "Calc Automation Started" 
End Function 
'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =  
' FUNCTION NAME     : fnCalculate 
' DESCRIPTION       : Function to perform Arithmetic Calculations 
' INPUT PARAMETERS  : operator,Expected_Val 
' OUTPUT PARAMETERS : NIL 
' RETURN VALUE      : Pass or Fail message 
' DATE CREATED      : 30-Dec-2013 
'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =    
Function fnCalculate(operator,Expected_Val) 
   clscommon.LogWrite "Executing the Function 'fnCalculate' " 

   Window("Calculator").Activate 
    
   If Trim(clscommon.Number1) <> ""  Then
      Window("Calculator").WinButton(clscommon.Number1).Click 
   If Trim(clscommon.Number2) <> ""  Then 
      Window("Calculator").WinButton(clscommon.Number2).Click 
   If Trim(clscommon.Number3) <> ""  Then 
      Window("Calculator").WinButton(clscommon.Number3).Click 

   Window("Calculator").WinButton(operator).Click 
   If Trim(clscommon.Number4) <> ""  Then 
      Window("Calculator").WinButton(clscommon.Number4).Click 
   If Trim(clscommon.Number5) <> ""  Then 
      Window("Calculator").WinButton(clscommon.Number5).Click 
   If Trim(clscommon.Number6) <> ""  Then 
      Window("Calculator").WinButton(clscommon.Number6).Click 

   Window("Calculator").WinButton("=").Click 
   Dim ActualVal : ActualVal  = 
      Window("Calculator").WinEdit("Edit").GetROProperty("text") 
   clscommon.LogWrite "The Actual Value after the Math Operation is "& ActualVal 
  
   If Trim(ActualVal) = Trim(Expected_Val) Then 
      clscommon.WriteResult "Pass",  clscommon.Test_Case_ID , 
         clscommon.tcScenario , " Expected Value matches with Actual Value :: " 
            & ActualVal 
    
   Else 
      clscommon.WriteResult "Fail",  clscommon.Test_Case_ID , 
         clscommon.tcScenario , " Expected Value - " & Expected_Val & " Does NOT matches 
            with Actual Value :: " & ActualVal 
   End If 
    
   Window("Calculator").WinButton("C").Click 
    
   If Err.Number <> 0  Then 
      clscommon.LogWrite  "Execution Error : The Error Number is ::  " & 
         Err.Number & " The Error Description is " & Err.Description 
      Err.Clear 
   End If 
    
   clscommon.LogWrite "Exiting the Function 'fnCalculate' " 
End Function  

'= = = = = = = = = = = = = = = = = = = = = = = = = = = 
' FUNCTION NAME     : fn_Kill_Process 
' DESCRIPTION       : Function to Kill the process by name 
' INPUT PARAMETERS  : Application name to be killed 
' OUTPUT PARAMETERS : NIL 
' RETURN VALUE      : NIL 
' DATE CREATED      : 30-Dec-2013 
'= = = = = = = = = = = = = = = = = = = = = = = = = = =  
Function fn_Kill_Process(process) 
   Dim strComputer ,  strProcessToKill , objWMIService , colProcessstrComputer = "." 
   strProcessToKill = process 
    
   Set objWMIService = GetObject("winmgmts:" _& 
      "{impersonationLevel=impersonate}!\\" _& strComputer & "\root\cimv2") 
    
   Set colProcess = objWMIService.ExecQuery _("Select * from Win32_Process 
      Where Name = '" & strProcessToKill & "'") 
    
   count = 0 
   For Each objProcess in colProcess 
      objProcess.Terminate() 
      count = count + 1 
   Next 
End Function  

'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =  
' FUNCTION NAME     : fn_End_test 
' DESCRIPTION       : Function to finish the test Execution process 
' INPUT PARAMETERS  : Application name to be killed 
' OUTPUT PARAMETERS : NIL 
' RETURN VALUE      : NIL 
' DATE CREATED      : 20/Dec/2013 
'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
Function fn_End_test() 
   clscommon.LogWrite "Status Message - Executing the Function 'fn_End_test' " 
    
   Window("Calculator").Close 
   On Error Resume Next 
    
   clscommon.StopTime = Time() 
   clscommon.ElapsedTime = DateDiff("n",clscommon.StartTime,clscommon.StopTime) 
   Dim Totaltests  
   Totaltests = clscommon.gintPassCount+ clscommon.gintFailCount
   clscommon.LogWrite "## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
   clscommon.LogWrite "##  The Execution Start Time  ::  " & clscommon.StartTime 
   clscommon.LogWrite "##  The Execution End Time   ::  " & clscommon.StopTime 
   clscommon.LogWrite "##  The Time Elapsed ::   " & clscommon.ElapsedTime & " Minutes " 
   clscommon.LogWrite "##  The OS ::  " & Environment.Value("OS") 
   clscommon.LogWrite "##  The Total No of Test Cases Executed  ::  " & Totaltests 
   clscommon.LogWrite "##  The No. of Test Case Passed ::  " & clscommon.gintPassCount 
   clscommon.LogWrite "##  The No. of Test Case Failed ::  " & clscommon.gintFailCount 
   clscommon.LogWrite "## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
   SystemUtil.CloseDescendentProcesses 
End Function  
'  ===============   End of Calculator. Qfl   ============================= '

Другой файл библиотеки, «common_utils.qfl», содержит функции, которые позволяют нам записывать вывод в текстовый файл.

Set clscommon = New OS_clsUtils  

'Creating a class file to handle global variables. 
Class OS_clsUtils 
   Dim StrLogFile 
   Dim StrDateFormatted 
   Dim Result 
    
   Dim  Number1, Number2 , Number3  
   Dim  Number4, Number5 , Number6  
   Dim Test_Case_ID , tcScenario 
   Dim StartTime, StopTime, ElapsedTime 
   
   Dim gintPassCount , gintFailCount , gintWarningCount ,  gintdoneCount,  
      gintinfoCount 
    
   Function Fn_FileCreate(strFileName) 
      Dim objFSO:  Set objFSO = CreateObject("Scripting.FileSystemObject") 
      On Error Resume Next 
      
      Dim objTextFile : Set objTextFile = objFSO.CreateTextFile(strFileName) 
      objTextFile.Close 
       
      Set objTextFile = Nothing 
      Set objFSO = Nothing 
   End Function 
    
   Function LogWrite(sMsg) 
      Const ForAppending = 8 
       
      Dim objFSO : Set objFSO = CreateObject("scripting.FileSystemObject") 
      
      Dim objTextFile : Set objTextFile = objFSO.OpenTextFile 
         (clscommon.StrLogFile, ForAppending, True) 
       
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & sMsg 
      objTextFile.Close 
       
      Set objTextFile = Nothing 
      Set objFSO = Nothing 
   End Function 
    
   Function WriteResult(strStatus,functionName,functionDescription,Result) 
      Const ForAppending = 8 
      Dim objFSO : Set objFSO = CreateObject("scripting.FileSystemObject") 
      Dim objTextFile : Set objTextFile = objFSO.OpenTextFile 
         (clscommon.StrLogFile, ForAppending, True) 
       
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & "  
            * * * * * * Test Case Exec Details  * * * * * " 
      
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & " Test staus :: " & strStatus 
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & " Tese ID ::  " & functionName 
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & " Test Description :: " 
            & functionDescription 
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & " Test Result Details :: " & Result 
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & "  
            * * * * * * * * * * * * * * * * * * * * * * * *  * * * * * * * * * * * " 
      objTextFile.Close 
       
      Set objTextFile = Nothing  
      Set objFSO = Nothing 
       
      Select Case Lcase(strStatus) 
         Case "pass" 
            gintPassCount = gintPassCount + 1 
          
         Case "fail" 
            gintFailCount = gintFailCount+1 
      End Select 
   End Function 
End Class 
'   =====================   End of common_Utils.qfl =====================

Репозиторий объектов

В репозитории объектов есть все объекты, с которыми будет работать пользователь. На изображении ниже показан список всех объектов, добавленных в репозиторий с именем calc.tsr.

Таблица данных

DataTable содержит ключевые слова, которые запускают тесты, а также тестовые данные, с которыми QTP будет воздействовать на объекты.

Журнал выполнения

Файл журнала выполнения или выходной файл содержит действия пользователя и журнал функций, которые позволяют тестировщикам выполнять отладку при сбоях сценария.

8/Jan/2014 5:09:16 PM: ************************************************* 
8/Jan/2014 5:09:16 PM: Calc Automation Started 
8/Jan/2014 5:09:16 PM: === Inside the Test Set  ::   Add  === 
8/Jan/2014 5:09:16 PM: Executing the Function 'fnCalculate'  
8/Jan/2014 5:09:17 PM: The Actual Value after the Math Operation is 949.  
8/Jan/2014 5:09:17 PM:  * * * * * * Test Case Exec Details  * * * * *  
8/Jan/2014 5:09:17 PM: Test staus :: Pass 
8/Jan/2014 5:09:17 PM: Tese ID ::  TC_001 
8/Jan/2014 5:09:17 PM: Test Description :: Add 
8/Jan/2014 5:09:17 PM: Test Result Details ::  Expected Value matches with Actual 
   Value :: 949.  
8/Jan/2014 5:09:17 PM: * * * * * * * * * * * * * * * * * * * * * * * *  * * 
* * * * * * * * * 
  
8/Jan/2014 5:09:17 PM: Exiting the Function 'fnCalculate'  
8/Jan/2014 5:09:17 PM: === Inside the Test Set  ::   Subtract  === 
8/Jan/2014 5:09:17 PM: Executing the Function 'fnCalculate'  
8/Jan/2014 5:09:17 PM: The Actual Value after the Math Operation is 415.  
8/Jan/2014 5:09:17 PM: * * * * * * Test Case Exec Details  * * * * *  
8/Jan/2014 5:09:17 PM: Test staus :: Pass 
8/Jan/2014 5:09:17 PM: Tese ID ::  TC_002 
8/Jan/2014 5:09:17 PM: Test Description :: Subtract 
8/Jan/2014 5:09:17 PM: Test Result Details ::  Expected Value matches with Actual 
   Value :: 415.  
8/Jan/2014 5:09:17 PM: * * * * * * * * * * * * * * * * * * * * * * * *  * * * 
* * * * * * * *

8/Jan/2014 5:09:17 PM: Exiting the Function 'fnCalculate'  
8/Jan/2014 5:09:17 PM: === Inside the Test Set  ::   Multiply  === 
8/Jan/2014 5:09:17 PM: Executing the Function 'fnCalculate'  
8/Jan/2014 5:09:18 PM: The Actual Value after the Math Operation is 278883.  
8/Jan/2014 5:09:18 PM: * * * * * * Test Case Exec Details  * * * * *  
8/Jan/2014 5:09:18 PM: Test staus :: Pass 
8/Jan/2014 5:09:18 PM: Tese ID ::  TC_003 
8/Jan/2014 5:09:18 PM: Test Description :: Multiply 
8/Jan/2014 5:09:18 PM:  Test Result Details ::  Expected Value matches with 
   Actual Value :: 278883.  
8/Jan/2014 5:09:18 PM: * * * * * * * * * * * * * * * * * * * * * * * *  * * * 
* * * * * * * *   

8/Jan/2014 5:09:18 PM: Exiting the Function 'fnCalculate'  
8/Jan/2014 5:09:18 PM: === Inside the Test Set  ::   Divide  === 
8/Jan/2014 5:09:18 PM: Executing the Function 'fnCalculate'  
8/Jan/2014 5:09:19 PM: The Actual Value after the Math Operation is 3.  
8/Jan/2014 5:09:19 PM: * * * * * * Test Case Exec Details  * * * * *  
8/Jan/2014 5:09:19 PM: Test staus :: Pass 
8/Jan/2014 5:09:19 PM: Tese ID ::  TC_004 
8/Jan/2014 5:09:19 PM: Test Description :: Divide 
8/Jan/2014 5:09:19 PM: Test Result Details ::  Expected Value matches with Actual 
   Value :: 3.  
8/Jan/2014 5:09:19 PM: * * * * * * * * * * * * * * * * * * * * * * * *  * * * 
* * * * * * * * 
  
8/Jan/2014 5:09:19 PM: Exiting the Function 'fnCalculate'  
8/Jan/2014 5:09:19 PM: === Inside the Test Set  ::   Sqrt  === 
8/Jan/2014 5:09:19 PM: Executing the Function 'fnCalculate'  
8/Jan/2014 5:09:20 PM: The Actual Value after the Math Operation is 10.  
8/Jan/2014 5:09:20 PM: * * * * * * Test Case Exec Details  * * * * *  
8/Jan/2014 5:09:20 PM: Test staus :: Pass 
8/Jan/2014 5:09:20 PM: Tese ID ::  TC_005 
8/Jan/2014 5:09:20 PM: Test Description :: Sqrt 
8/Jan/2014 5:09:20 PM: Test Result Details ::  Expected Value matches with Actual 
   Value :: 10.  
8/Jan/2014 5:09:20 PM: * * * * * * * * * * * * * * * * * * * * * * * *  * * * * 
* * * * * * * 

8/Jan/2014 5:09:20 PM: Exiting the Function 'fnCalculate'  
8/Jan/2014 5:09:20 PM: Status Message - Executing the Function 'fn_Finish_test'  
8/Jan/2014 5:09:20 PM: ## # # # # # # # # # # # # # # # # # # # # # # # # # 
# # # # # #  
8/Jan/2014 5:09:20 PM: ##  The Execution Start Time  ::  5:09:14 PM 
8/Jan/2014 5:09:20 PM: ##  The Execution End Time   ::  5:09:20 PM 
8/Jan/2014 5:09:20 PM: ##  The Time Elapsed ::   0 Minutes  
8/Jan/2014 5:09:20 PM: ##  The OS ::  Microsoft Windows Vista Server 
8/Jan/2014 5:09:20 PM: ##  The Total No of Test Cases Executed  ::  25 
8/Jan/2014 5:09:20 PM: ##  The No. of Test Case Passed ::  25 
8/Jan/2014 5:09:20 PM: ##  The No. of Test Case Failed ::   
8/Jan/2014 5:09:20 PM: ## # # # # # # # # # # # # # # # # # # # # # # # # # 
# # # # # #