54
Фреймворк для авто-тестирования веб-сервисов своими силами Воробьев Андрей Test Automation Engineer EPAM, Минск

Фреймворк автотестирования веб-сервисов своими силами

  • Upload
    sqalab

  • View
    1.766

  • Download
    7

Embed Size (px)

DESCRIPTION

Андрей Воробьев - доклад на SQA Days, 2-3 декабря 2011, Москва

Citation preview

Page 1: Фреймворк автотестирования веб-сервисов своими силами

Фреймворк для авто-тестирования

веб-сервисов своими силами

Воробьев Андрей

Test Automation Engineer

EPAM, Минск

Page 2: Фреймворк автотестирования веб-сервисов своими силами

О себе

Воробьев Андрей

Test Automation Engineer EPAM Systems

Автор и ведущий тренингов для начинающих по авто-тестированию веб-сервисов

[email protected]

Page 3: Фреймворк автотестирования веб-сервисов своими силами

Профессиональный жаргон

Page 4: Фреймворк автотестирования веб-сервисов своими силами

Авто-тестированиевеб-сервиса

Запрос

Ответ

Ответ правильный?

ДаТест

пройденБАГ

Page 5: Фреймворк автотестирования веб-сервисов своими силами

Авто-тестированиевеб-сервиса

Покупать продукт

или

разрабатывать самим?

Page 6: Фреймворк автотестирования веб-сервисов своими силами

Как решить?

Для того, чтобы принять верное решение, достаточно ответить только на один вопрос:

“Насколько тривиальные задачи требуется решить”

Page 7: Фреймворк автотестирования веб-сервисов своими силами

Сложно или просто?

Page 8: Фреймворк автотестирования веб-сервисов своими силами

Сложно или просто?

Просто:

• Простые входные данные(числа, строки)

• Примитивные типы валидаций (=, >, <, contains)

• Простые выборки в базу. Малый объем выборок

Сложно:

• Сложные входные данные (части запросов, которые нужно группировать друг с другом)

• Сложная валидация (по

шаблону, по данным которые тоже нужно откуда-нибудь получить )

• Поддержка транзакций БД, кэширования

Page 9: Фреймворк автотестирования веб-сервисов своими силами

Сложно или просто?

Page 10: Фреймворк автотестирования веб-сервисов своими силами

Сложно или просто?

Page 11: Фреймворк автотестирования веб-сервисов своими силами

Сложно или просто?

<person name=‘Андрей Воробьев’>

<relative>Лина Воробьева</relative>

<relative>Сергей Воробьев</relative>

</person>

Page 12: Фреймворк автотестирования веб-сервисов своими силами

Сложно или просто?

<person name=‘Андрей Воробьев’>

<relative name=“Лина Воробьева“><relative>Валентина Криводубская</relative><relative>Дмитрий Криводубский</relative>

</relative >

<relative name=“Сергей Воробьев“><relative>Ядвига Воробьева</relative><relative>Николай Воробьев</relative>

</relative >

</person>

Page 13: Фреймворк автотестирования веб-сервисов своими силами

Сложно или просто?<person name=‘Андрей Воробьев’>

<relative name=“Лина Воробьева“><relative name=“Валентина Криводубская“>

<relative>Анна Криводубская</relative><relative>Петр Криводубский</relative>

</relative><relative name=“Владимир Криводубский“>

<relative>…</relative><relative>…</relative>

</relative></relative><relative name=“Сергей Воробьев“>

<relative name=“Ядвига Воробьева“><relative>…</relative><relative>…</relative>

</relative><relative name=“Николай Воробьева“>

<relative>…</relative><relative>…</relative>

</relative></relative >

</person>

N == ?

Page 14: Фреймворк автотестирования веб-сервисов своими силами

14

Просто

• SOAP, Rest, HTTP, JMS, DB • XPath Assertions

• XQuery Assertions

• Logging

• Scripting Support (Groovy, JavaScript)

• WS Security

• …. and more

Page 15: Фреймворк автотестирования веб-сервисов своими силами

15

Сложно

• Java/C#/…

• WS implementation • *Unit testing Frameworks

Page 16: Фреймворк автотестирования веб-сервисов своими силами

16

«Сделай сам»

• Клиент веб-сервиса (для отправки запросов и получения ответов от сервера)

• Реализация работы с БД, другими источниками входных/выходных данных

• Набор валидаций, которые нужны ВАМ (XPath, XQuery, DB, равно, содержит, больше\меньше, соответствует заданному формату)

Фреймворк для тестирования

Веб Сервиса – это всего лишь:

Page 17: Фреймворк автотестирования веб-сервисов своими силами

Task list

17

подготовить входные данные (получить из файлов, БД, etc)

сформировать и отправить запрос/получить ответ

выполнить валидацию ответа

… и так много раз в течение одного теста

Page 18: Фреймворк автотестирования веб-сервисов своими силами

18

Подготовка запроса

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body> <familyTree>

<name>Андрей Воробьев</name></ familyTree >

</soapenv:Body></soapenv:Envelope>

Page 19: Фреймворк автотестирования веб-сервисов своими силами

19

Подготовка запроса

soapUI

• Java Property files

• Data Source (excel)

• DB via ‘Property Transfer’

• использование groovy

Java-based framework

• Java Property files

• DB (+ORM, cashing, transactions)

• ЛЮБЫЕ другие источники данных (Windows Active Directory, http, ftp, etc)

Page 20: Фреймворк автотестирования веб-сервисов своими силами

20

Отправка запроса/Получение ответа

soapUI

• ВСЕ уже сделано за вас

Java-based framework

• JAX-WS

• Spring-WS

• …

• ЛЮБЫЕ другие источники имплементации, которые удобно использовать ВАМ

Page 21: Фреймворк автотестирования веб-сервисов своими силами

21

Валидация ответа

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body> <person name=‘Андрей Воробьев’>

<relative>Лина Воробьева</relative><relative>Сергей Воробьев</relative>

</person> </soapenv:Body></soapenv:Envelope>

Page 22: Фреймворк автотестирования веб-сервисов своими силами

22

soapUI – это тоже Java код

Библиотека для

модульного тестирования на языке Java.

Позволяет создавать тест кейсы, группы

тест кейсов, предоставляет

базовые средства для

валидации.

jUnit

Расширение JUnit,

предоставляющее большой

набор средств для

валидации XML файлов, в

т.ч. с помощью

XPath.

xmlUnit

Расширение Junit,

предназначенное для

эмуляции действий браузера

htmlUnitФреймворк

для созданияMock-

объектов

easyMock

Page 23: Фреймворк автотестирования веб-сервисов своими силами

23

Архитектура

или то, над чем стоит поломать голову…

Page 24: Фреймворк автотестирования веб-сервисов своими силами

24

Архитектура. Основные принципы

Каждый из компонентов не зависит от другого

Модульность

Page 25: Фреймворк автотестирования веб-сервисов своими силами

25

Архитектура. Основные принципы

Легко добавлять:

новый функционал

новые типы валидаций

Расширяемость

Page 26: Фреймворк автотестирования веб-сервисов своими силами

26

Архитектура. Основные принципы

Достаточно посмотреть

на исходный код теста,

чтобы понять что он делает

Читаемость

Page 27: Фреймворк автотестирования веб-сервисов своими силами

27

Архитектура. Компоненты

cmp Component Model

TestLayer

Test

Framework

TemplateProccesor

Serv iceInv oker

Validator

WebServer

WebServ ice«use»

«use»

«use»

«use»

Page 28: Фреймворк автотестирования веб-сервисов своими силами

28

Архитектура. Диаграмма последовательности

sd Use Case1

Test TemplateProcessor ServiceInvoker

WS

Validator

PlainData()

processMessage()

:Message

invoke()

sendRequest()

:Response

:Result

validate(Result)

Page 29: Фреймворк автотестирования веб-сервисов своими силами

29

Компоненты. Тест

TestNG

• базовые типы валидации

• группировка в сьюты

• отчеты о прохождении тестов

• возможность выполнять тесты в несколько потоков

• зависимости между тестами

Page 30: Фреймворк автотестирования веб-сервисов своими силами

30

Компоненты

cmp Component Model

TestLayer

Test

Framework

TemplateProccesor

Serv iceInv oker

Validator

WebServer

WebServ ice«use»

«use»

«use»

«use»

Page 31: Фреймворк автотестирования веб-сервисов своими силами

31

Компоненты. Процессор шаблонов

Данные

Шаблон

Готовый запрос

Page 32: Фреймворк автотестирования веб-сервисов своими силами

32

Компоненты. Процессор шаблонов

Шаблон

<request>

<amount>${amountValue}</amount>

<currency>${currencyValue}</currency>

</request>

Page 33: Фреймворк автотестирования веб-сервисов своими силами

33

Компоненты. Процессор шаблонов

Данные

amountValue = 100

currencyValue = USD

Page 34: Фреймворк автотестирования веб-сервисов своими силами

34

Компоненты. Процессор шаблонов

Готовый запрос

<request>

<amount>100</amount>

<currency>USD</currency>

</request>

Page 35: Фреймворк автотестирования веб-сервисов своими силами

35

Компоненты

cmp Component Model

TestLayer

Test

Framework

TemplateProccesor

Serv iceInv oker

Validator

WebServer

WebServ ice«use»

«use»

«use»

«use»

Page 36: Фреймворк автотестирования веб-сервисов своими силами

36

Компоненты. XML - модель

• XML в чистом виде• любые (в т.ч. невалидные) данные• парсинг, Xpath• слабая привязка к схемеDOM

• нет парсинга• нет необходимости писать xPath

выражения• невозможно вставить невалидные данные• жесткая привязка к схеме

JAXB

Мы используем…

Page 37: Фреймворк автотестирования веб-сервисов своими силами

37

Компоненты. SOAP-клиент

Клиент

НЕ Привязанный

К схеме

ПривязанныйК

схеме

• исходный код может быть сгенерирован автоматически по WSDL-схеме

• исходный код нужно писать самому

Page 38: Фреймворк автотестирования веб-сервисов своими силами

38

Компоненты

cmp Component Model

TestLayer

Test

Framework

TemplateProccesor

Serv iceInv oker

Validator

WebServer

WebServ ice«use»

«use»

«use»

«use»

Page 39: Фреймворк автотестирования веб-сервисов своими силами

39

Компоненты. Валидация

Ответ

База данных

Сторонние сервисы

Page 40: Фреймворк автотестирования веб-сервисов своими силами

40

Компоненты. Валидация. Ответ

• JUnit /TestNG + XPath • XmlUnit + XPath• XMLUnit + шаблон ответаDOM

• JUnit/TestNG• JXPath JAXB

Page 41: Фреймворк автотестирования веб-сервисов своими силами

41

Почему это так важно

Новые тесты

создаются

быстро

Page 42: Фреймворк автотестирования веб-сервисов своими силами

42

Почему это так важно

Старые тесты

поддерживать

просто

2 x 2

Page 43: Фреймворк автотестирования веб-сервисов своими силами

43

soapUI Pro умеет…

• измерять степень покрытия тестами

• тестирование безопасности (SQL-инъекции, XPath-инъекции)

• производить нагрузочное тестирование

• интегрироваться в сборку сервиса и CI-цикл

• создавать Mock-сервисы

Page 44: Фреймворк автотестирования веб-сервисов своими силами

44

soapUI vs. разработка

• не нужно никаких подготовительных работ

• новые тесты создаются медленно

• старые тесты поддерживаются медленно

• квалификация авто-тестировщика ниже среднего

• базовый набор функционала*

* расширяется только groovy-скриптингом

Page 45: Фреймворк автотестирования веб-сервисов своими силами

45

soapUI vs. разработка

• перед написанием тестов необходимо разработать механизмы отправки, получения и валидации

• новые тесты создаются быстро

• старые тесты поддерживать просто

• квалификация авто-тестировщика выше среднего

Page 46: Фреймворк автотестирования веб-сервисов своими силами

46

soapUI vs. разработка

Page 47: Фреймворк автотестирования веб-сервисов своими силами

47

soapUI vs. разработка

• Любые протоколы

• Любые источники входных и выходных данных (Active Directory, POP3, SMTP)

• Простота валидации сложных типов данных (даты, UUID)

Page 48: Фреймворк автотестирования веб-сервисов своими силами

48

Наш опытНа разработку

Фреймворка и первого

теста путем

проб и ошибок

ушло около

2 человеко-месяцев

Page 49: Фреймворк автотестирования веб-сервисов своими силами

49

Наш опыт

Сейчас,

имея опыт,

Это можно

сделать за

2 человеко-недели

Page 50: Фреймворк автотестирования веб-сервисов своими силами

50

Ваши вопросы!

Page 51: Фреймворк автотестирования веб-сервисов своими силами

Спасибо за внимание!

Воробьев Андрей

Test Automation Engineer

EPAM, Минск

Page 52: Фреймворк автотестирования веб-сервисов своими силами

52

Валидация ответа

soapUI

• Fault/Success• Contains• XPath• Xquery• Schema Compilance• Timeout• WS-Security Status• Groovy• …

Java-based framework

• JUnit• TestNG• XmlUnit• HtmlUnit• DbUnit• …*Unit

Page 53: Фреймворк автотестирования веб-сервисов своими силами

53

Компоненты. Процессор шаблонов

Feature FreeMarker VelocityЦиклы Да ДаУсловия Да ДаМакросы Да ДаИмпорт других шаблонов Да ДаПроцессинг импортированных шаблонов Да Да

Выполнение Java-кода Нет Частично

Page 54: Фреймворк автотестирования веб-сервисов своими силами

54

Компоненты. XML – модель. JAXB