Инфраструктура за тестване на натоварване в облака
Най-трудната част от тестването на натоварване е да започнете. Какво ви е необходимо, за да започнете тестване на натоварване? В общия случай - една машина и таргет сервиз. Този метод е добър точно до момента, в който ресурсите на една машина вече не са достатъчни за генериране на необходимото натоварване.
Една кола вече не е достатъчна – взимаме две. Три. десет. Къде мога да взема десет коли? Попитайте ИТ отдела. Когато тестването на натоварването приключи, уведомете ИТ отдела. Два часа след като ИТ възстанови инфраструктурата, [нещо] е открито и инфраструктурата е необходима отново. Питайки отново - и времето, прекарано от ИТ преди това в разгръщането на инфраструктурата, внезапно се увеличи (никой не знае защо, разбира се).
Обичайната история. Разработчиците искат бързо да започнат работа. Тестването на натоварването е итеративен процес и изграждането на инфраструктура е същото. Ами ако разработчиците имаха тази инфраструктура през цялото време? Персонализирано, по заявка? Изключен, когато не е необходимо да се плати минималната сума? Как да разположите тази инфраструктура, базирана на Visual Studio 2013, ще бъде обсъдено в тази статия. В резултат на това винаги ще имате готова инфраструктура за тестване на натоварване, която просто трябва да включите - и можете да започнете да тествате. В изключено състояние ще се плаща само съхранение за изображения на тези машини.
Цел : Създаване на инфраструктура за тестване на натоварване.
Описание: Цялата инфраструктура ще бъде внедрена във виртуални машини на Microsoft Azure. натоварванетестването в Microsoft Azure може да се извърши по три начина:
- Visual Studio Online (http://www.visualstudio.com/en-us/get-started/load-test-your-app-vs).
- Облачни услуги на Microsoft Azure
- Виртуални машини
Тестови обект
WCF услуга, която излага един синхронен метод (калкулатор) през SOAP. Решението може да се използва за тестване на проекти с всякаква сложност. Услугата може да се хоства както като облачна услуга, така и като обикновена услуга на отделна виртуална машина. Ако услугата се хоства на виртуална машина, тогава по време на процеса на зареждане ще можем да съберем всички необходими (конфигурирани) броячи на производителност от машината. Той обаче няма да има възможността за автоматично мащабиране, която Cloud Service има. Нашата услуга ще разкрие една крайна точка за връзка, basicHttpBinding.
Последователност от стъпки:
Лабораторията ще разположи 4 виртуални машини на Microsoft Azure:
- Test Controller и SQL 2012 Express Server
- Тестващ агент
- Тестова услуга (SUT - Тествана система)
- Visual Studio 2013, в който ще бъде разработен тестът за натоварване
Контролер
Създайте контролер – по време на избор на изображение в Microsoft Azure изберете изображението на Windows 2012 Server R2. Отворете следните портове в настройките на виртуалната машина по време на създаване:
- TCP порт 445 за дистанционно сглобяване на броячи на производителност
- UDP порт 1434 за SQL браузър и TCP 1433 за връзка към SQL сървър
- TCP порт 6901 за връзка с Test Controller`y
- Remote Destop, той е необходим на всички създадени виртуални машини.
Свържете се с виртуалната машина чрез RDP (като щракнете върху бутона Свързване в портала за управление на Microsoft Azure) и изтеглете агенти за Microsoft Visual Studio 2013. Инсталирайте TestController (vstf_testcontroller.exe)

В раздела SQL Server Services активирайте и стартирайте SQL Server Browser и SQL Server услугите.
В настройките на защитната стена разрешете връзки към следните портове:
- изходящи връзки към агента (порт 6910)
- входящи връзки към услугата на контролера 6901
- входящи връзки към услугата RPC за събиране на броячи на производителност - порт 445
- връзка към студиото (LoadTest framework), изходящ порт 6915
- входящи връзки на TCP порт 1433 и UDP 1434
За простота можете да напишете и изпълните bat файл:
netsh advfirewall защитна стена add rule name="Test Agent Out" dir=out action=allow protocol=TCP localport=6910 netsh advfirewall firewall add rule name="Test Controller In" dir=in action=allow protocol=TCP localport=6901 netsh advfirewall firewall add rule name="RPC In" dir=in action=allow proto col=TCP localport=445 netsh advfirewall firewall add rule name="VS Studio Out" dir=out action=allow protocol=TCP localport=6915 netsh advfirewall firewall add rule name="SQL Express" dir=in action=allow protocol=TCP localport=1433 netsh advfirewall firewall add rule name="SQL Browser" dir=в действие=разреши протокол=UDP localport=1434
Отворете клона на системния регистър HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa и добавете параметъра DisableLoopBackCheck DWODR (стойност 1) там. Това решава проблема със свързването към SQL Server от външен домейн. За да може тестващият агент да се свърже с контролера, е необходимо в настройките на IPv4 (мрежов адаптер)регистрирайте DNS суфикс:
Отидете на Test Controller Configuration Tools. В реда за свързване на SQL база данни напишете пълното DNS име на виртуалната машина вместо localhost и щракнете върху Прилагане на настройките.
Процесът на конфигуриране на тестовия контролер ще започне. Последното съобщение ще съдържа предупреждение, на което не трябва да обръщате внимание.
Създайте нова виртуална машина. Когато създавате, отворете следните портове:
- TCP порт 445 за дистанционно сглобяване на броячи на производителност
- TCP порт 6910 за свързване с Test Agent`y
- TCP порт за отдалечен работен плот
Свържете се към създадената машина чрез RDP (чрез щракване върху бутона Свързване) и изтеглете разпространението на тестов агент. Инсталирайте тест агент.
В настройките на защитната стена трябва да разрешите връзки към следните портове:
- входящи връзки към услугата на контролера 6910,
- изходящи връзки към тест контролера 6901,
- входящи връзки към услугата RPC за събиране на броячи на производителност - порт 445,
- изходящи TCP връзки към порта, който тестовата услуга слуша, в нашия случай това е 9117.
bat файл: netsh advfirewall защитна стена add rule name="Test Agent In" dir=in action=allow protocol=TCP localport=6910 netsh advfirewall firewall add rule name="Test Controller Out" dir=out action=allow protocol=TCP localport=6901 netsh advfirewall firewall add rule name="RPC In" dir= in action=allow protocol=TCP localport=445<1 0>netsh advfirewall firewall add rule name="Test service OUT" dir=out action=allow protocol=TCP localport=9117
Посочете суфикса cloudapp.net в DNS настройките на мрежовия адаптер.
Напишете линията за връзка към контролера за тестване (DNS + порт) и щракнетеПриложи.
Ако по време на конфигурация тестовият агент даде грешка, че не е възможно да се установи връзка между контролера и агента, но регистрационният файл показва, че агентът е успял да се свърже с контролера, тогава в този случай в конфигурацията на контролера (на съответната машина) в раздела за настройки на приложения трябва да посочите настройката: />
На тази стъпка трябва да се установи комуникация между агента и контролера.
Виртуална машина с тестова услуга
Като тестов обект беше избрана WCF услуга. Интерфейс: [ServiceContract] публичен интерфейс ICalculator [OperationContract] int Sum(int a, int b, int timeOutInMiliseconds); >
Изходният код, заедно с изпълнимите двоични файлове, могат да бъдат намерени тук (проект CalculatorService). Създайте нова виртуална машина. При създаване отворете портове:
9117 (нашата тестова услуга слуша този порт)
След създаването отворете същите портове в защитната стена на операционната система.
След това използвайте командата sc create NewService binpath=".\Debug\CalculatorService.exe, за да създадете и стартирате тестова услуга от модула за услуги (services.msc).
Създайте нова виртуална машина (Windows 8, с Visual Studio 2013 Ultimate). В конзолата отворете порт 6915. Този порт е необходим на тестовия контролер за комуникация със студиото.
Свържете се с виртуалната машина чрез RDP.
В настройките на защитната стена:
- отворен порт 6915 за входящи връзки,
- отворен порт 6901 за изходящ към контролера,
- изходящи портове UDP 1434 и TCP 1433 за свързване към SQL базата данни,
- изходящ 445 за свързване с RPC (Performance Counter Collection).
Както навсякъде другаде, въведете DNS суфикса на cloudapp.net в IPv4 настройките.
След това трябва да получите достъп за дистанционно събиране на броячи на производителност.
Като machineName можете да изброите всички виртуални машини: контролер, агент, машина с инсталирана тестова услуга.
Стартирайте Visual Studio 2013. Отворете Solution от пакета с решения. Създайте ново решение за уеб производителност и заредете тестов проект. Добавете UnitTestProject1 към него (той съдържа прост тестов метод заедно с обвивка за извикване на тестовата услуга Calculator) В SolutionItems добавете нов файл от тип TestSettings и го отворете. В раздела Роли задайте RemoteExecution и въведете ръчно DNS името на виртуалната машина на контролера.
От менюто Load Test изберете раздела Manage Test Controller и се уверете, че студиото може да се свърже с контролера:
Трябва да се вижда линията за връзка с базата данни и името на агента (ако е активен).
От менюто Load Test изберете Select active test settings => remote.testsettings. Създайте нов LoadTest. В съветника за зареждане на тестове, в раздела Test Mix, добавете теста на единица TestMethod1 от проекта UnitTestProject. Ако не се показва, тогава трябва да затворите съветника и да компилирате отново решението.
В раздела Counter Set добавете машината, на която е инсталирана тестовата услуга (ако искаме да събираме броячи от нея по време на тестване) и изберете поне един от наборите броячи, налични по подразбиране за нея.
Запазете теста. Добавете WCF броячи на производителност за машината за тестова услуга.
За да направите това, щракнете двукратно върху създадения тест за натоварване. С десния бутон на мишката създайте нов набор от броячи. Щракнете с десния бутон върху създадения набор от броячи и изберете Добавяне на броячи. Изберете желания компютър (от който искате да прочетете наличните броячи) и желания брояч.
Щракнете върху OK, след което можете да добавите създадения Counter Set към Counter Set Mapping, така че системата да събира броячи по време на теста.
Сега тестът може да се проведе. Резултатите от всеки тест ще се съхраняват в базата данни LoadTest, автоматично създадена на контролера.
С помощта на плъгини на MS Office можете да изградите много подробен отчет за тестване на натоварване (повече подробности на http://msdn.microsoft.com/en-us/library/ee923686.aspx) - сравнете две изпълнения с всеки брояч (време за реакция, грешки, памет, процесорно време и т.н.) или да начертаете динамиката на всеки брояч в диапазона от тестови изпълнения. Агентите за тестване могат да бъдат мащабирани хоризонтално. Тези. с помощта на конзолата за управление на Microsoft Azure можете да запазите изображение на виртуална машина с тестов агент и да създадете негов клонинг. След като бъде стартиран, той автоматично ще се свърже с контролера.
Благодарение на този подход натоварването може да се генерира от няколко агента наведнъж. Това е необходимо, когато един агент не може да се справи.