33
Киев 2016 Первый в Украине фестиваль тестирования Об автоматическом тестировании back-end-а в Игорь Любин 1

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

Embed Size (px)

Citation preview

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

Киев 2016

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

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

в

Игорь Любин

1

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

Киев 2016

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

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

Киев 2016

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

Киев 2016

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

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

Киев 2016

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

C#PhpRuby

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

Киев 2016

«Loyalty Awards Russia 2016»

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

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

Киев 2016

Команда CRM

QACIАналитик

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

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

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

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

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

Внтр.

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

Киев 2016

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

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

• Возвраты

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

Киев 2016

CRM

Pinpad

Киоск

Web

CallCenter

3rd

Mobile

Front-end

9

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

Киев 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

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

Киев 2016

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

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

Киев 2016

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

Api DB

jsonstatus + json

Query

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

Киев 2016

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

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

Киев 2016

Build, deploy, test

14

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

Киев 2016

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

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

Киев 2016

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

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

Киев 2016

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

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

Киев 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));

}

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

Киев 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));}

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

Киев 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));}

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

Киев 2016

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

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

Киев 2016

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

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

• Тесты на кэш

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

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

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

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

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

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

Киев 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));}

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

Киев 2016

Тесты на кэш

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

Киев 2016

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

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

Киев 2016

Slack

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

Киев 2016

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

Api Sync 3rd

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

Киев 2016

GitFlow

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

Киев 2016

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

29

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

Киев 2016

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

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

Киев 2016

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

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

Киев 2016

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

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

Киев 2016

Спасибо за внимание. Вопросы?• E-mail: [email protected]• Skype: igor.lyubin