Показаны сообщения с ярлыком Object QTP. Показать все сообщения
Показаны сообщения с ярлыком Object QTP. Показать все сообщения

четверг, 27 августа 2009 г.

QTP script example for automate QTP (QuickTest) operations.

Автоматизация запуска QTP тестов


В QTP есть интерфейс для обращения к его объектной модели QuickTest
Данный интерфейс реализован .dll библиотекой. В документации написано, что обертку для запуска QTP тестов можно писать на различных языках. Но наиболее удобным будет писать в среде разработки при подключенной библиотеки. Как оно и предполагается, будут доступны возможности IntelliSense. Также в QuickTest Professional Automation Object Model Reference написано, что в качестве библиотеки в reference надо указывать QTObjectModel.dll.


В данном посте я опишу свои впечатления о знакомстве с данной библиотекой



  1. Запуск QTP Application используя javascript

    Для начала можно написать простенький javascript код

    function QTP() // объявляем функцию
    {
    debugger ; // это сделано для того, что бы при запуске в браузере выскочило окно с предложением о дебаге.
    var qtApp = new ActiveXObject("QuickTest.Application"); // Создаем объект application

    while (qtApp.Launched == false ) // Проверяем запущен или не запущен QTP и если false, то запускаем
    {
    qtApp.Launch();

    };

    qtApp.Visible = true // Делаем объект видимым
    setTimeout(function() { qtApp.Quit() }, 10000); // через 10 секунд после того как QTP станет видимым он закроется


    }


    Для запуска данного скрипта осталось только сделать html файлик в котором на какой-нить элемент повесить событие onclick или onload.
    В данном случае для отладки удобно использовать Visual studio. Не пробуйте запускать данный скрипт в firefox т.к. он официально не поддерживает ActiveX.
    Вот, что можно получить в случае отладки скриптов в студии.






  2. Запуск QTP используя C#


    И так студия Visual Studio 2008. Тип создаваемого проекта C# console Application (на выходе получаем .dll и .exe файл для запуска приложения).
    Сразу скажу, что то как описано ниже отличается от тех примеров создания объекта QTP Application из справки к QTP.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using QTObjectModelLib; // здесь я использую библиотеку QTObjectModelLib.dll , вместо QTObjectModel.dll. Вроде как эту библиотеку лучше использовать , если обертка пишется на c#, но официального подтверждения этой информации я не видел.

    namespace TestRunner
    {
    class Program
    {
    static void Main(string[] args)
    {
    AppDomain.CurrentDomain.UnhandledException += (s1, e1) => { Console.WriteLine((e1.ExceptionObject as Exception).ToString()); Console.ReadLine(); }; // это нужно для того, что бы если вдруг на компе, где запускается вдруг не окажется нужной dll

    try
    {
    Testrunner(); // запуск метода в котором идет запуск QTP
    }
    catch (Exception e) // отлов возникающих ошибок и вывод их в консоль
    {
    Console.WriteLine(e.ToString());
    Console.ReadKey();
    }
    }


    public static void Testrunner()
    {
    ApplicationClass app = new ApplicationClass(); // собственно создается объект класса в котором реализованы все методы интерфейсов объекта Application

    app.Launch(); // запуск QTP
    app.Visible = true; // Делаем видимым
    Console.ReadKey(); // Ждем нажатия кнопки в Console
    app.Quit(); // После нажатия кнопки в консоли мы закрываем QTP


    // Вкратце суть строчек ниже это очистка памяти. Метод FinalReleaseComObject Освобождает все ссылки на вызываемую оболочку CLR, устанавливая счетчик ссылок соответствующей оболочки среды CLR равным 0. Далее вызываем garbage collector , т.е. сборщик мусора. Я думаю это все делать не обязательно , но т.к. по сути мы используем не управляемый код используя dll. У меня возникали различные ошибки связанные с тем, что где то, видимо не подчищалось.
    while( System.Runtime.InteropServices.Marshal.FinalReleaseComObject( app ) > 0 );

    app = null;

    GC.Collect();
    GC.WaitForPendingFinalizers();
    GC.Collect();
    }

    }

    }



    Кстати в случае использования QTObjectModelLib.dll , вместо QTObjectModel.dll, можно также создавать объект Application следующим образом:

    Application app = new Application();

    И это не смотря на то, что Application интерфейс.







Теперь совет, если вы при попытке запуска QTP через скрипт получаете ошибку "сервер rpc недоступен", то зайдите в Task Manager и прибейте процесс QTAutomation Agent.
И попробуйте снова.

понедельник, 20 июля 2009 г.

Example of QTP script function

Пример функции в Quick Test Professional(QTP). Кликанье или чтение по всем элементам таблицы



В данном примере используется так называемое "программное описание" или "Programmatic Descriptions" и еще иногда называют descriptive programming. Также в примере используется свойство всех веб объектов QTP Object. Данное свойство позволяет обращаться к DOM свойствам и методам web объектов. Но к сожалению в help к QTP написано, что данное свойство работает, только для IE (InternetExplorer).




'Данный пример будет работать только в IE. Т.к. свойство Object , которое тут используется поддерживается только для ie.

Set browdes=Description.Create 'Создается объект описание

browdes("micclass").Value="Browser" 'для описания micclass значение Browser

Function rcTable(obj, strmode, col, row) ' Функция с 4 параметрами на вход, obj - объект(таблица), strmode - строковое значение c(click) или r(read)

Dim intRowcount ' переменная для хранения числа строк в таблице

intRowcount= obj.RowCount ' подсчет числа строк в таблице

If intRowcount >0 Then ' Проверка на то, что число строк в таблице больше 0

For i=row To intRowcount ' Цикл от переданного в функцию параметра row до числа строк в таблице

If strmode="c" Then ' Ветвление для строкового параметра c(click)

obj.Object.rows(i).cells(col).Click 'клик на соответсвующий элемент таблицы. С использованием свойства Object .

elseif mode="r" Then ' Ветвление для строкового параметра r(read)

Print obj.GetCellData(i,col) ' Печать текста соответсвующего элемента таблицы в лог.

End If ' Конец ветвления для строкового параметра

Next ' Переход к следующему значению в цикле, если оно еще не достигло максимального

Else ' Ветвление , если intRowcount >0 = False

MsgBox "Пустая таблица, повторите операцию на другой таблице" ' Вывод окна с сообщением

End If ' Конец ветвления проверки числа строк intRowcount >0


End Function ' Окончание функции

Set objTable=Browser(browdes).Frame("html id:=_frmQueryList").WebTable("html id:=Hitlist1__searchQueriesList__searchQueriesDataGrid") ' Пример инициализации объекта для использования в функции

rcTable objTable,"c",3,1' Пример использования функции