|
Здравствуйте! Записался на ваш курс, но не понимаю как произвести оплату. Надо ли писать заявление и, если да, то куда отправлять? как я получу диплом о профессиональной переподготовке? |
Автоматизация тестирования с помощью скриптов
Общая тенденция последнего времени предусматривает максимальную автоматизацию тестирования, которая позволяет справляться с большими объемами данных и тестов, необходимых для современных продуктов.
В этом случае запуск тестов и проверка того, что тестируемая система прошла испытания на заданном тестовом случае, будет осуществляться автоматически.
Здесь еще раз повторим, что функции в dll были переписаны так, что они обращаются к серверу для получения информации о состоянии элементов комплекса и возвращают серверу информацию о функционировании системы. Для задания состояния окружения ( входных данных ) необходимо обратиться к серверу и передавать ему необходимую информацию. В данном случае был разработан сервер, который кроме приема и передачи информации еще осуществляет проверку правильности поведения системы (рис. 6.1). Он представляет собой модель тестируемой системы. В рамках модели заданы ожидаемые результаты и осуществляется сравнение выходных данных с ожидаемыми результатами. Хотя считалось, что разработанная модель является корректной, полной и непротиворечивой, у вас есть реальная возможность найти ошибки и в самой модели.
При разработке тестов был использован следующий подход:
- состояние окружения задается в тесте ( входные данные );
- разработанный сервер:
- передает информацию о заданном состоянии окружении по запросу от dll;
- получает от dll информацию о функционировании системы (выходные данные);
- сравнивает выходные данные с ожидаемым результатом.
- получаемая информация сохраняется в журнале теста;
- строится таблица покрытия FS ( ..\SystemTesting\ScriptTests\Logs\summary.html ).
Подробное описание тестового случая №1
Изучение настоящего пункта полезно предварить ознакомлением с п.8, в котором описан подход к автоматизации тестирования с помощью языка скриптов. Здесь рассматривается тест на tcl, подобные тесты необходимо будет писать самостоятельно при выполнении заданий. Приведенный пример был разработан в соответствии со спецификацией тестового случая №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
Нужно выполнить те же задания, что и для ручного тестирования.
