Top Banner
Пример построения системы распределенного запуска Selenium тестов в .NET Волков Станислав UFS Ltd
54

Parallelization of Selenium tests with .NET/C# + NUnit

Jul 06, 2015

Download

Technology

Some companies depend on external data suppliers and this data is difficult to reconcile with standards. Then project faces tests execution speed issues. One of solutions to this kind of issues is tests parallelization. I’ll talk about several tools in .NET/C#: Selenium Grid, PNunit and custom solution for them with NUnit.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Parallelization of Selenium tests with .NET/C# + NUnit

Пример построения системы распределенного запуска

Selenium тестов в .NET

Волков Станислав UFS Ltd

Page 2: Parallelization of Selenium tests with .NET/C# + NUnit

О себеСвою карьеру тестировщика начал в 2009 году.

!

Постепенно двигаясь от ручного тестирования, к использованию HP QTP, тестированию веба

POST, GET запросами, и затем с помощью WebDriver.

!

В данный момент специализируюсь на автоматизации тестирования в веб приложений

на .net

Page 3: Parallelization of Selenium tests with .NET/C# + NUnit

Зачем нужна параллелизация?

Быстро перепроверить изменившийся функционал Долго проходят ночные тесты

Page 4: Parallelization of Selenium tests with .NET/C# + NUnit

Внутренние причины

Page 5: Parallelization of Selenium tests with .NET/C# + NUnit

Среднее выполнения теста 198 секунд

Зависимость от поставщиков 10-120 секунд на ответ

Большое количество тест кейсов (более 500)

Нестабильность ответов (до 20% потерь)

Page 6: Parallelization of Selenium tests with .NET/C# + NUnit

Итого 35,6 часов выполнение тестов последовательно

Page 7: Parallelization of Selenium tests with .NET/C# + NUnit

Что сделать, чтобы работало быстрее?

Page 8: Parallelization of Selenium tests with .NET/C# + NUnit

Объединение тестов?

Увеличивается нестабильность

Усложняются тесты

Теряется понимание, что работает, а что нет

Нет возможности динамического сокращения выполения времени за счет компьютерных ресурсов

Page 9: Parallelization of Selenium tests with .NET/C# + NUnit

Параллелизация!

Selenium Grid + PNUnit?

Page 10: Parallelization of Selenium tests with .NET/C# + NUnit

Selenium Grid + NUnit

Нестабильно работает по сети

Необходимость Java

Нет возможности из «коробки» получать отчеты

Page 11: Parallelization of Selenium tests with .NET/C# + NUnit

PNUnit

«Нечестная» параллезация(нет динамического распределения по пулам)

Невозможность использования нескольких компьютеров из коробки

Нет возможности получить отчеты

Page 12: Parallelization of Selenium tests with .NET/C# + NUnit

Surak - система запуска и выполнения тестов

Page 13: Parallelization of Selenium tests with .NET/C# + NUnit

Паралельный запуск на компьютере

Единое место синхронизации тестов

Таск проверяет сколько запущенно тестов и запускает новые если есть свободные места

Убивание зависших тестов

Page 14: Parallelization of Selenium tests with .NET/C# + NUnit

WebDriver - поддерживает параллельные запросы

! public IList<SSVariantsAvia> GetSSVariantsAvia()!! ! {!! ! ! IList<IWebElement> variants = GetElementExists(PVariantsFlight.VariantsFlightTable.Row).Where(v => v.Displayed).ToList();!!! ! ! IList<SSVariantsAvia> result = variants.Select(element => new SSVariantsAvia()).ToList();!!! ! ! Parallel.For(0, variants.Count(), i => { result[i] = GetSSVariantsAvia(variants[i]); });!!! ! ! return result;!! ! }

Удобно для работы с таблицами

Page 15: Parallelization of Selenium tests with .NET/C# + NUnit

Выигрыш в скорости

FireFox: выйгрыш в 10 - 80%

Page 16: Parallelization of Selenium tests with .NET/C# + NUnit

Отчеты

Статусы тестов

Лог информации

Скриншоты

Время выполнения

Экспорт в формат NUnit0

25

50

75

100

Апрель Май Июнь Июль

Page 17: Parallelization of Selenium tests with .NET/C# + NUnit

Ещё быстрее?

Page 18: Parallelization of Selenium tests with .NET/C# + NUnit

Ещё быстрее?

Одновременный запуск на нескольких

компьютерах

Page 19: Parallelization of Selenium tests with .NET/C# + NUnit

Ещё быстрее?

Одновременный запуск на нескольких

компьютерах

Балансировка нагрузки

Page 20: Parallelization of Selenium tests with .NET/C# + NUnit

Ещё быстрее?

Одновременный запуск на нескольких

компьютерах

Балансировка нагрузки

Горизонтальное маштабирование

Page 21: Parallelization of Selenium tests with .NET/C# + NUnit

База данных MSSQL

Page 22: Parallelization of Selenium tests with .NET/C# + NUnit

База данных MSSQL

Запись в базу тестов

Page 23: Parallelization of Selenium tests with .NET/C# + NUnit

Сервис на компьютере 1

Сервис на компьютере 2

Сервис на компьютере n

База данных MSSQL

Запись в базу тестов

Page 24: Parallelization of Selenium tests with .NET/C# + NUnit

Сервис на компьютере 1

Сервис на компьютере 2

Сервис на компьютере n

База данных MSSQL

Запись в базу тестов

Обмен информацией

Обмен информацией

Обмен информацией

Page 25: Parallelization of Selenium tests with .NET/C# + NUnit

Сервис на компьютере 1

Сервис на компьютере 2

Сервис на компьютере n

Nunit+AddNunit на компьютере n

Nunit+AddNunit на компьютере 1

Nunit+AddNunit на компьютере 2

База данных MSSQL

Запись в базу тестов

Обмен информацией

Обмен информацией

Обмен информацией

Page 26: Parallelization of Selenium tests with .NET/C# + NUnit

Сервис на компьютере 1

Сервис на компьютере 2

Сервис на компьютере n

Nunit+AddNunit на компьютере n

Nunit+AddNunit на компьютере 1

Nunit+AddNunit на компьютере 2

База данных MSSQL

Запись в базу тестов

Запуск теста

Запуск теста

Запуск теста

Обмен информацией

Обмен информацией

Обмен информацией

Page 27: Parallelization of Selenium tests with .NET/C# + NUnit

Сервис на компьютере 1

Сервис на компьютере 2

Сервис на компьютере n

Nunit+AddNunit на компьютере n

Nunit+AddNunit на компьютере 1

Nunit+AddNunit на компьютере 2

База данных MSSQL

Запись в базу тестов

Запуск теста

Запуск теста

Запуск теста

Сохранение

результатов

Сохранение

результатов

Сохранение

резул

ьтатов

Обмен информацией

Обмен информацией

Обмен информацией

Page 28: Parallelization of Selenium tests with .NET/C# + NUnit

База MSSQLКонфиг XML

Page 29: Parallelization of Selenium tests with .NET/C# + NUnit

Сервис

База MSSQLКонфиг XML

Можн

о запустить

7 тестов

одновременно

Page 30: Parallelization of Selenium tests with .NET/C# + NUnit

Сервис

База MSSQLКонфиг XML

Своб

одны

й тест

на за

пуск

Можн

о запустить

7 тестов

одновременно

Page 31: Parallelization of Selenium tests with .NET/C# + NUnit

Сервис

База MSSQLКонфиг XML

Своб

одны

й тест

на за

пуск

Тест

127

зан

ят

Можн

о запустить

7 тестов

одновременно

Page 32: Parallelization of Selenium tests with .NET/C# + NUnit

Сервис

База MSSQLКонфиг XML

Nunit+AddNunit

Своб

одны

й тест

на за

пуск

Тест

127

зан

ят

Выполнить тест 127

Можн

о запустить

7 тестов

одновременно

Page 33: Parallelization of Selenium tests with .NET/C# + NUnit

Сервис

База MSSQLКонфиг XML

Nunit+AddNunit

Своб

одны

й тест

на за

пуск

Тест

127

зан

ят

Выполнить тест 127

Данные выпо

лнения тест

а 127Можн

о запустить

7 тестов

одновременно

Page 34: Parallelization of Selenium tests with .NET/C# + NUnit

Сервис

Page 35: Parallelization of Selenium tests with .NET/C# + NUnit

AddNunit подписывание на событие

Page 36: Parallelization of Selenium tests with .NET/C# + NUnit

Конфиг XML

Page 37: Parallelization of Selenium tests with .NET/C# + NUnit

Конфиг XML

Запускалка тестов

Список тестов, браузеры,

сервера

Page 38: Parallelization of Selenium tests with .NET/C# + NUnit

Конфиг XML

Запускалка тестов

База MSSQL

Список тестов, браузеры,

сервера

Список тестов для запуска

Page 39: Parallelization of Selenium tests with .NET/C# + NUnit

Конфиг XML

Запускалка тестов

База MSSQL

Список тестов, браузеры,

сервера

Список тестов для запускаУпавшие тесты

Page 40: Parallelization of Selenium tests with .NET/C# + NUnit

Конфиг XML

Запускалка тестов

База MSSQL

Список тестов, браузеры,

сервера

Перезапустить или завершить пул

Список тестов для запускаУпавшие тесты

Page 41: Parallelization of Selenium tests with .NET/C# + NUnit

Запускалка тестов

Page 42: Parallelization of Selenium tests with .NET/C# + NUnit

Правка тестов и новые тесты

Visual Studio

Page 43: Parallelization of Selenium tests with .NET/C# + NUnit

Правка тестов и новые тесты

git

Visual Studio

Push

Page 44: Parallelization of Selenium tests with .NET/C# + NUnit

Правка тестов и новые тесты

git

Visual Studio

Push

CIPull каждую ночь

Page 45: Parallelization of Selenium tests with .NET/C# + NUnit

Правка тестов и новые тесты

git

Visual Studio

Push

CIPull каждую ночь

Сервер 1 Сервер 2 Сервер n

Выкладка

новой в

ерсии

Выкладка

новой

версии Выкладка новой версии

Page 46: Parallelization of Selenium tests with .NET/C# + NUnit

Continuous Integration

Page 47: Parallelization of Selenium tests with .NET/C# + NUnit

Время работы

35,6 ч

Page 48: Parallelization of Selenium tests with .NET/C# + NUnit

Время работы

35,6 ч 5 PC

Page 49: Parallelization of Selenium tests with .NET/C# + NUnit

Время работы

35,6 ч 5 PC 5 Threads

Page 50: Parallelization of Selenium tests with .NET/C# + NUnit

Время работы

35,6 ч 5 PC 5 Threads 2 ч

Page 51: Parallelization of Selenium tests with .NET/C# + NUnit

Расширение

По данным из базы можно строить разные отчеты

Простой перезапуск тестов

Увеличение производительности за счет увеличения количества компьютеров

Можно запускать любые NUnit тетсты

Page 52: Parallelization of Selenium tests with .NET/C# + NUnit

Что все равно пришлось бы дописывать

Selenium Grid + PNUnit Surak

Nunit + +

NunitAdd + +

Runner - +

Service - +

MSSQL + +

Page 53: Parallelization of Selenium tests with .NET/C# + NUnit

Оказалось что не очень большими ресурсами можно заметить связку

Selenium Grid + PNUnit

Page 54: Parallelization of Selenium tests with .NET/C# + NUnit

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

e-mail:[email protected] about.me/stanislav.volkov