9. Использование внешних данных (Data-driven test)

Назад Содержание Дальше

 

SilkTest позволяет, помимо объявления переменных в тесткейсах, использовать данные, которые считываются из какого-либо внешнего источника (базы данных, текстовых файлов в определенном формате, электронной таблицы). Тесткейсы, считывающие данные из внешнего источника, называются Data Driven Testcases (дословно: тесткейсы, управляемые данными). Такой тесткейс можно рассматривать как некий шаблон, который можно использовать несколько раз, каждый раз работая с новыми данными.

SilkTest обладает широкими встроенными возможностями для работы с базами данных (работа с текстовыми файлами и электронными таблицами в данном случае аналогична работе с базой данных). Прежде всего выясним, в каких случаях полезны эти возможности:

  • Для хранения данных, которые используются разными скриптами, однако определяются один раз. К таким данным можно отнести, например, константы, используемые в тесткейсах, данные из тестируемого приложения, которые используются в различных частях этого же приложения и т.п.
  • Для хранения данных, которые необходимо ввести в приложение перед началом тестирования. Например, прежде, чем начать запуск тесткейсов, необходимо добавить в тестируемое приложение записи, с которыми затем будут работать скрипты
  • Для непосредственного доступа к базе данных тестируемого приложения. Например, для проверки, что по определенному запросу в приложении выводится необходимый набор данных, можно считать эти данные из базы данных приложения, а затем сравнить с тем, что выводится в приложении
  • Для хранения результатов запущенных тесткейсов. Так, вместо того, чтобы использовать файлы результатов SilkTest-а, можно выводить данные в базу данных, где с ними будет удобно работать (находить среднее время работы тесткейсов, отлавливать шаги, на которые затрачивается наибольшее время и т.п.)
  • При наличии хорошо отлаженного и используемого тестдрайва (среды, управляющей запуском тесткейсов, например запускающей автоматически наборы скриптов в определенное время без непосредственного участия человека) в базе можно хранить наборы тесткейсов, предназначенные для различных видов тестирования, или для тестирования разных частей приложения

 

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

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

  • DB_Connect (con_string) – создает подключение к базе данных; в качестве параметра необходимо передать строку подключения con_string, в которой указывается идентификатор базы данных и все необходимые дополнительные параметры. Возвращает указатель (handle) типа HDATABASE. Например, для подключения к таблице Excel строка подключения будет иметь следующий вид:
    HDATABASE hDB = DB_Connect ("DSN=Segue DDA Excel;DBQ=C:\testxls.xls)
    

    Здесь необходимо сделать небольшое отступление. Строка “DSN=Segue DDA Excel” указывает SilkTest-у строку подключения системного DSN (Data Source Name – системный источник данных), который устанавливается в системе при установке SilkTest-а. Вы можете создать свой собственный источник данных, который будет связан с установленными драйверами ODBC. Для этого необходимо зайти в Пуск – Настройка – Панель управления – Администрирование – Источники данных ODBC, перейти на вкладку Системный DSN, нажать кнопку Добавить, выбрать соответствующий драйвер (в нашем случае для работы с таблицами Excel необходимо выбрать элемент Driver to Microsoft Excel) и указать его имя. После этого вместо строки Segue DDA Excel можно указывать имя, заданное в конце этих операций. Кроме того, можно также использовать источники данных, перечисленные на вкладке “Пользовательский DSN” окна “Администратор ODBC”, однако их имена отличаются в русской и английской версиях MS Office, поэтому могут возникнуть проблемы при переносе скриптов с одной системы на другую.

  • DB_Disconnect (hdbc) – отключает SilkTest от ранее присоединенного источника данных, освобождая все ресурсы. Единственный параметр – полученный ранее указатель на базу данных. Например, следующий пример подключается к базе данных c:\testxls.xls и сразу же отключается от нее:
    [ ] HDATABASE hDB = DB_Connect ("DSN= Segue DDA Excel;DBQ=C:\testxls.xls")
    [ ] DB_Disconnect (hDB)
    
  • DB_ExecuteSql (hdbc, sql_stmnt) – выполняет запрос SQL, переданный строковым параметром sql_stmnt для базы hdbc. Например, следующий код создаст таблицу test_tbl с двумя полями – Name и Age:
    DB_ExecuteSQL (hDB, "CREATE TABLE test_tbl (Name char, Age int)")
    

    А следующий код добавит в созданную таблицу новую запись:

    DB_ExecuteSQL (hDB, "INSERT INTO test_tbl (Name, Age) VALUES ('Petrov Petr Petrovich', 25)")
    
  • DB_FinishSql (hstmnt) – удаляет результат, который был получен с помощью функции DB_ExecuteSQL. После использования этой функции невозможно использовать функции DB_FetchNext и DB_FetchPrev (см. ниже). Кроме того, для того, чтобы удалить все результаты типа HSQL, можно воспользоваться функцией DB_Disconnect, которая освободит все использовавшиеся ресурсы HSQL
  • DB_FetchNext (hstmnt, …) – считывает следующую строку из таблицы. Параметр hstmnt – результат, полученный с помощью функции DB_ExecuteSQL. Остальные параметры этой функции – переменные, в которые будут считываться данные из столбцов таблицы. Возвращает FALSE в том Например, для считывания данных из таблицы test_tbl, которую мы создали в предыдущем примере, можно написать следующее:
    [ ] hSql = DB_ExecuteSql (hDB, "SELECT * FROM [test_tbl$]")
    [-] while (DB_FetchNext (hSql, s1, i))
    	[ ] Print ("Name = {s1}, Age = {i}")
    

    Запись “[test_tbl$]” в предложении FROM сделана так для того, чтобы захватить все строки таблицы, а не только строки именованного диапазона, созданного при использовании инструкции INSERT. В этот диапазон будет входить только первая запись. Для того, чтобы посмотреть список имеющихся именованных диапазонов, вы можете в MS Excel’e зайти в меню Вставка – Имя – Присвоить и просмотреть их. При обращении непосредственно к таблице, используя символ $ в конце имени (как это показано в нашем примере) поиск будет осуществляться по всем строкам, пока не встретится первая пустая строка

  • DB_FetchPrev – аналогична предыдущей функции, с той лишь разницей, что переходит не к следующей строке, а к предыдущей
  • DB_Columns (hdbc, catalog-name, schema-name, table-name, column-name) – возвращает список полей таблицы. Тип возвращаемого значения, как и для функций DB_Fetch… – HSQL. Параметры catalog-name, schema-name, table-name, column-name задают соответственно имена каталога, схемы, таблицы и колонки и могут иметь вид регулярных выражений. Допускаемые символы замены: “%” (знак процента) – замена нескольких символов, “_” (знак подчеркивания) – один любой символ. Если необходимо пропустить какой-либо из параметров, необходимо присвоить ему значение NULL. Например, если необходимо выбрать все колонки, начинающиеся с символа N из созданной нами таблицы, мы можем использовать следующий пример:
    [ ] STRING sTbl = "test_tbl"
    [ ] STRING sSchema = NULL
    [ ] STRING sCatalog = NULL
    [ ] STRING sColumn = "N%"
    [ ] HSQL hSql
    
    [ ] HDATABASE hDB = DB_Connect ("DSN=Segue DDA Excel;DBQ=C:\testxls.xls; READONLY=FALSE")
    [ ] hSql = DB_Columns (hDB, sCatalog, sSchema, sTbl, sColumn)
    [-] while (DB_FetchNext (hSql, sCatalog, sSchema, sTbl, sColumn))
    [ ] Print (sColumn)
    [ ] DB_Disconnect (hDB)
    
  • DB_Tables (hdbc, catalog-name, schema-name, table-name, table-type) – возвращает список таблиц базы данных. Кроме того, последним параметром можно указать тип таблиц, которые необходимо просматривать (“table”, “view” и т.д.)
  • DB_Procedures (hdbc, catalog-name, schema-name, proc-name) – возвращает список процедур базы данных
  • DB_PrimaryKeys (hdbc, catalog-name, schema-name, table-name) – возвращает список ключевых полей таблицы. Обратите внимание, что эта функция не возвращает список полей для нескольких таблиц в одном обращении, поэтому в этой функции не допускается использование символов групповой замены для параметра table-name
  • DB_ForeignKeys (hdbc, pcatalog-name, pschema-name, ptable-name, fcatalog-name, fschema-name, ftable-name) – возвращает список связанных полей. В качестве параметров передаются ключевые имена (p…-name) и связанные (f…-name) имена. В именах таблиц также не должно содержаться символов групповой замены

 

Это неполный список функций для работы с базами данных. Предоставляемый SilkTest-ом. Полный список с более подробным описанием можно найти в справке по SilkTest-у в разделе 4Test Reference – Functions – Database.

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


Назад Содержание Дальше