Архитектура автоматизированных тестов
Post on 16-Nov-2014
2.149 Views
Preview:
DESCRIPTION
TRANSCRIPT
Scalable eCommerce Platform Solutions
Архитектура автоматизированных тестов
Алексей Лянгузов
План
● Введение● Развитие архитектуры авто-тестов● Примеры● Выводы
Архитектура ПО
АрхитектураАрхитектура
ДизайнДизайн
ТребованияТребования
РеализацияРеализация
КомпонентыКомпоненты
API/PatternsAPI/Patterns
Код программыКод программы
http://www.sei.cmu.edu/architecture/start/glossary/
Архитектура ПО
АрхитектураАрхитектура
ДизайнДизайн
ТребованияТребования
РеализацияРеализация
КомпонентыКомпоненты
API/PatternsAPI/Patterns
Код программыКод программы
Автоматизированные тесты — это программный проект!Автоматизированные тесты — это программный проект!
WebServer
Архитектура тестируемого ПО
Программа(eCommerce platform)
Сервис
Чужой сервисАдминка
База
Сервис
Сервис
Сервис
Чужой сервис
20000+ авто-тестов
Наша ниша
~2500 авто-тестов
WebServer
Программа(eCommerce platform)
Сервис
Чужой сервисАдминка
База
Сервис
Сервис
Сервис
Чужой сервис
План
● Введение● Развитие архитектуры авто-тестов● Примеры● Выводы
Итак, первый тест
AppApp
Функции:● Доказательство того, что автоматизация возможна● Первая пробная реализация, обкатка идеи● Начало положено!
TestsTests
Библиотеки
AppApp
TestsTests
Функции:● Использование стандартных технологий● Протестированные и оптимизированные алгоритмы
LibsLibs
Совместные библиотеки (App и Test), должны быть Совместные библиотеки (App и Test), должны быть синхронизированы!синхронизированы!
Промежуточная картина
AppApp LibsLibs
TestsTests
Тестовый Framework
AppApp LibsLibs
TestsTests
Функции:● Генерация отчетов● Организация тестов (suites, tags etc)● Определение языка и формата написания тестов● Запуск тестов
TestFramework
TestFramework
TestFramework
TestFramework
Промежуточная картина
AppApp LibsLibs
TestsTests
TestFramework
TestFramework
Fixtures
AppApp LibsLibs
TestsTests
Функции:● Связь тестов с Framework-ом● Служебные функции, диктуемые как тестами (логикой), так и Framework-ом● Контроль исполнения тестовых действий
FixturesFixtures
http://www.ibm.com/developerworks/ru/edu/j-junit4/section4.html
TestFramework
TestFramework
Промежуточная картина
AppApp LibsLibs
FixturesFixtures
TestsTests
TestFramework
TestFramework
Тестовые данные
AppApp LibsLibs
FixturesFixtures
TestsTests
Функции:● Отвязывание реализации тестов и данных● Повторное использование данных● Структурирование и организация данных для тестов● Упрощение создания тестовых данных
TestDataTestData
TestFramework
TestFramework
Промежуточная картина
AppApp LibsLibsTestDataTestData
FixturesFixtures
TestsTests
TestFramework
TestFramework
Настройки
AppApp LibsLibsTestDataTestData
FixturesFixtures
TestsTests
Функции:● Настройка окружения выполнения тестов● Избавление от «Magic Numbers» и других «hardcoded» значений● Влияние на исполнение тестов извне (без переделки кода)● Возможность создавать параллельные реализации (старая-новая)
PropertiesProperties
TestFramework
TestFramework
Промежуточная картина
AppApp LibsLibs
PropertiesProperties
TestDataTestData
FixturesFixtures
TestsTests
TestFramework
TestFramework
Конфигуратор
AppApp LibsLibs
PropertiesProperties
TestDataTestData
FixturesFixtures
TestsTests
Функции:● Настройка окружения выполнения тестов в целях конфигурационного тестирования● Упрощение работы с настройками (файлы, имена ключей итд)● Подготовка окружения (например, генерация security certificates)● Знания о Run-time окружении
ConfiguratorConfigurator
TestFramework
TestFramework
Промежуточная картина
AppApp LibsLibs
PropertiesProperties
TestDataTestData
ConfiguratorConfigurator
FixturesFixtures
TestsTests
TestFramework
TestFramework
Общее тестовое стафло
AppApp LibsLibs
PropertiesProperties
TestDataTestData
ConfiguratorConfigurator
FixturesFixtures
TestsTests
Функции:● Хранит общие методы тестов● Отвечает за связь с приложением● Содержит всю тестовую логику
Данный компонент является временным и позднее будет Данный компонент является временным и позднее будет переименован!переименован!
CommonTest Stuff
CommonTest Stuff
TestFramework
TestFramework
Почти полная картина
AppApp LibsLibs
PropertiesProperties
TestDataTestData
CommonTest Stuff
CommonTest Stuff
ConfiguratorConfigurator
FixturesFixtures
TestsTests
TestFramework
TestFramework
Менеджер данных
AppApp LibsLibs
PropertiesProperties
TestDataTestData
CommonTest Stuff
CommonTest Stuff
ConfiguratorConfigurator
FixturesFixtures
TestsTests
Функции:● Упрощает работу с тестовыми данными● Содержит логику обработки данных● Генерация данных
TestDataManager
TestDataManager
TestFramework
TestFramework
Полная картина
AppApp LibsLibs
PropertiesProperties
TestDataTestData
CommonTest Stuff
CommonTest Stuff
ConfiguratorConfigurator
FixturesFixtures
TestDataManager
TestDataManager
TestsTests
TestFramework
TestFramework
Тестовые инструменты
AppApp LibsLibs
PropertiesProperties
TestDataTestData
CommonTest Stuff
CommonTest Stuff
ConfiguratorConfigurator
FixturesFixtures
TestDataManager
TestDataManager
TestsTests
Функции:● Содержит вспомогательные инструменты, используемые в тестах (helpers, tools, utils)
TestUtilities
TestUtilities
Не зависит ни от тестов ни от тестируемого приложения, может Не зависит ни от тестов ни от тестируемого приложения, может быть переиспользован в другом проекте!быть переиспользован в другом проекте!
TestFramework
TestFramework
Полная картина
AppApp LibsLibs
PropertiesProperties
TestDataTestData
TestUtilitiesTest
Utilities
CommonTest Stuff
CommonTest Stuff
ConfiguratorConfigurator
FixturesFixtures
TestDataManager
TestDataManager
TestsTests
TestFramework
TestFramework
Связь с программой
AppApp LibsLibs
PropertiesProperties
TestDataTestData
TestUtilitiesTest
Utilities
CommonTest Stuff
CommonTest Stuff
ConfiguratorConfigurator
FixturesFixtures
TestDataManager
TestDataManager
TestsTests
Функции:● Предоставляет набор универсальных интерфейсов (абстракций) для общения с тестируемым приложением● Общается с тестируемым приложением через предоставляемые им интерфейсам (реализация протоколов общения)
AppInterfaces
AppInterfaces
TestFramework
TestFramework
Полная картина
AppApp LibsLibs
PropertiesProperties
TestDataTestData
TestUtilitiesTest
Utilities
TestCoreTestCore
ConfiguratorConfigurator
FixturesFixtures
TestDataManager
TestDataManager
TestsTests
AppInterfaces
AppInterfaces
TestFramework
TestFramework
Расширения Framework-а
AppApp LibsLibs
PropertiesProperties
TestDataTestData
TestUtilitiesTest
UtilitiesAppInerfaces
AppInerfaces
TestLogicTest
Logic
ConfiguratorConfigurator
FixturesFixtures
TestDataManager
TestDataManager
TestsTests
Функции:● Расширяет тестовый Framework , добавляя нестандартные методы и функции● Исправляет существующие ошибки в тестовом Framework-е (особенно если Framework с открытыми исходниками)● Интеграция с другими приложениями (например, Jenkins-plugin для тестового Framework-а)
Framework AddonsFramework Addons
TestFramework
TestFramework
Финальная картина
AppApp LibsLibs
PropertiesProperties
TestDataTestData
TestUtilitiesTest
Utilities
Framework AddonsFramework Addons
TestCoreTestCore
ConfiguratorConfigurator
FixturesFixtures
TestDataManager
TestDataManager
TestsTests
third-party code, usually not-modifiableour test related codeusually not a code, structured text or othertest code, might be DSL or parsable text
AppInterfaces
AppInterfaces
depends on uses
План
● Введение● Развитие архитектуры авто-тестов● Примеры● Выводы
Структура каталогов
Структура каталогов: зачем?
Структура каталогов: затем!
Точка приложения теста
http://localhost:8080/myapp?parameters
AppAppWebServerWebServer ServiceService
Submit
Точка приложения теста
HttPServlet.get(parameters)
AppAppWebServerWebServer ServiceService
Точка приложения теста
Service.doIt(parameters)
AppAppWebServerWebServer ServiceService
Точка приложения теста
return someResult;
AppAppWebServerWebServer ServiceService
Точка приложения теста
return ResultAdapter(someResult);
AppAppWebServerWebServer ServiceService
Точка приложения теста
<html><table>...</html>
AppAppWebServerWebServer ServiceService
Тестируем User Management
AppAppWebServerWebServer ServiceService
User Management
Тестируем User Management
AppAppWebServerWebServer ServiceService
User ManagementНу и где мы это Ну и где мы это будем тестировать?будем тестировать?
Пример теста
UsedData userData = TestDataManager.getUserData(
UserData.NON_EXISTENT_USER);
UserManagement.assertUserExists(userData, false);
UserManagement.addNewUser(userData);
UserManagement.assertUserExists(userData, true);
*это java-подобный псевдоязык!
Точки приложения теста
UsedData userData = TestDataManager.getUserData(
UserData.NON_EXISTENT_USER);
UserManagement.assertUserExists(userData, false);
UserManagement.addNewUser(userData);
UserManagement.assertUserExists(userData, true);
AppAppWebServerWebServer ServiceService
UserManagement.addNewUserProperties
use.api=serviceUserManagement
addNewUser
UserMngmntServletaddNewUser
AppUserMngmntaddNewUser
ServiceUserMngmntaddNewUser
AppAppWebServerWebServer ServiceService
Новый клиент сервиса
AppAppWebServerWebServer ServiceService
<?xml version="1.0" encoding="utf-8" ?> <soap:Envelope><soap:Body> <AddNewUser xmlns="http://SERVER/VDir/VName"> <UserName>TestUser1</UserName> <Password>TestPassword1</Pasword> </AddNewUser> </soap:Body></soap:Envelope>
New TestFrameworkNew Test
Framework
Другой Framework
AppApp LibsLibs
PropertiesProperties
TestDataTestData
TestUtilitiesTest
Utilities
Framework AddonsFramework Addons
AppInerfaces
AppInerfaces
TestCoreTestCore
ConfiguratorConfigurator
StepsSteps
TestDataManager
TestDataManager
TestsTests
Old TestFrameworkOld Test
FrameworkFixturesFixtures
TestsTests
New Framework AddonsNew Framework Addons
План
● Введение● Развитие архитектуры авто-тестов● Примеры● Выводы
Выводы
Автоматизированные тесты — это программный проект!Автоматизированные тесты — это программный проект!
Выводы
Автоматизированные тесты — это программный проект!Автоматизированные тесты — это программный проект!
Правильность архитектуры зависит от многих вещей. Нет абсолютно правильной.
Выводы
Автоматизированные тесты — это программный проект!Автоматизированные тесты — это программный проект!
Правильность архитектуры зависит от многих вещей. Нет абсолютно правильной.
Если в вашей структуре каталогов появляются такие названия как «stuff», «other», «temp»,то ваша архитектура нуждается в пересмотре.
Выводы
Автоматизированные тесты — это программный проект!Автоматизированные тесты — это программный проект!
Правильность архитектуры зависит от многих вещей. Нет абсолютно правильной.
Если в вашей структуре каталогов появляются такие названия как «stuff», «other», «temp»,то ваша архитектура нуждается в пересмотре.
Нужны взгляды с разных сторон и с разной степенью детализации
QA
Alexey LyanguzovSoftware Quality Specialistbudabum@gmail.com
Спасибо!
top related