Об автоматическом тестировании бэкенда в Media markt

Post on 12-Apr-2017

45 views 1 download

Transcript of Об автоматическом тестировании бэкенда в Media markt

Киев 2016

Первый в Украине фестиваль тестирования

Об автоматическом тестировании back-end-а

в

Игорь Любин

1

Киев 2016

Игорь Любин• К. ф.-м. н.• Родился в г. Казань• В QA с 2007 г.

Киев 2016

Киев 2016

Mediamarkt.ru• > 1 000 000 пользователей с картами лояльности• > 70 магазинов

Киев 2016

Mediamarkt.ru• > 100 IT специалистов• > 10 команд

C#PhpRuby

Киев 2016

«Loyalty Awards Russia 2016»

• Технологический лидер года

Киев 2016

Команда CRM

QACIАналитик

бизнесАналитик

3rd sysTeamlead разработчик

CRMРазработчик

CRM + UIРазработчик

CustomerРазработчик

Внтр.

Киев 2016

Доменная область CRM

• Пользователи• Карты лояльности• Оплата баллами

• Возвраты

Киев 2016

CRM

Pinpad

Киоск

Web

CallCenter

3rd

Mobile

Front-end

9

Киев 2016

Back-end

Customer Api Card Api Lottery Api Payment Api

Sender Sync Card Sync Return Api Pinpad Api

CallCenter.UI CrmManager.UI Lottery.UI + 10-20

Киев 2016

Пример контракта Customer API• find_customer_by_id• create_customer• update_customer• block_customer• confirm_email• …

Киев 2016

Обычный микросервис CRM

Api DB

jsonstatus + json

Query

Киев 2016

Первый автоматический тест?

Киев 2016

Build, deploy, test

14

Киев 2016

Где лежат тесты?MM.Customer.ApiMM.Customer.Api.Test

Киев 2016

Почему тесты рядом с кодом?• Тесты ближе к разработчикам• Один язык разработки проекта и тестов• Одинаковые инструменты обращения к Api и DB• Можно использовать наработки разработчиков

Киев 2016

Стратегия тестирования• Сначала позитив

Киев 2016

18

[Test]

public void Shoud_find_customer_by_id()

{

var response = Api.Send("find_customer_by_id", new { "123" });

Assert.That(response.StatusCode,

Is.EqualTo(HttpStatusCode.OK));

}

Киев 2016

19

[Test]

public void Shoud_find_customer_by_id()

{ var id = Db.GetCustomerId(); var response = Api.Send("find_customer_by_id", new { id });

Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));

Assert.That(response.DeserializeTo<Customer>().Id, Is.EqualTo(id));}

Киев 2016

20

[Test]

public void Shoud_find_customer_by_id()

{ var id = Db.GetCustomerId(); var response = Api.Send("find_customer_by_id", new { id });

Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));

Assert.That(response.DeserializeTo<Customer>().Id, Is.EqualTo(id));}

Киев 2016

Smoke тестирование

Киев 2016

Чек-лист покрытия API• Хотя бы один тест с ответом 200 ОК

• Проверка бизнес-логики• «Плохие» статусы у пользователей и карт

• Тесты на кэш

• Проверка модели, JSON схемы ответа, проверка наличия полей и их правильных типов

• Проверка измененного состояния• Проверить, что изменения легли в БД• Проверки очередей• Проверки в смежных системах

• Вызов метода дважды, максимальное число параметров, расширения команды, другие способы вызова

• Негативные проверки• Not found => Валидные, но несуществующие в системе значения параметров• Invalid => Плохие значения параметров, пробелы, выход за границу допустимых значений• Not specified => Пустые значения параметров, другие типы, проверка обязательных• Пустой запрос = {} и запрос без параметров = ""

• Все ли покрыто из документации? 22

Киев 2016

23

[Test]

public void Shoud_return_error_if_customer_blocked()

{ var id = Db.GetBlockedCustomerId(); var response = Api.Send("find_customer_by_id", new { id });

Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));}

Киев 2016

Тесты на кэш

Киев 2016

Полный набор api тестов

Киев 2016

Slack

Киев 2016

Интеграционное тестирование

Api Sync 3rd

Киев 2016

GitFlow

Киев 2016

UI-тестирование

29

Киев 2016

Тесты для продаCritical Readonly

Киев 2016

Нагрузочное тестирование

Киев 2016

Заключение• AT + CI• Build, deploy, test• Тесты рядом с кодом проекта• Используем наработки разработчиков• Сначала позитив + бизнес логика

Киев 2016

Спасибо за внимание. Вопросы?• E-mail: igor.lyubin@outlook.com• Skype: igor.lyubin