Здравствуйте! Записался на ваш курс, но не понимаю как произвести оплату. Надо ли писать заявление и, если да, то куда отправлять? как я получу диплом о профессиональной переподготовке? |
Автоматизация тестирования с помощью скриптов
Общая тенденция последнего времени предусматривает максимальную автоматизацию тестирования, которая позволяет справляться с большими объемами данных и тестов, необходимых для современных продуктов.
В этом случае запуск тестов и проверка того, что тестируемая система прошла испытания на заданном тестовом случае, будет осуществляться автоматически.
Здесь еще раз повторим, что функции в 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
Нужно выполнить те же задания, что и для ручного тестирования.