Автоматическое тестирование
Описание тестов
Для взаимодействия с элементами web-интерфейса системы тестирования используются классы страниц
suite_new/Nsuts/Page, инкапсулирующие функции взаимодействия со страницами системы при помощи Selenium API (Perl
WWW::Selenium).
В данных классах страниц используются специальные функции
waitForElementPresent,
waitForTextPresent и
waitForPageToLoad, написанные с учетом более удобного логирования и устойчивости к ошибкам, связанным с timeout'ми.
Каждый запрос страницы и ввод данных в пользовательские формы должен предваряться этими функциями.
Все тесты системы NSUts реализуются при помощи тестовых классов, содержащиеся в директории
suite_new/Nsuts/Test.
Каждый тестовый класс должен содержать метод
runTests для начальной инициализации драйвера Selenium.
Начальная инициализация драйвера Selenium, а также другие сервисные функции реализованы в специальных модулях из директории
suite_new/Nsuts/Util.
Последовательность тестовых шагов реализуется посредством создания в методе
runTests экземпляров классов страниц из
suite_new/Nsuts/Page и вызовов соответствующих методов данных объектов.
Запуск тестов осуществляется следующим образом:
TODO:
- Подумать над изменением структуры классов (в частности, избавится от повторяющегося кода, лишних классов);
- Преобразовать тестовые классы в запускаемые скрипты (поскольку все имена тестов должны хранится в массиве и запускаться методом runtests(@mas) тестового фреймворка ).
Функциональные Selenium тесты
Для проверки корректности функционирования web-интерфейса системы тестирования NSUts были написаны следующие тесты:
1. Test Edit Profile – тест, реализующий проверку страницы изменения профиля (редактирование полей, проверка на валидность значений);
2.
Test Encoding? – тест, выполняющий проверку правильности отображения кодировки (utf-8);
3.
Test Es Question? – тест, реализующий проверку сущности «Вопрос-Ответ»;
4.
Test Log Pass Gen? – тест, реализующий проверку страницы генерации паролей на транице “Лог”;
5.
Test Log Privileges? – тест, выполняющий проверку корректности выбора привилегий на странице «Лог-Настройка привилегий»;
6.
Test Log Shift? – тест, реализующий проверку корректности работы туров при изменении параметров на странице «Лог-Сдвиг»;
7.
Test News? – тест, выполняющий проверку функциональности при редактировании новостей;
8.
Test Olympiad? – тест, реализующий проверку страницы “Лог – Олимпиады”;
9.
Test Registration? – тест, реализующий проверку страницы регистрации и работоспособности страницы “Лог – Генерация паролей”;
10.
Test Statements? – тест, выполняющий проверку корректности загрузки/удаления файлов настроек и решений на странице “Настройка”;
11.
Test Submit? – тест, выполняющий проверку на корректность сданных решений;
12.
Test Tests? – тест, выполняющий проверку корректности загрузки/закачки/удаления тестов;
13.
Test Tour? – тест, реализующий проверку работы туров.
Для запуска тестов необходимо:
1. Perl (
Active Perl?)
2. Java
3. Скачать файлы Selenium RC
http://seleniumhq.org/download/
4. подложить в папку Perl lib из Selenium RC (сейчас лежит в
\\swsoft\transfer)
5. сделать checkout тестов из svn: svn+ssh://swsoft.nsu.ru/home2/svn/olympic/trunk/tests
6. запустить selenium-server-1.0.3\run_selenium_server.pl
Запустится окно консоли, куда во время запуска тестов будет писаться лог тестов.
7. изменить конфиг файл test_suite.cfg
8. запустить suite_new\run_all_tests.pl
(Это можно сделать, например, в Notepad++, скачав дополнительно плагин
Npp Exec?
и прописав путь к Perl
подробнее )
Upd: добавлен новый скрипт
run_nsuts_tests.pl, оптимизирующий запуск автоматических Selenium тестов.
Запуск скрипта:
- без аргументов: выполнение всех тестов из директории, заданной в параметре tests_path конфигурационного файла test_suite.cfg;
- с аргументами: аргументы в виде имен тестов (напр. TestEncoding TestNews) задают выполнение конкретных тестов из тестовой директории.
После каждого выполненного теста запускается сервис
nsuts_db_service для переинициализации созданной тестовой БД.
Адрес скрипта
nsuts_db_service прописывается в конфигурационном файле
test_suite.cfg в параметре
db_service_url.
Результатом работы скрипта является набор логов для каждого теста в директории
log и результирующий отчет по всем тестам
SUMMARY.txt в текущей директории.
Запуск тестов и обработка статистики выполняется через модуль Perl
TAP::Harness (можно скачать с
CPAN.org в случае его отсутствия в списке модулей интерпретатора Perl).
Блочные тесты
Нагрузочные тесты (Apache JMeter)
Установка JMeter
- Скачиваем архив с официального сайта: http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi
- Извлекаем архив, запускаем файл bin/jmeter.bat
Запуск тестов JMeter
- Настраиваем базовые параметры теста (Thread Group):
- Number of Threads (users) – количество виртуальных пользователей (потоков)
- Ramp-Up Period (in seconds) – общее время равномерного распределения старта потоков
- Добавляем HTTP Cookie Manager – работа с сессиями через cookie
- Создаем сценарий теста при помощи элемента HTTP Proxy Server:
- добавляем элемент HTTP Proxy Server в Work Bench (Work Bench -> Add -> Non-Test Elements -> HTTP Proxy Server)
- добавляем элемент Recording Controller для записи последовательности действий теста (Thread Group -> Add -> Logic Controller -> Recording Controller)
- запускаем прокси сервер на свободном порту (по умолчанию 8080)
- запускаем браузер с нужным прокси (по умолчанию: localhost, port 8080) и ходим по сайту
- Добавляем элементы мониторинга (Thread Group->Add->Listener):
- View Results in Table
- Graph Results
- Aggregate Report
- Summary Report
- Запуск теста: Run->Clear All && Run->Start.
Описание нагрузочных тестов системы NSUts
Тесты jmeter в svn-репозитории: svn+ssh://parallels.nsu.ru/home2/svn/olympic/trunk/tests/jmeter
Имеются следующие тесты:
- nsuts_registration – одновременная регистрация нескольких пользователей и вход в систему тестирования
- nsuts_submit – вход нескольких пользователей в систему, выполнение отправки решений, просмотр рейтинга
- nsuts_rejudge – вход администратора в систему во время проведения тура, выполнение перетестирования решений, просмотр очереди и рейтинга
Интересующие параметры
- Samples – замеры
- Average – среднее время отклика замеров
- Throughput – интенсивность потока: Throughput = (number of requests) / (total time)
- Deviation – стандартное отклонение