Опубликован: 05.03.2005 | Уровень: специалист | Доступ: платный
Практическая работа 6:

Автоматизация тестирования с помощью скриптов

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

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

Здесь еще раз повторим, что функции в dll были переписаны так, что они обращаются к серверу для получения информации о состоянии элементов комплекса и возвращают серверу информацию о функционировании системы. Для задания состояния окружения ( входных данных ) необходимо обратиться к серверу и передавать ему необходимую информацию. В данном случае был разработан сервер, который кроме приема и передачи информации еще осуществляет проверку правильности поведения системы (рис. 6.1). Он представляет собой модель тестируемой системы. В рамках модели заданы ожидаемые результаты и осуществляется сравнение выходных данных с ожидаемыми результатами. Хотя считалось, что разработанная модель является корректной, полной и непротиворечивой, у вас есть реальная возможность найти ошибки и в самой модели.

При разработке тестов был использован следующий подход:

  • состояние окружения задается в тесте ( входные данные );
  • разработанный сервер:
    • передает информацию о заданном состоянии окружении по запросу от dll;
    • получает от dll информацию о функционировании системы (выходные данные);
    • сравнивает выходные данные с ожидаемым результатом.
  • получаемая информация сохраняется в журнале теста;
  • строится таблица покрытия FS ( ..\SystemTesting\ScriptTests\Logs\summary.html ).

Подробное описание тестового случая №1

Изучение настоящего пункта полезно предварить ознакомлением с п.8, в котором описан подход к автоматизации тестирования с помощью языка скриптов. Здесь рассматривается тест на tcl, подобные тесты необходимо будет писать самостоятельно при выполнении заданий. Приведенный пример был разработан в соответствии со спецификацией тестового случая №1. Для простоты будем считать, что события происходят последовательно в строго заданном порядке. Реально наша система - многопоточное приложение, поэтому такое условие далеко не всегда можно гарантировать.

Система и ее окружение (скрипты)

Рис. 6.1. Система и ее окружение (скрипты)
source bin\\srv.tcl //запуск сервера
global StoreStat //статус склада
global RollerPar //терминал подшипника
global AxlePar //терминал оси
global CommandStatus //возвращаемое значение функции
//SendStoreCom о результатах получения команды
global StoreMessage
//сообщение от склада о результатах выполнения команды
global rollers_found //1 (можно подобрать подходящий
//подшипник или 0 (нельзя)
global fds //строка для графы "Покрытие FS" в итоговой
//таблице результатов тестирования (по умолчанию - Default)
global last_command //последняя команда тестируемой системы
global allowed //список разрешенных команд
set fds "1.a.1; 1.a.4; 2.a; 2.c; 3.a; 4.c"
//покрывает заданные пункты FS
StartTest Warehousetest0001 //запуск теста Timeout 30
// процесс тестирования будет прерван через 30 сек
//Задаем состояние окружения (входные данные)
set StoreStat 32 //Поступил подшипник
set RollerPar "0 NewUser Depot1 123456 1 12 1 1"
//статус обмена с терминалом подшипника
//(0 - есть подшипник) и его параметры
set AxlePar "1 NewUser Depot1 123456 1 0 12 12"
//статус обмена с терминалом оси (1 - нет оси)
//и ее параметры
set CommandStatus 0 //команда успешно принята
set StoreMessage 1 //команда успешно выполнена
set rollers_found 1 //можно подобрать подходящий подшипник
//Получаем информацию о функционировании системы
Wait "GetStoreStat *" 0 1
//Неограниченное время (0) ждем получения команды ("опрос
//статуса склада") и если команда не получена, то будет
//зафиксирована ошибка (1)
Wait "GetRollerPar" 0 1
//Неограниченное время (0) ждем получения команды
//("получить информацию о подшипнике с терминала подшипника")
//и если команда не получена, то будет зафиксирована ошибка (1)
set allowed [list "GetAxlePar"]
//Получение команды "получить информацию об оси с терминала
//оси" разрешено и не должно вызвать ошибку
Wait "SendStoreCom 1 *" 10 1
//В течение 10 секунд ждем получения команды ("добавить в
//очередь команд склада на первое место команду GetR (1 -
//получить из приемника в ячейку)" и если команда за это
//время не получена, то будет зафиксирована ошибка (1)
Wait GetStoreMessage 0 1
//Неограниченное время (0) ждем получения команды
//("получить сообщение от склада о результатах выполнения
//команды") и если команда не получена, то будет
//зафиксирована ошибка (1)
//В результате первый подшипник должен быть принят
set allowed [list]
Wait "GetStoreStat *" 0 1
//Неограниченное время (0) ждем получения команды ("опрос
//статуса склада") и если команда не получена, то будет
//зафиксирована ошибка (1)
Wait GetRollerPar 0 1
//Неограниченное время (0) ждем получения команды
//("получить информацию о подшипнике с терминала
//подшипника") и если команда не получена, то будет
//зафиксирована ошибка (1)
set allowed [list "GetAxlePar"]
//Получение команды "получить информацию об оси с терминала
//оси" разрешено и не должно вызвать ошибку
Wait "SendStoreCom 1 *" 10 1
//В течение 10 секунд ждем получения команды ("добавить в
//очередь команд склада на первое место команду GetR
//(1 - получить из приемника в ячейку)") и если команда за
//это время не получена, то будет зафиксирована ошибка (1)
Wait "GetStoreMessage" 0 1
//Неограниченное время (0) ждем получения команды
//("получить сообщение от склада о результатах выполнения
//команды") и если команда не получена, то будет
//зафиксирована ошибка (1)
//В результате второй подшипник должен быть принят
//Задаем новое состояние окружения (входные данные)
set StoreStat 32 //Поступил подшипник
set RollerPar {1 NA NA 0 0 0 0 0}
//статус обмена с терминалом подшипника (1 - нет подшипник)
//и его параметры
set AxlePar "0 NewUser Depot1 123456 1 0 12 12"
//статус обмена с терминалом оси (0 - есть ось) и
//ее параметры
//Получаем информацию о функционировании системы
Wait "GetStoreStat *" 0 1
//Неограниченное время (0) ждем получения команды ("опрос
//статуса склада") и если команда не получена, то будет
//зафиксирована ошибка (1)
Wait "GetRollerPar" 0 1
//Неограниченное время (0) ждем получения команды
//("получить информацию о подшипнике с терминала
//подшипника") и если команда не получена, то будет
//зафиксирована ошибка (1)
Wait GetAxlePar 0 1
//Неограниченное время (0) ждем получения команды
//("получить информацию о оси с терминала оси") и если
//команда не получена, //то будет зафиксирована ошибка (1)
//В результате должна прийти ось
Wait "SendStoreCom 2 *" 10 1
//В течение 10 секунд ждем получения команды ("добавить в
//очередь команд склада на последнее место команду SendR
//(2 - ячейку на выход)") и если команда за это время не
//получена, то будет зафиксирована ошибка (1)
if {![string compare $last_command "SendStoreCom 2 9 9 9 0 0 1"]}
{
//была послана команда выдать первый подшипник для оси
Wait "GetStoreMessage" 0 1
//Неограниченное время (0) ждем получения команды
//("получить сообщение от склада о результатах выполнения
//команды") и если команда не получена, то будет
//зафиксирована ошибка (1)
Wait "SendStoreCom 2 9 9 9 0 1 1" 0 1
//Неограниченное время (0) ждем получения команды
//("добавить в очередь команд склада на последнее место
//команду SendR (2 - ячейку на выход)") и если команда за
//это время не получена, то будет зафиксирована ошибка (1)
//послали команду выдать второй подшипник
}
if {![string compare $last_command "SendStoreCom 2 9 9 9 0 1 1"]}
{
//если была послана команда выдать второй подшипник для оси
Wait "GetStoreMessage" 0 1
//Неограниченное время (0) ждем получения команды
//("получить сообщение от склада о результатах выполнения
//команды") и если команда не получена, то будет
//зафиксирована ошибка (1)
Wait "SendStoreCom 2 9 9 9 0 0 1" 0 1
//Неограниченное время (0) ждем получения команды
//("добавить в очередь команд склада на последнее место
//команду SendR (2 - ячейку на выход)") и если команда за
//это время не получена, то будет зафиксирована ошибка (1)
//послали команду выдать первый подшипник
}
Wait "GetStoreMessage" 0 1
//Неограниченное время (0) ждем получения команды ("получить
//сообщение от склада о результатах выполнения команды") и
//если команда не получена, то будет зафиксирована ошибка (1)
Wait "SendStoreCom 20 *" 0 1
//Неограниченное время (0) ждем получения команды
//("добавить в //очередь команд склада на последнее место
//команду Term (20 - //завершение команд выдачи)") и если
//команда не получена, то будет зафиксирована ошибка (1)
Wait "GetStoreMessage" 0 1
//Неограниченное время (0) ждем получения команды
//("получить сообщение от склада о результатах выполнения
//команды") и если команда не получена, то будет
//зафиксирована ошибка (1)
EndTest
Листинг 6.1. Тест на tcl/tk

Описание тестовых процедур

Как запустить тест

Запустить run.bat. В файле run.bat запускается tests.bat. Файл tests.bat содержит команды запуска тестов и установки необходимого состояния базы данных:

osql -H <Host > -S <Server > -d WarehouseTCL -U sa -P sa -i
sql\ClearDB.sql
//Вызывается скрипт ClearDB.sql из подкаталога sql. 
//Предполагается, что SQL Server выполняется на машине 
//<Host> и называется <Server>. 
//Эти параметры были настроены автоматически при 
//установке практикума.
//База данных называется WarehouseTCL. Если названия отличаются,
//необходимо заменить параметры командной строки утилиты OSQL:
// -h <host> - задает имя хоста, на котором выполняется SQL Server;
// -s <server> - имя сервера;
// -d <db> - имя базы данных;
// -u <username> - имя пользователя;
// -p <password> - пароль;
// -i <script> - имя скрипта SQL.
bin\launcher tests\warehousetest0001.tcl
//Вызывается тест warehousetest0001.tcl 
copy log.txt logs\warehousetest0001.txt
//Файл log.txt (лог тестируемой системы) копируется в файл 
//warehousetest0001.txt. Для исключения части тестов из набора
//достаточно закомментировать соответствующие строки (команда
//REM).

Проверка результатов выполнения тестов (сравнение с ожидаемым результатом)

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

Пример неправильного теста

Рассмотрим тот же пример неправильного теста, как и в случае ручного тестирования:

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

Убедитесь, что система функционирует по-другому.

Задание 4

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

Федор Антонов
Федор Антонов

Здравствуйте!

Записался на ваш курс, но не понимаю как произвести оплату.

Надо ли писать заявление и, если да, то куда отправлять?

как я получу диплом о профессиональной переподготовке?

Сергей Чурбанов
Сергей Чурбанов
Валерий Слиж
Валерий Слиж
Беларусь
Андрей Морозов
Андрей Морозов
Россия, Минск