Архитектура автоматизированных тестов

Preview:

DESCRIPTION

 

Citation preview

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

Спасибо!

Recommended