Как автоматизировать тестирование WebApi, даже если проект завязан на внешние сервисы. Как тестировать WebApi-сервер без постоянных деплоев, как дебажить во время прогона интеграционных тестов.
Видео https://www.youtube.com/watch?v=fuS1IaLSGV0
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»Yulia Tsisyk
Ни один современный продукт не обходится без API. Этот API может быть внешним, для публичного использования, а может быть сугубо внутренним, но требования к созданию расширяемого, версионируемого, тестируемого, документированного программного интерфейса очень похоже. В этом докладе мы поговорим о том, как создавать подобные API на основе REST, какие существуют best-practices, чего следует избегать, на что обращать внимание при проектировании.
With application and team growth such questions as keeping documentation up to date, sharing of the knowledge, communication between stakeholder and development team became more and more actual. BDD as methodology is aimed to minimize negative impact of those issues. Spock and Geb frameworks will help us to illustrate BDD implementation on specific example.
Михаил Рахманов рассказывает о паттерне Promise и его использовании в iOS разработке.
Краткие тезисы:
- Что такое promises?
- Использование promises в iOS разработке (существующие библиотеки и подходы)
- Реализация promises библиотекой PromiseKit (основные методы, цепочки promises, обработка ошибок)
- Какие задачи можно решить с помощью promises, а какие - нельзя
- Использование promises на примере приложения: драм-машины с возможностью сохранять аудио-дорожки
- Подведение итогов: преимущества и недостатки.
RDSDataSource - внутренние пятничные митапы iOS-команды RAMBLER&Co.
QA Fest 2015. Иван Пашко. XPath yourself. Tips & TricksQAFest
Все мы знаем, что такое XPath и широко используем его в автоматизации. Но неправильное построение XPath выражений приводит тестровщиков в ужас, делает наши тесты хрупкими, и как результат - получаем долгие вечера отладки кода. В докладе я расскажу о том, что такое XPath, о распространенных ошибках при работе с ним, и как их избегать. Будет интересно и начинающим тестировщикам, и экспертам в области автоматизации.
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»Yulia Tsisyk
Ни один современный продукт не обходится без API. Этот API может быть внешним, для публичного использования, а может быть сугубо внутренним, но требования к созданию расширяемого, версионируемого, тестируемого, документированного программного интерфейса очень похоже. В этом докладе мы поговорим о том, как создавать подобные API на основе REST, какие существуют best-practices, чего следует избегать, на что обращать внимание при проектировании.
With application and team growth such questions as keeping documentation up to date, sharing of the knowledge, communication between stakeholder and development team became more and more actual. BDD as methodology is aimed to minimize negative impact of those issues. Spock and Geb frameworks will help us to illustrate BDD implementation on specific example.
Михаил Рахманов рассказывает о паттерне Promise и его использовании в iOS разработке.
Краткие тезисы:
- Что такое promises?
- Использование promises в iOS разработке (существующие библиотеки и подходы)
- Реализация promises библиотекой PromiseKit (основные методы, цепочки promises, обработка ошибок)
- Какие задачи можно решить с помощью promises, а какие - нельзя
- Использование promises на примере приложения: драм-машины с возможностью сохранять аудио-дорожки
- Подведение итогов: преимущества и недостатки.
RDSDataSource - внутренние пятничные митапы iOS-команды RAMBLER&Co.
QA Fest 2015. Иван Пашко. XPath yourself. Tips & TricksQAFest
Все мы знаем, что такое XPath и широко используем его в автоматизации. Но неправильное построение XPath выражений приводит тестровщиков в ужас, делает наши тесты хрупкими, и как результат - получаем долгие вечера отладки кода. В докладе я расскажу о том, что такое XPath, о распространенных ошибках при работе с ним, и как их избегать. Будет интересно и начинающим тестировщикам, и экспертам в области автоматизации.
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"Yulia Tsisyk
Доклад с митапа MSK .NET Community (http://mskdotnet.org).
В современном мире уже нельзя писать код, который работает на одном компьютере на одном процессорном ядре и имеет монопольный доступ к данным. Опытом борьбы с трудностями при написании многопоточного кода поделится Никита Цуканов.
Доклад "Параллелизм и распределённые вычисления на акторах с Akka.NET" рассчитан на неподготовленного слушателя, ранее не имевшего дело с акторами, и является улучшенной и дополненной версией доклада с питерского DotNext. 11 августа речь пойдёт непосредственно об акторной модели и её реализации в Akka.NET, особенностях юнит-тестирования, акторах с сохраняемым состоянием, а так же об интеграции всей этой машинерии с имеющимся приложением и ASP.NET.
Пользователь точно оценит! Повышение производительности мобильных приложений ...Ontico
Расскажем о методиках создания производительных приложений, опираясь на собственный многолетний опыт проб и ошибок:
• использование инструментов отладки (работа с Hierarchy Viewer; поиск и устранение overdraw; профилирование методов; поиск утечек памяти);
• написание производительного кода;
• создание верстки, повышающей скорость работы приложений;
• создание требований к дизайну интерфейсов и API с оглядкой на производительность;
• использование аналитики для логирования и отладки багов.
Android-приложения Superjob:
• 3 приложения в Google Play для B2C и B2B-аудиторий;
• более 1 млн. пользователей;
• в числе лучших российских приложений по мнению Google Play.
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)Ontico
- Что такое "чистая" архитектура приложений. Чем грозит "грязная" архитектура, чем от нее отличается "чистая" архитектура, и какой от нее профит.
- История появления VIPER.
- Идея VIPER. Как изменяется структура приложения при применении этого подхода.
- Опыт использования VIPER в Rambler&Co. Что мы изменили и добавили.
- Работа с VIPER на примере user story из реального приложения.
- Выводы: чем помогает VIPER и когда его использовать не стоит.
Продвинутое использование Celery — Александр КошелевYandex
Доклад будет интересен как тем, кто уже знаком с библиотекой для реализации очередей задач Celery, так и тем, кто только собирается её попробовать. Основные темы выступления:
- как устроена Celery;
- как перейти на альтернативные брокеры;
- как обеспечить эффективный доступ к ресурсам;
- как отслеживать работоспособность процессов Celery
В этой презентации я рассказываю не только об автотестах, а о целом комплексе автоматических инструментов для обеспечения качества веб-сервиса на разных этапах разработки.
Как обеспечить проверку формата? Как поддерживать документацию в актуальном виде? Какую архитектуру выбрать для функциональных тестов?
Немного интересного про JSON-схемы и параметризованные тесты, про тестирование API методом чёрного ящика и про выбор исходных данных для тестирования.
Реактивный двигатель вашего Android приложенияMatvey Malkov
Презентация, объясняющая концепцию реактивных потоков с использованием Android SDK и RxJavа. Рассчитано на программистов с любым стажем, которые жеалют начать использовать эту концепцию в своих программах.
Реактивные потоки -- это круто.
Нейронечёткая классификация слабо формализуемых данных | Тимур ГильмуллинPositive Hack Days
1. Проблемы автоматизации классификации слабо формализуемых (нечётких) данных.
2. Нечёткие множества и нечёткие измерительные шкалы.
3. Моделирование нейронной сети для классификации данных.
4. Инструмент FuzzyClassificator и его внедрение в Компании.
5. Автоматизация классификации данных на базе TeamCity.
Нельзя просто так взять и сделать версионирование APIEatDog
"Нельзя просто так взять и сделать версионирование API"
Почему важно иметь версионирование и какие проблемы оно решает
Какие есть подходы к версионированию API
Какие инструменты и решения предоставляют популярные веб-фреймворки
Почему версионирование - это не просто и как решить возникшие трудности
Выводы
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Andrey Rebrov
Как-то так происходит, что “на 10 девчонок по статистике 9 ребят”, а точнее на группу из 5-7 разработчиков – 1 тестировщик. Или его нет совсем. Так что очень часто приходится и код писать, и тестировать, а дата релиза все ближе и ближе.
В тех случаях, когда мы пишем веб-приложение, помочь в нашей нелегкой судьбе может бодрящий микс из Selenium и TestNG... Как это сделали мы, какие потом получили выводы и результаты — все это я и хочу рассказать и показать
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"Yulia Tsisyk
Доклад с митапа MSK .NET Community (http://mskdotnet.org).
В современном мире уже нельзя писать код, который работает на одном компьютере на одном процессорном ядре и имеет монопольный доступ к данным. Опытом борьбы с трудностями при написании многопоточного кода поделится Никита Цуканов.
Доклад "Параллелизм и распределённые вычисления на акторах с Akka.NET" рассчитан на неподготовленного слушателя, ранее не имевшего дело с акторами, и является улучшенной и дополненной версией доклада с питерского DotNext. 11 августа речь пойдёт непосредственно об акторной модели и её реализации в Akka.NET, особенностях юнит-тестирования, акторах с сохраняемым состоянием, а так же об интеграции всей этой машинерии с имеющимся приложением и ASP.NET.
Пользователь точно оценит! Повышение производительности мобильных приложений ...Ontico
Расскажем о методиках создания производительных приложений, опираясь на собственный многолетний опыт проб и ошибок:
• использование инструментов отладки (работа с Hierarchy Viewer; поиск и устранение overdraw; профилирование методов; поиск утечек памяти);
• написание производительного кода;
• создание верстки, повышающей скорость работы приложений;
• создание требований к дизайну интерфейсов и API с оглядкой на производительность;
• использование аналитики для логирования и отладки багов.
Android-приложения Superjob:
• 3 приложения в Google Play для B2C и B2B-аудиторий;
• более 1 млн. пользователей;
• в числе лучших российских приложений по мнению Google Play.
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)Ontico
- Что такое "чистая" архитектура приложений. Чем грозит "грязная" архитектура, чем от нее отличается "чистая" архитектура, и какой от нее профит.
- История появления VIPER.
- Идея VIPER. Как изменяется структура приложения при применении этого подхода.
- Опыт использования VIPER в Rambler&Co. Что мы изменили и добавили.
- Работа с VIPER на примере user story из реального приложения.
- Выводы: чем помогает VIPER и когда его использовать не стоит.
Продвинутое использование Celery — Александр КошелевYandex
Доклад будет интересен как тем, кто уже знаком с библиотекой для реализации очередей задач Celery, так и тем, кто только собирается её попробовать. Основные темы выступления:
- как устроена Celery;
- как перейти на альтернативные брокеры;
- как обеспечить эффективный доступ к ресурсам;
- как отслеживать работоспособность процессов Celery
В этой презентации я рассказываю не только об автотестах, а о целом комплексе автоматических инструментов для обеспечения качества веб-сервиса на разных этапах разработки.
Как обеспечить проверку формата? Как поддерживать документацию в актуальном виде? Какую архитектуру выбрать для функциональных тестов?
Немного интересного про JSON-схемы и параметризованные тесты, про тестирование API методом чёрного ящика и про выбор исходных данных для тестирования.
Реактивный двигатель вашего Android приложенияMatvey Malkov
Презентация, объясняющая концепцию реактивных потоков с использованием Android SDK и RxJavа. Рассчитано на программистов с любым стажем, которые жеалют начать использовать эту концепцию в своих программах.
Реактивные потоки -- это круто.
Нейронечёткая классификация слабо формализуемых данных | Тимур ГильмуллинPositive Hack Days
1. Проблемы автоматизации классификации слабо формализуемых (нечётких) данных.
2. Нечёткие множества и нечёткие измерительные шкалы.
3. Моделирование нейронной сети для классификации данных.
4. Инструмент FuzzyClassificator и его внедрение в Компании.
5. Автоматизация классификации данных на базе TeamCity.
Нельзя просто так взять и сделать версионирование APIEatDog
"Нельзя просто так взять и сделать версионирование API"
Почему важно иметь версионирование и какие проблемы оно решает
Какие есть подходы к версионированию API
Какие инструменты и решения предоставляют популярные веб-фреймворки
Почему версионирование - это не просто и как решить возникшие трудности
Выводы
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Andrey Rebrov
Как-то так происходит, что “на 10 девчонок по статистике 9 ребят”, а точнее на группу из 5-7 разработчиков – 1 тестировщик. Или его нет совсем. Так что очень часто приходится и код писать, и тестировать, а дата релиза все ближе и ближе.
В тех случаях, когда мы пишем веб-приложение, помочь в нашей нелегкой судьбе может бодрящий микс из Selenium и TestNG... Как это сделали мы, какие потом получили выводы и результаты — все это я и хочу рассказать и показать
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgIT61
Вячеслав Марков, QA engineer в Weezlabs
Я расскажу о том, как в нашей фирме организовано тестирование бэкенда с помощью тестового фреймворка TestNG и Java. Расскажу о data-driven тестировании и о том, почему его удобно применять. Покажу и опишу разработанную нами структуру типового тестового проекта. Представлю применяемые нами способы сбора и документирования результатов, а так же их анализ в условиях CI.
Automation Functional Testing in Agile ProjectsAndrey Rebrov
Об автоматических тестах писал ещё Сам Кент Бек. Ну, а автоматические функциональные тесты — это вообще лакомый кусок для современных agile методик разработки ПО. Вместе с участниками кемпа мы узнаем, с какой стороны подходить к процессу автоматизации тестирования в целом. Кроме того, мы создадим проект автотестирования с использованием одного из самых популярных продуктов для тестирования веб-приложений — Selenium 2.
Rempl — крутая платформа для крутых инструментов - Роман Дворнов (Avito)AvitoTech
Роман Дворнов (Avito)
Фронтенд усложняется с каждым днем, и уже не представить жизнь разработчика без инструментов. Инструментов становится все больше, но нельзя сказать, что их достаточно. Если у вас собственный стек или технологическое решение, вам рано или поздно потребуется сделать свой инструмент. Это не так просто! Особенно если вы захотите интегрировать его интерфейс в браузерные Developer Tools, IDE, редакторы или открыть их на другом устройстве. Добавьте сюда проблему версионирования и другие сложности, и вам покажется, что задача неподъемная.
Но есть хорошая новость! Большинство из этих проблем решает Rempl — платформа для создания и использования удаленных инструментов (на самом деле не только инструментов). Сделаем небольшой обзор Rempl: что это, зачем нужно, какие проблемы решает. А также посмотрим примеры готовых решений, построенных на Rempl.
После докладов мы проведём дискуссионную панель на тему "Организация системы компонент", в которой примут участие докладчики, а также приглашенные эксперты.
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
Сергей Коржнев
Архитектор версии 1.4 2ГИС Web API
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Тезисы:
● Как организован код в старой версии.
● Вдумчиво смотрим, как мы используем Yii, хватаемся за голову и клавиатуру. Там отрезаем, тут пришиваем, и вуаля!
● Ну и делаем выводы, как мы забороли две классические проблемы программирования: борьба с дублированием кода и сложностью системы.
Семинар по Node.js в КПИ 20 октября 2014. Докладчики: Тимур Шемсединов, Никита Савченко, Максим Петренко. Краткое содержание:
* Что такое Node.js и как работает JavaScript в V8
* Профессионалы расскажут, почему они выбрали Node.js
* Вы узнаете его сильные и слабые стороны и где его лучше применять
* Будет полный обзор особеностей и внутреннего строения Node.js
* Примеры внедрения и Highload-проекты
* Вопросы развертывания, хостинг, тестирования, и отладки
* Где и что учить, что читать, как осваивать
2. Особенности моего проекта
— Большая зависимость от БД
— Зависимость от внешних сервисов
• Push сообщения
• Email
• Сокращение ссылок
• Платежи
Webapi
Внешние
сервисыБД Внутренние
сервисы
3. Боль тестирования
— Тестирование контроллеров
• Много мокать
• Сложная поддержка
• Не тестируются запросы к БД
— Интеграционные тесты
• Малое покрытие
• Очень трудно тестировать сложные сценарии
— Ручное тестирование
• Долго
• Никто не делает регресс
4. Доклад про TestServer — озарение!
— Выглядит просто
— Решил попробовать
— Сделал предположения
• можно мочить
• можно дебажить в том же процессе (в одной студии)
5. Внедрение TestServer
— Готовая реализация под .Net Core, а у меня классический .Net
— nUnit
— Внедрял параллельно разработке
6. Предметная область демо-проекта
— Есть группы
— У групп есть пользователи
— У пользователей есть роли: владелец, юзер и модератор
— Владелец может назначать модераторов
— Владелец и модератор могут публиковать заметки
8. [OneTimeSetUp]
public void OneTimeSetUp()
{
ApiServer = new ApiServer();
var requester = ApiServer.GetRequester();
ApiClient = new ApiClient(requester);
}
[OneTimeTearDown]
public void OneTimeTearDown()
{
ApiServer.Dispose();
}
[SetUp]
public void Setup()
{
ApiServer.Reset();
}
Test API client Requester API serverTest
9. — Администратор создаёт группу
— Пользователь вступает в группу
— Администратор назначает пользователя модератором
— Пользователь может создавать заметки
Test API client Requester API serverTest
10. Test API client Requester API serverTest
var adminToken = await ApiClient.Account.GetToken("123", "456");
var userToken = await ApiClient.Account.GetToken("aaa", "bbb");
var groupOwner = await ApiClient.Group.CreateGroup(adminToken, new CreateGroupDto
{
Name = "Тестовая группа " + DateTime.UtcNow.Ticks
});
GroupMember userMember = await ApiClient.Group.Join(userToken, groupOwner.Group.Id);
await ApiClient.Group.SetModerator(adminToken, groupOwner.Group.Id, userMember.Id);
var note = await ApiClient.Group.AddNote(
userToken, groupOwner.Group.Id, "Заметка от модератора");
Assert.That(note, Is.Not.Null);
Assert.That(note.Text, Is.EqualTo("Заметка от модератора"));
11. public class GroupApiClient
{
private readonly IHttpRequester _requester;
public GroupApiClient(IHttpRequester requester)
{
_requester = requester;
}
public async Task<GroupMemberDto[]> GetGroups(string token)
{
return await _requester.GetAsync<GroupMemberDto[]>("/api/group", token);
}
public async Task<GroupMemberDto> CreateGroup(string token, CreateGroupDto dto)
{
return await _requester
.PostAsync<CreateGroupDto, GroupMemberDto>("/api/group", token, dto);
}
Test API client Requester API serverAPI client
12. public HttpClient CreateClient(string token = null)
{
var client = new HttpClient(_handler) {BaseAddress = _baseAddress};
if (token != null)
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", token);
return client;
}
public async Task<TResult> GetAsync<TResult>(string url, string token)
{
using (var client = CreateClient(token))
{
var response = await client.GetAsync(url);
await CheckStatusCode(response);
return await Deserialize<TResult>(response);
}
}
Test API client Requester API serverRequester
13. public class ApiServer : IDisposable
{
public TestServer TestServer { get; }
private TestStartup Startup { get; }
public ApiServer()
{
Startup = new TestStartup();
TestServer = TestServer.Create(app =>
{
Startup.Configuration(app);
});
}
public IHttpRequester GetRequester()
{
return new HttpRequester(TestServer.Handler, TestServer.BaseAddress);
}
public void Reset()
{
//Логика сброса моков перед каждым тестом
}
Test API client Requester API serverAPI server
14. public class TestStartup : Startup
{
protected override WindsorContainer CreateWindsorContainer()
{
var container = base.CreateWindsorContainer();
return container;
}
protected override IncludeErrorDetailPolicy GetErrorDetailPolicy()
=> IncludeErrorDetailPolicy.Always;
}
Test API client Requester API serverAPI server
15. Профит
— Тесты стали похожи на реальные пользовательские сценарии
— Отладка в одной студии
— Сокращение цикла отладки
— Внешние зависимости перестали мешать тестировать
— Уверенность в работоспособности системы увеличилась
16. Дальнейшее развитие
— Единожды создавать тест сервер в памяти
— Настроить запуск на TeamCity
— Мокать под конкретный тест
Отрезать базу данных сложно, нужно очень много мокать, не будут тестироваться запросы, реальные изменения в бд
Внние сервисы отрезать относительно не сложно
Трудно тестировать сложные сценарии потому что есть интеграция с внешними сервисами. Можно сделать специальный флаг, но это нужно поддерживать.
Предположение чем это мне полезно
15 мая был доклад от Димы
Не просил у заказчика времени на внедрение, т.к. заказчик не хочет покупать QA. Делал вместе с фичами от минимального прототипа и по нарастающей
Изучил Димину реализацию, получалось что так просто реализацию не скопировать, т.к. использовалось много специфичных классов.
У нас уже использовался nUnit, переезд на xUnit потребовал бы времени
Поток выполнения запроса. Тест обращается к апи клиенту, который через реквестер вызывает методы апи сервера.