Інструменти тестування Visual Studio Online, досвід використання і порівняння з ручним підходом

Ця стаття продовжує цикл, розпочатий нашими друзями з Лабораторії Касперського і описує реальний досвід використання інструментів тестування від Microsoft з рекомендаціями та висновками. Автор — інженер з тестування, Ігор Щегловітов (ins4n3 на хабре). Наші статті, присвячені тестування, позначені тегом #mstesting.

Введення

попередньому пості ми розглянули створення інфраструктури для хмарного навантажувального тестування на віртуальних машинах Microsoft Azure. Тепер ми розглянемо інструмент для навантажувального тестування — Visual Studio Online — і порівняємо його з ручним підходом.

Навантажувальне тестування з використанням Visual Studio Online дозволяє автоматично створювати та настроювати всю необхідну інфраструктуру в хмарі — розгортаючи контролер і необхідну кількість агентів з певними настройками. Результати прогону того або іншого тесту завжди залишаються в хмарі базі VS Online, і до них в будь-який момент можна отримати доступ.


Раніше я не використовував даний підхід по 2м основних причин:
— інфраструктура працювала нестабільно і часто падала
— не було можливості зняття лічильників продуктивності з нагружаемой системи,
т. о. результати тестування обмежувалися даними по пропускній здатності.

У Update 3 на Visual Studio 2013 з'явилася можливість прямо в процесі навантажувального тестування динамічно завантажувати необхідні лічильники продуктивності телеметрії Application Insights (детальніше можна прочитати тут, однак тільки для загальної освіти — з часу написання статті сталося багато змін).

Ми розглянемо налаштування Application Insights для простого WCF сервісу Calculator (з попередньої статті), а також протестуємо його на навантаження з допомогою Visual Studio Online.

[ServiceContract]
public interface ICalculator
{
[OperationContract]
int Sum(int a, int b, int timeOutInMiliseconds);
}


Також ми порівняємо новий підхід з описаним в минулому пості.
Нам знадобиться:

— Visual Studio Ultimate 2013 (Update 4),
— Аккаунт Visual Studio Online
— Одна віртуальна машина Microsoft Azure.
— Тестові дані

Завантажити проект, що використовується в статті.
(тепер хостом для WCF сервісу буде не Windows Service, a IIS).

Конфігурування середовища

Створюємо через Azure консоль нову віртуальну машину (я эксперементировал на образі Windows Server 2012 R2). При створенні віртуальної машини слід відкрити 80й порт (HTTP).

Після успішного створення віртуальної машини підключаємося до неї через RDP. Для того, щоб запустити на нашій віртуальній машині WCF HTTP сервіс, слід поставити туди додаткові компоненти (IIS тощо). Робиться це дуже просто:

  • Відкрити Service Manager меню Manage вибрати Add Roles and Feature.
  • На кроці Installation Type, вибрати пункт Role-based or feature based installation.
  • На кроці Features розкрити список фіч .NET Framework 4.5 Features => WCF Services і відзначити чекбоксів HTTP Activation. Інсталятор сам підключить інші залежні компоненти IIS, ASP.NET і тп.
  • Запустити процес установки




Після успішної установки інфраструктури слід задеплоить наш WCF сервіс.
Для цього:
  • З папки з тестовими даними, скопіювати папку Service в будь-яку директорію на віртуальній машині.
  • Відкривати консоль управління IIS (Server Manager=> Tools=> Internet Information Service (IIS))
  • Створити всередині дефолтового веб сайту новий Application з сервісом калькулятора




Далі, для того, щоб переконатися, що все працює правильно, можна прямо в браузері відкрити сервіс — http://localhost/applicationName/Calculator.svc

Має відкритися сторінка, що містить посилання для генерації wsdl



Налаштування Application Insights

Після успішного налаштування віртуальної машини через портал Azure треба створити новий обліковий запис Visual Studio Online (або використовувати вже створений).

Далі перейти в меню управління VS Онлайн в браузері і клікнути по посиланню Application Insights.

За замовчуванням, якщо в Application Insights не додано жодного додатка, то відкриється сторінка налаштування простого тесту, перевіряє доступність певного URL адреси. Це можна пропустити і натиснути посилання І want до monitor something else.
Після цього для подальшої настройки треба будете відповісти на кілька простих запитань (див. скрін)



Далі натиснути Click here to show instructions.

На наступній сторінці треба буде вказати довільне ім'я програми і натиснути Create (якщо бути точніше, то ім'я віртуального контейнера Application Insights, де буде зберігатися діагностична інформація).



Після цього портал автоматично згенерує ApplicationInsights.config (конфіг файл з персональними налаштуваннями діагностики) та інсталятор Microsoft Monitoring Agent.
Далі слід скопіювати ApplicationInsights.config в кореневу папку сервісу Calculator на віртуальній машині і встановити агент.

Зверніть увагу, що під час установки треба поставити галочку



Після установки потрібно перезавантажити IIS.

За замовчуванням ApplicationInsights.config налаштований таким чином, що статистика буде збиратися тільки з декількох базових лічильників продуктивності. Але ми можемо додати в цей файл додаткові лічильники — для цього досить перерахувати в спеціальному вигляді всередині XML секції PerformanceCounters, наприклад:


Для того, щоб дізнатися правильне найменування потрібних лічильників, я рекомендую їх вивантажити через утиліту perfmon. Для цього додайте у Performance Monitor необхідні лічильники, виділіть їх і збережіть правою кнопкою миші в html-формат.



Якщо відкрити збережений файл в блокноті, то там можна подивитися правильне найменування лічильників ось в такому вигляді:



Запуск тестів

Відкрити Visual Studio тестовий солюшин (з тестових даних).
У меню студії Team explorer підключитися до створеного облікового запису Visual Studio Online.



Далі в солюшине відкрити файл Remote.testsetting і на першій же вкладці вибрати Run tests using Visual Studio Online.


Так як у нас дуже простий тест, то додаткові кроки у файлі testsettings можна пропустити. З допомогою цих кроків, можна конфігурувати віртуальні тестові агенти (наприклад, встановити сертифікати, що актуально для HTTPS сервісів, запустити будь сорочки і ін).

Далі в аппконфиге проекту RemoteTestProject треба прописати правильний URI, який прослуховує WCF Service Calculator.

Тепер можна переходити до налаштування навантажувального тесту.

За замовчуванням навантажувальний тест буде запускатися в 250 потоків на 2х одноядерних агентів, тобто кожен агент буде генерувати навантаження в 125 потоків.
Для збільшення кількості агентів, слід використовувати налаштування Run Settings=>Agent Count(Total Cores). Подивитися деякі додаткові настройки, а також можливі проблеми можна посилання.

Для підключення лічильників продуктивності Application Insights необхідно правою мишею натиснути Run Settings => Get Performance Data from Application Insights та вибрати цікавлять лічильники.



Під час запуску навантажувальних тестів Visual Studio Online почне виділяти ресурси для агентів



Після того, як ресурси буде виділено, почнеться сам навантажувальний тест



Лічильники продуктивності Application Insights у процесі навантажувального тесту будуть на вкладці Application


Після завершення тесту звіт можна завантажити і подивитися в звичному вигляді



Порівняння методик

Для експерименту я провів навантажувальне тестування даного WCF сервісу із застосуванням обох підходів.

У першому випадку я розгорнув 2е одноядерні віртуальні машини і встановив на них Агенти Visual Studio. Поставив локальний контролер і запустив тест. В результаті два агента змогли згенерувати навантаження приблизно в 500 викликів в секунду, при цьому завантаження CPU на обох агентів доходила до 100%, в той же час завантаження процесора на віртуальній машині з тестовим сервісом становила приблизно 15-20% (основний внесок природно вносив процес w3wp).

Повторив даний тест, але із застосуванням Visual Studio Online + Application Insights (Agent total count = 2). Результат виявився ідентичним першому, 2а одноядерних хмарних агента генерували безперервну навантаження приблизно 500 запитів в секунду. Дочекавшись завершення тесту, я скачав звіт і виявив, що на віртуальних агентів CPU також був завантажений на 100%



Збільшення числа ядер агентів до 4х, показало майже лінійне зростання навантаження в середньому майже до 800 запитів в секунду (завантаження сервера при цьому становила в середньому 40%).
Таким чином я припустив — наш простенький WCF сервіс Calculator здатний витримати навантаження в 3000 паралельних запитів в секунду (працюючи на одноядерної машині) з урахуванням того, що ми ще в запиті передаємо таймаут 1 мс.
Насправді все виявилося не так. Коли я запустив навантажувальний тест на 10 агентів (250 потоків), максимальна продуктивність склала приблизно 1000 запитів в секунду, при цьому агенти були недовантажені (завантаження CPU 30%), а сервер перевантажений (CPU 100%).

Я почав розбиратися і переписав свій навантажувальний тест, так, щоб побачити зростання залежності CPU сервера від зростаючого навантаження. Кожні 10 секунд навантаження зростала на 5 користувачів.

Приблизно на позначці 100 користувачів спостерігається максимальну продуктивність ~1000 запитів в секунду, подальше збільшення навантаження призводить до швидкої деградації CPU сервера Calculator.



Висновок

VS Online дозволяє піднімати хмарну інфраструктуру навантажувального тестування, необхідної потужності, практично перемиканням однієї кнопки. Причому варто відзначити, що ця інфраструктура нічим не поступається класичної (з агентами і контролером). Тепер про ціну. Application Insights на поточний момент знаходиться у Preview і надається безкоштовно. Одна хвилина віртуального користувача коштує 1 копійку, т. о. навантажувальний тест 1000 віртуальних користувачів на 10 хвилин, обійдеться вам приблизно в 100 рублів (незалежно на одному агента у вас генерується навантаження або 10).

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.