SlideShare a Scribd company logo
Интеграционное тестирование Web Api
Взгляд с бэкенда
Отойди в сторону, qa
Мой час настал
О чем идет речь
Под интеграционным тестированием понимаем тестирование
взаимодействия между частями системы после проведения
модульного тестирования.
Рамки процесса:
• от нескольких классов (традиционно, за be);
• до работы всего приложения в целом (как правило, за qa).
2
Hand-made реализация
3
ASP.NET
Core
Web Api
Минусы:
• Долго;
• Ненадежно;
• Сложность поддержки;
• Высокий Bus factor.
Автоматизированная реализация
Минусы:
• Все еще не быстро;
• Сложность автоматизации проверки всего необходимого (почта,
логи и так далее).
4
ASP.NET
Core
Web ApiClientTests
xUnit
Автоматизированная реализация+
Решаемые проблемы:
• Не нужно развертывать отдельное приложение с Api;
• Отсутствие тормозов, вызванных сетью;
• Возможность автоматизировать почти все проверки.
5
ASP.NET
Core
Client
ICollectionFixture
Tests
TestServer
Web Api
TestServer
Сервер для тестирования приложений ASP.NET Core, эмулирующий
сетевые взаимодействия в памяти.
Доступен в пакете Microsoft.AspNetCore.TestHost.
Используемые члены:
1. TestServer(IWebHostBuilder builder);
2. HttpMessageHandler CreateHandler();
3. Uri BaseAddress.
6
ICollectionFixture<TFixture>
Интерфейс xUnit, применяющийся для маркировки коллекции
тестов, разделяющих общую фикстуру.
Используется совместно с двумя атрибутами xUnit
1. CollectionDefinitionAttribute, маркирующим реализацию
ICollectionFixture и принимающим в конструкторе имя
коллекции тестов;
2. CollectionAttribute, маркирующим класс с тестами и
принимающим в конструкторе имя коллекции тестов, в которую
входит класс.
7
Общая фикстура тестов
• Создание зависимостей, над которыми мы хотим получить
контроль при тестировании;
• Конфигурирование и запуск тестируемого приложения при
помощи TestServer;
• Подгрузка конфигурации для прогона и запуска тестов.
8
Базовый класс тестов
• Получение общей фикстуры с содержащимся в ней тестируемым
приложением и контролируемыми зависимостями;
• Создание клиента тестируемого сервиса, взаимодействующего с
переданным в фикстуре экземпляром TestServer.
9
xUnit
Что в итоге получилось
10
[CollectionDefinition(nameof(ApiTestsCollection))]
public class ApiTestsCollection : ICollectionFixture<ApiTestsFixture> {}
[Collection(nameof(ApiTestsCollection))]
public class ValuesControllerTests : ...
{
protected readonly ValuesService Client;
}
Tests
…………………………………….
public class ApiTestsFixture : IDisposable
{
public TestServer Server { get; }
public Mock<ILogger> MockLogger { get; }
public IConfigurationRoot Configuration { get; }
public int TimeoutInMilliseconds { get; }
.........................
}
[Collection(nameof(ApiTestsCollection))]
public class AccountControllerTests : ...
{
protected readonly AccountService Client;
}
Tests
ASP.NET
Core
Web Api
Ссылки
Тулинг:
1. https://www.nuget.org/packages/Microsoft.AspNetCore.TestHost;
2. https://www.nuget.org/packages/xunit.
Документация:
1. https://docs.microsoft.com/en-us/aspnet/core/testing/integration-
testing;
2. https://andrewlock.net/introduction-to-integration-testing-with-xunit-
and-testserver-in-asp-net-core/.
Примеры:
1. https://github.com/litichevskiydv/WebInfrastructure/tree/master/src/Inf
rastructure/Web.Testing;
2. https://github.com/litichevskiydv/WebInfrastructure/tree/master/test/
Web.Tests.
11
Ad

Recommended

vSphereTools - инструмент для автоматизации работы с vSphere | Тимур Гильмуллин
vSphereTools - инструмент для автоматизации работы с vSphere | Тимур Гильмуллин
Positive Hack Days
 
Apache JMeter vs LoadRunner: на заре справедливости, сравнение инструментов н...
Apache JMeter vs LoadRunner: на заре справедливости, сравнение инструментов н...
SQALab
 
Functional Testing with Selenium
Functional Testing with Selenium
QA Club Kiev
 
Автоматизируй это! Jenkins с fastlane под капотом
Автоматизируй это! Jenkins с fastlane под капотом
Maxim Vialyx
 
Пакетный менеджер CrossPM: упрощаем сложные зависимости | Александр Ковалев
Пакетный менеджер CrossPM: упрощаем сложные зависимости | Александр Ковалев
Positive Hack Days
 
Система мониторинга Zabbix в процессах разработки и тестирования | Алексей Буров
Система мониторинга Zabbix в процессах разработки и тестирования | Алексей Буров
Positive Hack Days
 
SQADAYS 21 Москва 2017
SQADAYS 21 Москва 2017
Adam Sandman
 
Автоматизация тестирования приёмников цифрового телевидения
Автоматизация тестирования приёмников цифрового телевидения
SQALab
 
«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский
DevDay
 
Тестирование REST-сервисов с применением инженерных практик
Тестирование REST-сервисов с применением инженерных практик
SQALab
 
WPF Automation – test injection approach to application testing
WPF Automation – test injection approach to application testing
SQALab
 
Непрерывная интеграция (Марина Пестова)
Непрерывная интеграция (Марина Пестова)
Кафедра высокопроизводительных компьютерных технологий ИМКН УрФУ
 
Павел Брылов, Skype
Павел Брылов, Skype
Ontico
 
End-2-End UI автоматизация в мобильном приложении. Наша реализация
End-2-End UI автоматизация в мобильном приложении. Наша реализация
SQALab
 
Алексей Кабанов
Алексей Кабанов
SQALab
 
QA Fest 2016. Дмитрий Химион. Векторы развития систем автоматизации тестиров...
QA Fest 2016. Дмитрий Химион. Векторы развития систем автоматизации тестиров...
QAFest
 
Илья Кудинов
Илья Кудинов
CodeFest
 
Автоматизированное тестирование - от сложного к простому, или Запускаем автот...
Автоматизированное тестирование - от сложного к простому, или Запускаем автот...
SQALab
 
Слои тестового фрамеворка. Что? Где? Когда?
Слои тестового фрамеворка. Что? Где? Когда?
COMAQA.BY
 
Опыт автоматизации интеграционного тестирования и внедрения DevOps в банковск...
Опыт автоматизации интеграционного тестирования и внедрения DevOps в банковск...
COMAQA.BY
 
Функциональное программирование на Elixir
Функциональное программирование на Elixir
AnjLab
 
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
SQALab
 
QA Fes 2016. Александр Неделяев. Система мониторинга производительности своим...
QA Fes 2016. Александр Неделяев. Система мониторинга производительности своим...
QAFest
 
Selenium Begins
Selenium Begins
Alexander Smelov
 
Практика тестирования web сервисов
Практика тестирования web сервисов
SQALab
 
AgileCamp'12 Нижний Новгород: Введение
AgileCamp'12 Нижний Новгород: Введение
Anton Katkov
 
Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)
Alexander Babich
 
Вебинар на тему знакомство с Ansible. популярные практики и ошибки
Вебинар на тему знакомство с Ansible. популярные практики и ошибки
Paul Yehorov
 
Решения для автоматизации тестирования Web-приложений на базе Selenium
Решения для автоматизации тестирования Web-приложений на базе Selenium
SQALab
 
Организация тестового набора при автоматизированном функциональном тестировании
Организация тестового набора при автоматизированном функциональном тестировании
SQALab
 

More Related Content

What's hot (20)

«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский
DevDay
 
Тестирование REST-сервисов с применением инженерных практик
Тестирование REST-сервисов с применением инженерных практик
SQALab
 
WPF Automation – test injection approach to application testing
WPF Automation – test injection approach to application testing
SQALab
 
Непрерывная интеграция (Марина Пестова)
Непрерывная интеграция (Марина Пестова)
Кафедра высокопроизводительных компьютерных технологий ИМКН УрФУ
 
Павел Брылов, Skype
Павел Брылов, Skype
Ontico
 
End-2-End UI автоматизация в мобильном приложении. Наша реализация
End-2-End UI автоматизация в мобильном приложении. Наша реализация
SQALab
 
Алексей Кабанов
Алексей Кабанов
SQALab
 
QA Fest 2016. Дмитрий Химион. Векторы развития систем автоматизации тестиров...
QA Fest 2016. Дмитрий Химион. Векторы развития систем автоматизации тестиров...
QAFest
 
Илья Кудинов
Илья Кудинов
CodeFest
 
Автоматизированное тестирование - от сложного к простому, или Запускаем автот...
Автоматизированное тестирование - от сложного к простому, или Запускаем автот...
SQALab
 
Слои тестового фрамеворка. Что? Где? Когда?
Слои тестового фрамеворка. Что? Где? Когда?
COMAQA.BY
 
Опыт автоматизации интеграционного тестирования и внедрения DevOps в банковск...
Опыт автоматизации интеграционного тестирования и внедрения DevOps в банковск...
COMAQA.BY
 
Функциональное программирование на Elixir
Функциональное программирование на Elixir
AnjLab
 
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
SQALab
 
QA Fes 2016. Александр Неделяев. Система мониторинга производительности своим...
QA Fes 2016. Александр Неделяев. Система мониторинга производительности своим...
QAFest
 
Selenium Begins
Selenium Begins
Alexander Smelov
 
Практика тестирования web сервисов
Практика тестирования web сервисов
SQALab
 
AgileCamp'12 Нижний Новгород: Введение
AgileCamp'12 Нижний Новгород: Введение
Anton Katkov
 
Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)
Alexander Babich
 
Вебинар на тему знакомство с Ansible. популярные практики и ошибки
Вебинар на тему знакомство с Ansible. популярные практики и ошибки
Paul Yehorov
 
«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский
DevDay
 
Тестирование REST-сервисов с применением инженерных практик
Тестирование REST-сервисов с применением инженерных практик
SQALab
 
WPF Automation – test injection approach to application testing
WPF Automation – test injection approach to application testing
SQALab
 
Павел Брылов, Skype
Павел Брылов, Skype
Ontico
 
End-2-End UI автоматизация в мобильном приложении. Наша реализация
End-2-End UI автоматизация в мобильном приложении. Наша реализация
SQALab
 
Алексей Кабанов
Алексей Кабанов
SQALab
 
QA Fest 2016. Дмитрий Химион. Векторы развития систем автоматизации тестиров...
QA Fest 2016. Дмитрий Химион. Векторы развития систем автоматизации тестиров...
QAFest
 
Илья Кудинов
Илья Кудинов
CodeFest
 
Автоматизированное тестирование - от сложного к простому, или Запускаем автот...
Автоматизированное тестирование - от сложного к простому, или Запускаем автот...
SQALab
 
Слои тестового фрамеворка. Что? Где? Когда?
Слои тестового фрамеворка. Что? Где? Когда?
COMAQA.BY
 
Опыт автоматизации интеграционного тестирования и внедрения DevOps в банковск...
Опыт автоматизации интеграционного тестирования и внедрения DevOps в банковск...
COMAQA.BY
 
Функциональное программирование на Elixir
Функциональное программирование на Elixir
AnjLab
 
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
SQALab
 
QA Fes 2016. Александр Неделяев. Система мониторинга производительности своим...
QA Fes 2016. Александр Неделяев. Система мониторинга производительности своим...
QAFest
 
Практика тестирования web сервисов
Практика тестирования web сервисов
SQALab
 
AgileCamp'12 Нижний Новгород: Введение
AgileCamp'12 Нижний Новгород: Введение
Anton Katkov
 
Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)
Alexander Babich
 
Вебинар на тему знакомство с Ansible. популярные практики и ошибки
Вебинар на тему знакомство с Ansible. популярные практики и ошибки
Paul Yehorov
 

Similar to ASP.NET Core: подход к написанию интеграционных тестов для WebAPI (20)

Решения для автоматизации тестирования Web-приложений на базе Selenium
Решения для автоматизации тестирования Web-приложений на базе Selenium
SQALab
 
Организация тестового набора при автоматизированном функциональном тестировании
Организация тестового набора при автоматизированном функциональном тестировании
SQALab
 
Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5
Technopark
 
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
DataArt
 
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
DevDay
 
DevOps guide for awesome quality assurance
DevOps guide for awesome quality assurance
Анастасия Асеева
 
Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)
Кафедра высокопроизводительных компьютерных технологий ИМКН УрФУ
 
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
Mail.ru Group
 
Web driver история одной миграции
Web driver история одной миграции
Igor Khrol
 
Enter: testing
Enter: testing
Kamil Samigullin
 
автоматизация тестирования веб приложений павел липский
автоматизация тестирования веб приложений павел липский
Media Gorod
 
Autotest
Autotest
Magento Dev
 
Dev collaboration
Dev collaboration
Eduard Antsupov
 
Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточности
SQALab
 
Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5
Technopark
 
Обеспечение качества: Практические советы
Обеспечение качества: Практические советы
SQALab
 
Do you know what you are testing?
Do you know what you are testing?
Mikalai Alimenkou
 
А вы знаете что тестируют ваши тесты?
А вы знаете что тестируют ваши тесты?
SQALab
 
Автоматизация тестирования веб-сервисов посредством SOAP UI
Автоматизация тестирования веб-сервисов посредством SOAP UI
automated-testing.info
 
Тестирование веб-проектов в Agile
Тестирование веб-проектов в Agile
SQALab
 
Решения для автоматизации тестирования Web-приложений на базе Selenium
Решения для автоматизации тестирования Web-приложений на базе Selenium
SQALab
 
Организация тестового набора при автоматизированном функциональном тестировании
Организация тестового набора при автоматизированном функциональном тестировании
SQALab
 
Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5
Technopark
 
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
DataArt
 
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
DevDay
 
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
Mail.ru Group
 
Web driver история одной миграции
Web driver история одной миграции
Igor Khrol
 
автоматизация тестирования веб приложений павел липский
автоматизация тестирования веб приложений павел липский
Media Gorod
 
Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточности
SQALab
 
Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5
Technopark
 
Обеспечение качества: Практические советы
Обеспечение качества: Практические советы
SQALab
 
Do you know what you are testing?
Do you know what you are testing?
Mikalai Alimenkou
 
А вы знаете что тестируют ваши тесты?
А вы знаете что тестируют ваши тесты?
SQALab
 
Автоматизация тестирования веб-сервисов посредством SOAP UI
Автоматизация тестирования веб-сервисов посредством SOAP UI
automated-testing.info
 
Тестирование веб-проектов в Agile
Тестирование веб-проектов в Agile
SQALab
 
Ad

ASP.NET Core: подход к написанию интеграционных тестов для WebAPI

  • 1. Интеграционное тестирование Web Api Взгляд с бэкенда Отойди в сторону, qa Мой час настал
  • 2. О чем идет речь Под интеграционным тестированием понимаем тестирование взаимодействия между частями системы после проведения модульного тестирования. Рамки процесса: • от нескольких классов (традиционно, за be); • до работы всего приложения в целом (как правило, за qa). 2
  • 3. Hand-made реализация 3 ASP.NET Core Web Api Минусы: • Долго; • Ненадежно; • Сложность поддержки; • Высокий Bus factor.
  • 4. Автоматизированная реализация Минусы: • Все еще не быстро; • Сложность автоматизации проверки всего необходимого (почта, логи и так далее). 4 ASP.NET Core Web ApiClientTests
  • 5. xUnit Автоматизированная реализация+ Решаемые проблемы: • Не нужно развертывать отдельное приложение с Api; • Отсутствие тормозов, вызванных сетью; • Возможность автоматизировать почти все проверки. 5 ASP.NET Core Client ICollectionFixture Tests TestServer Web Api
  • 6. TestServer Сервер для тестирования приложений ASP.NET Core, эмулирующий сетевые взаимодействия в памяти. Доступен в пакете Microsoft.AspNetCore.TestHost. Используемые члены: 1. TestServer(IWebHostBuilder builder); 2. HttpMessageHandler CreateHandler(); 3. Uri BaseAddress. 6
  • 7. ICollectionFixture<TFixture> Интерфейс xUnit, применяющийся для маркировки коллекции тестов, разделяющих общую фикстуру. Используется совместно с двумя атрибутами xUnit 1. CollectionDefinitionAttribute, маркирующим реализацию ICollectionFixture и принимающим в конструкторе имя коллекции тестов; 2. CollectionAttribute, маркирующим класс с тестами и принимающим в конструкторе имя коллекции тестов, в которую входит класс. 7
  • 8. Общая фикстура тестов • Создание зависимостей, над которыми мы хотим получить контроль при тестировании; • Конфигурирование и запуск тестируемого приложения при помощи TestServer; • Подгрузка конфигурации для прогона и запуска тестов. 8
  • 9. Базовый класс тестов • Получение общей фикстуры с содержащимся в ней тестируемым приложением и контролируемыми зависимостями; • Создание клиента тестируемого сервиса, взаимодействующего с переданным в фикстуре экземпляром TestServer. 9
  • 10. xUnit Что в итоге получилось 10 [CollectionDefinition(nameof(ApiTestsCollection))] public class ApiTestsCollection : ICollectionFixture<ApiTestsFixture> {} [Collection(nameof(ApiTestsCollection))] public class ValuesControllerTests : ... { protected readonly ValuesService Client; } Tests ……………………………………. public class ApiTestsFixture : IDisposable { public TestServer Server { get; } public Mock<ILogger> MockLogger { get; } public IConfigurationRoot Configuration { get; } public int TimeoutInMilliseconds { get; } ......................... } [Collection(nameof(ApiTestsCollection))] public class AccountControllerTests : ... { protected readonly AccountService Client; } Tests ASP.NET Core Web Api
  • 11. Ссылки Тулинг: 1. https://www.nuget.org/packages/Microsoft.AspNetCore.TestHost; 2. https://www.nuget.org/packages/xunit. Документация: 1. https://docs.microsoft.com/en-us/aspnet/core/testing/integration- testing; 2. https://andrewlock.net/introduction-to-integration-testing-with-xunit- and-testserver-in-asp-net-core/. Примеры: 1. https://github.com/litichevskiydv/WebInfrastructure/tree/master/src/Inf rastructure/Web.Testing; 2. https://github.com/litichevskiydv/WebInfrastructure/tree/master/test/ Web.Tests. 11