Рамка за тестване на бизнес процеси (BPT) в QTP/UFT

Какво е тестване на бизнес процеси?

Тестване на бизнес процеси (BPT) е процес, който привежда процесите на тестване на софтуера в съответствие с бизнес целите, за да намали сложността, потреблението на време и усилията в жизнения цикъл на тестване. Тестването на бизнес процеси е цялостно тестване, което помага да се провери готовността на софтуерното приложение от гледна точка на бизнеса, както и от гледна точка на клиента.

BPT рамка

BPT (тестване на бизнес процеси) рамка е вградена микро фокусирана рамка за автоматизация, използвана с Центъра за качество. BPT помага да се отдадат на бизнес анализаторите или МСП в процеса на автоматизация. Те могат също така да проектират сценариите за автоматизация и да ги изпълняват според техните изисквания, без да имат предварителни познания за автоматизация или кодиране.

Следните са градивните елементи на BPT Framework

  • Компоненти
  • Област на приложение
  • потоци
  • Тест на бизнес процеси

компонент: (нарича се още бизнес компонент) е многократно използваем набор от изрази за автоматизация, който изпълнява определена предварително дефинирана задача в AUT. То е подобно на vbscript функция и QTP действие, но предназначени за използване в BPT рамка.

Област на приложение: Това е хранилище, съдържащо всички ресурси, необходими за разработване на бизнес компоненти. Ресурсите включват споделено хранилище на обекти; функционални библиотеки за многократна употреба… и т.н. Това е логическа единица, чието физическо съществуване не можете да видите във файлова система.

Тест на бизнес процес: Сценарий, включващ сериен поток от бизнес компоненти, предназначен да тества конкретен бизнес процес на приложение.

поток: Понякога трябва да използвате подобни компоненти в един и същи ред в множество BPT. Вместо да добавяте едни и същи компоненти във всеки BPT, можете да създадете поток от бизнес компоненти. Потокът може да бъде извикан директно, вместо да извиква всеки компонент поотделно.

Защо BPT?

Има някои предизвикателства с традиционната автоматизация, споменати по-долу:

  • Липса на координация между ръчните тестери/експерти по предмета и автоматизираните тестери.
  • Няма роля за ръчните тестери в процеса на автоматизация.
  • Липса на стандарти в развитието на автоматизацията.
  • Има шанс за огромни усилия за поддръжка без интелигентна рамка.
  • Обикновено тестерът на автоматизацията няма добри познания за приложенията и е склонен да разработва неефективни скриптове

BPT преодолява горните предизвикателства със стандартизирана рамка, в която включва МСП/ръчни тестери като част от автоматизираното развитие и определя стандартен процес на разработване на BPT.

Ръчните тестери проектират ръчния компонент за необходимата функционалност, която се автоматизира от тестера за автоматизация. Ръчни/автоматизирани тестери ще подредят тези автоматизирани компоненти в последователност, за да формират BPT, който се превръща в тестов сценарий.

BPT дефинира различни роли, изпълнявани от различни ресурси. BPT помага за оптимизиране на използването на ресурсите и тяхната експертиза. Ролите в BPT се класифицират, както следва:

  • EMS
  • QTP експерт
  • тестер

МСП: МСП е a Бизнес анализатор или ръчния тестер, който има добри познания за приложението. Те проектират ръчните бизнес компоненти, които ще тестват конкретно действие или функционалност. Докато проектират ръчните бизнес компоненти, те ясно ще споменат тестовите стъпки и очакваните резултати.

QTP експерт: Експертите на QTP преобразуват ръчния бизнес компонент в автоматизиран компонент чрез автоматизиране на стъпките, споменати в ръчния компонент.

След като компонентите са проектирани, SME или QTP експерт ще организира тези компоненти, за да образуват BPT, което формира тестов сценарий.

Тестер: Тестерът може да бъде ръчен тестер или QTP експерт, който може да изпълни BPT от центъра за качество.

Първи стъпки с BPT

Изисквания към софтуера:

  • QTP/UFT (“QTP Най-новата версия“) Валиден лиценз.
  • Трябва да имате достъп до QC / ALM (последната версия на QC) с модула за бизнес компоненти, който няма да се предлага заедно с QC. Трябва да закупите отделен лиценз за него.

Софтуерни конфигурации:

  • QTP: Активирайте опцията „Разрешаване на други продукти на HP да изпълняват тестове и компоненти“
  • QC: Трябва да се инсталират следните добавки.
  • Добавка за QC свързаност
  • QTP добавка

Внедряване на BPT Framework:

Тъй като това е вградена рамка, не е необходимо да пишете код, за да изградите рамката. Просто трябва да подготвите необходимите артефакти, които изграждат градивните елементи на BPT.

Нека накратко проучим важните модули в Центъра за качество (HP ALM)

Модул за бизнес компоненти: Позволява ни да създаваме, управляваме и автоматизираме бизнес компоненти за многократна употреба, които ще съдържат стъпките за изпълнение на конкретна функция в бизнес процес. Компонентите обикновено се класифицират, както следва-

  • Ръчни компоненти
  • Автоматизирани компоненти
  • Компоненти, управлявани от ключови думи
  • Скриптирани компоненти

Модул за тестов план: Това е модулът, в който плъзгате и пускате компонентите в някакъв логичен ред, за да подготвите BPT, което ще формира един тестов сценарий, и можете да отстранявате грешки в компонентите.

Модул Test Lab: Позволява ни да изпълняваме тестовете на бизнес процесите и да преглеждаме резултатите. Дори вие можете да стартирате паралелно на BPT в различните машини, използвайки този модул.

Типичният процес на автоматизация на BPT включва следните етапи.

  1. Създаване на ръчни компоненти
  2. Автоматизиране на компонентите
  3. Разработване на потока или BPT
  4. Отстраняване на грешки в BPT
  5. Изпълнение на BPT

Стъпка 1) Създаване на ръчни компоненти

Влезте в QC

Създаване на ръчни компоненти

Придвижете се до модула Бизнес компоненти.

Създаване на ръчни компоненти

Бизнес компонентите и папките се идентифицират с конкретни икони в дървото на компонентите, споменато по-долу-

Създаване на ръчни компоненти

папка: използвани за класифициране на вашите компоненти в логическата сегрегация.

Създаване на ръчни компоненти

Папка за заявка на компонент: Ръчните тестери или МСП поставят своите компоненти, които искат да бъдат автоматизирани.

Създаване на ръчни компоненти

Остаряла папка: Можете да преместите всички невалидни компоненти в тази папка, за да можете да прегледате, преди да ги премахнете за постоянно от QC.

Създаване на ръчни компоненти

компонент: Това е символът, който се използва за представяне на компонент. Ръчните бизнес компоненти са представени със символ M върху иконата на компонента. Както е показано по-долу.

Създаване на ръчни компоненти

Компонентът може да бъде с всяко едно от следните състояния в даден момент, което е съответно в процес на разработка, готовност, поддръжка и състояние на грешка.

Създаване на ръчни компоненти
Създаване на ръчни компоненти
Създаване на ръчни компоненти
Създаване на ръчни компоненти

Когато се инициира заявка за компонент в План за тестване модул, тогава той е в състояние „Не е внедрено“ (показано по-долу). Когато този конкретен компонент се премести от папката на заявката в папката на компонента, той се променя на статус „В процес на разработка“.

Създаване на ръчни компоненти

Лента с инструменти в модул Бизнес компонент

Създаване на ръчни компоненти

Създайте новия ръчен бизнес компонент.

Създайте новата папка, за да можете да създадете всички компоненти, свързани с приложението, на едно място.

Изберете папката Компоненти -> Щракнете върху Нова папка

Създаване на ръчни компоненти

Въведете пълното име с някакъв смисъл, за да представите вашето приложение, и щракнете върху OK. Можете дори да създавате подпапки под основната си папка.

Избрана папка, в която искате да създадете компонент -> щракнете върху бутона „Нов компонент“.

Създаване на ръчни компоненти

Въведете име на компонент, което наподобява действието, което ще извърши, което улеснява избора на компоненти, докато подготвяте BPT. Кликнете върху бутона OK.

Създава се нов компонент от дясната страна.

Нека проучим различните раздели на компонента

I. Раздел с подробности: Той съдържа някои основни полета като име на компонент, създаден от, дата на създаване… и т.н.

- Description, има три раздела Резюме, Предварително условие и Следусловие.

в обобщение раздел, можете да споменете краткото описание на функционалността на компонента и неговия резултат.

в Предварително условие раздел споменете състоянието на приложението, което е необходимо за използване на този компонент.

в Пост-условие раздел споменете състоянието на приложението след извършване на стъпките на компонента.

Имайте предвид условията преди и след това, докато създавате логическа последователност от компоненти, за да създадете BPT.

в Дискусионна зона, можете да добавяте коментари, свързани с компонента.

Създаване на ръчни компоненти

II. Раздел „Моментна снимка“: Можете да използвате този раздел, за да заснемете моментна снимка на конкретната страница, към която принадлежи компонентът.

III. Раздел Параметри: Можете да използвате този раздел, ако искате да предавате данни или да извличате данни от компонента. Те са подобни на параметрите за действие/тест в QTP.

Кликнете върху Нова връзка за да добавите новия параметър, трябва да предоставите

  • Име на параметъра: Име на параметъра.
  • Тип стойност: Тип на параметъра (номер, дата, низ, парола… и т.н.).
  • Стойност по подразбиране: Можете да въведете някаква стойност по подразбиране, която може да се използва, ако не сте предали никаква стойност от компонента.
  • Descriptйон: Можете да споменете кратко описание на параметъра.

Създаване на ръчни компоненти

Изходните параметри могат да се добавят или изтриват подобно на входните параметри. Ако искате да върнете стойност(и) от компонента, тогава трябва да използвате изходни параметри.

IV. Раздел Стъпка на проектиране: Съдържа стъпките, които компонентът трябва да изпълни. Бутоните в раздела за дизайн се показват в следния ред.

Добавяне на нова стъпка, редактиране, изтриване, копиране, поставяне, създаване/избиране на параметър, пълен параметър, търсене, височина на ред, запазване и автоматизиране

Създаване на ръчни компоненти

За да добавите стъпката, щракнете върху „Добавяне на нова стъпка“, отваря се редакторът на стъпка на компонента. Въведете името на стъпката, за да опишете стъпката, описание (точната операция, която искате да извършите върху приложението) и очаквания резултат (статус на приложението след изпълнение на стъпката).

Редакторът на стъпки също се отваря, когато изберете стъпка и щракнете върху бутона за редактиране на стъпка.

Имате лентата с инструменти на текстовия редактор в редактора на стъпки, която можете да използвате, за да форматирате низовете като получер, курсив и подчертан.

Създаване на ръчни компоненти

V. Раздел Автоматизация: Ще покаже стъпките за автоматизация, свързани с компонента, ако компонентът вече е автоматизиран. Ще обсъдите подробно тази стъпка в следващата стъпка „Автоматизиране на ръчния компонент“

VI. Раздел Зависимости: Ще покаже връзките на зависимост, които съществуват между други обекти като компоненти, BPT, потоци, тестови ресурси и области на приложение. Разделът Зависимости съдържа следните три раздела

Раздел Ресурси показват областите на приложение (логическо групиране/име на всички ресурси, необходими за автоматизиране на компонента), използвани от компонента.

Използвано от раздел ще покаже подробности за BPTS и потоци, които включват текущо избрания компонент. Ако искате да навигирате до конкретен BPT или поток, можете просто да щракнете върху името на теста или потока, ще бъдете навигирани до модула BPT или поток в плана за тестване.

Област на приложение показва името на приложната област, използвана от компонента, както и мрежите Използвано от и Използване, които показват обектите, които използват приложната област, и ресурсите, които използва приложната област.

VII. Раздел История: Показва промените, направени във всички полета в обект. За всяка промяна ще се покаже времевият печат на промяната и потребителското име, което е направило промяната. Разделът История съдържа два подраздела:

Раздел Регистрационен файл за проверка показва списък с промени, направени в различни полета, времеви печат и потребителски данни.

Бизнес раздел показва различните версии на избрания компонент.

Стъпка 2) Автоматизиране на ръчните компоненти

Изграждане на област на приложение

Областта на приложението е логическа единица, която ни помага да групираме всички необходими ресурси за автоматизиране на приложението или част от приложението. Областта на приложението съдържа споделени хранилища на обекти, библиотеки с функции и всички други настройки, необходими за автоматизиране на компонентите.

Можете да създадете една област на приложение за цялото приложение или колкото се може повече области на приложение за различните части на приложението в зависимост от изискването.

Отворете QTP, File -> New -> Application Area

Той ще покаже следния прозорец, който ще съдържа четирите модула.

Автоматизиране на ръчните компоненти

Обща: Той ще покаже общата информация за областта на приложението, като Име на областта на приложението, Автор, който е създал областта на приложението, Местоположение, Description и свързаните добавки.

Ако искате да премахнете добавки, можете да щракнете върху бутона за промяна и да премахнете ненужните добавки.

Допълнителните настройки съдържат настройките за запис и изпълнение, които са подобни на нормалните настройки за запис и изпълнение и QTP.

Автоматизиране на ръчните компоненти

Можете дори да добавите всякакви сценарии за възстановяване, които искате да свържете с областта на приложението, като използвате опциите за възстановяване. Въз основа на добавките сте избрали други опции за настройки, свързани със средата.

Автоматизиране на ръчните компоненти

Библиотеки с функции

Този модул ще ни помогне да асоциираме всички необходими библиотеки с функции към областта на приложението.

Автоматизиране на ръчните компоненти

Хранилища на обекти

Този модул ще ни помогне да асоциираме необходимите хранилища на споделени обекти, подобни на функционални библиотеки.

Автоматизиране на ръчните компоненти

Ключови думи

Панелът с ключови думи показва всички вградени методи, всички дефинирани от потребителя функции в библиотеките с функции и обектите в хранилище на обекти. Освен това панелът с ключови думи също показва методи и свойства на всички класове тестови обекти, разработени от нас или трета страна, разработени с помощта на разширяемост на добавките.

Автоматизиране на ръчните компоненти

След като добавите необходимите функционални библиотеки, споделени хранилища на обекти и направите необходимите настройки, можете да запазите вашата област на приложение.

Преобразуване на ръчния компонент в автоматизиран компонент

Върнете се в раздела QC и дизайн на конкретния компонент, който искате да автоматизирате. Щракнете върху бутона за автоматизация, както е показано по-долу, и изберете или конвертиране на управляван от ключова дума, или скриптиран компонент. След като компонентът бъде преобразуван в автоматизиран компонент, не можете да го прикриете обратно в ръчен компонент.

Автоматизиране на ръчните компоненти

Автоматизиране на ръчните компоненти

Компонент, управляван от ключови думи

Придвижете се до раздела автоматизация.

Ще се покаже съобщението „За да създадете стъпки, първо трябва да изберете област на приложение, като щракнете върху избраната област на приложение“

Автоматизиране на ръчните компоненти

След като щракнете върху избраната област на приложение, ще се покаже следният прозорец, който ще покаже списъка с налични области на приложение, от които можете да изберете желаната област на приложение.

Автоматизиране на ръчните компоненти

Областта за приложение за избор се показва в долната част на раздела за автоматизация.

Автоматизиране на ръчните компоненти

Можете да автоматизирате компонента по същия начин, както автоматизирате в QTP, като използвате изглед на ключови думи. След автоматизиране стъпките на компонента ще изглеждат както следва

Автоматизиране на ръчните компоненти

Скриптиран компонент

Придвижете се до раздела автоматизация. Той ще покаже бутона Стартиране за стартиране на QTP.

Автоматизиране на ръчните компоненти

Щракнете върху бутона Стартиране (QTP трябва да бъде инсталиран на същата машина), той ще отвори QTP и ще покаже изскачащ прозорец с молба да асоциираме област на приложение към компонента.

Автоматизиране на ръчните компоненти

След като областта на приложението е свързана с Компонента, всички ресурси са достъпни за Компонента, като ги използвате, можете да скриптирате Компонента.

Стъпка 3) Разработване на BPT

BPT могат да бъдат автоматизирани или ръчни тестове. BPT, състоящи се от ръчни бизнес компоненти, могат да се наричат ​​ръчни BPT. BPT, създадени с автоматизираните компоненти, се наричат ​​автоматизирани BPT.

За да създадете ръчни или автоматизирани BPT, трябва да използвате модула Test Plan в QC.

Кликнете върху иконата на модула на плана за тестване в левия страничен панел

Разработване на BPTs

Създайте папка, в която искате да създадете тестове на бизнес процеси, като щракнете върху иконата за добавяне на папка.

Разработване на BPTs

Въведете името на папката и щракнете върху бутона OK

Разработване на BPTs

Кликнете върху иконата „Създаване на нов тест“.

Разработване на BPTs

Изберете Тип тест като „Бизнес процес“ и въведете някакво смислено име за BPT.

Разработване на BPTs

Показва се както следва

Разработване на BPTs

Изберете раздела „Тестов скрипт“ -> и изберете подраздела „Избор на компонент“.

Той ще покаже дървото на компонентния модул с цялата информация за компонента от дясната страна

Разработване на BPTs

Плъзнете и пуснете компонентите в логическия ред, за да формирате бизнес сценария. Можете също така да изберете компонента и да използвате символа със стрелка вместо плъзгане и пускане, както искате. Примерен BPT е показан по-долу след подреждане на компонентите по-долу

Разработване на BPTs

Дори вие можете да поискате новия компонент, ако той не е наличен в дървото на компонентите от самия модул на плана за тестване, като щракнете върху „Заявка за нов компонент“.

След като компонентите са подредени в панела за редактор на тестови скриптове, той се показва като структура от пет колони:

  1. Компонент/поток: Ще покаже компонента заедно с изображението на моментна снимка, ако съдържа.
  2. Статус: Състояние на компонента, може да бъде всяко едно от състоянията, които обсъдихте по-рано.
  3. Вход: Ако имате въведени параметри, те се показват в тази колона.
  4. Изход: Ако имате изходни параметри, те се показват в тази колона.
  5. При повреда: Ще се покаже падащо меню, в което можете да изберете какво искате да направите BPT изпълнението при повреда на компонента. Можете да изберете или да продължите, или да излезете от BPT.

    Разработване на BPTs

Конфигуриране на входни параметри

За да конфигурирате входния параметър за всеки компонент, трябва да щракнете върху връзката за входни параметри в колоната за въвеждане за конкретния компонент или можете също да щракнете с десния бутон върху компонента и да изберете стойности на входния параметър -> итерации.

Разработване на BPTs

След като щракнете върху връзката за входен параметър, се отваря диалоговият прозорец Итерации на компоненти.

Разработване на BPTs

Можете да въведете всички входни параметри за компонента. Ако искате да стартирате компонента няколко пъти, можете да добавите множество итерации, като щракнете върху „Добавяне на итерации“ и въведете данните.

Ако искате да изтриете някоя итерация, първо изберете итерацията и щракнете върху „Изтриване на итерация“, избраната итерация се премахва.

Ако искате да изпълните само избрани итерации, можете да използвате „Избор на итерации“ и можете да изберете набор от итерации, които искате да изпълните, както е показано по-долу.

Разработване на BPTs

Дори можете да импортирате входни параметри от външен файл, разделен със запетая, и можете да експортирате списъка с параметри, който сте използвали за определен компонент, като използвате опциите за импортиране и експортиране.

Когато щракнете върху опцията за импортиране, ще се покаже диалогов прозорец „Файл“, за да ни позволи да изберем необходимия файл, както е показано по-долу.

Разработване на BPTs

След като изберете диалоговия прозорец Map parameter, ще се покаже диалоговият прозорец, в който трябва да картографирате заглавията на колоните във файла към параметрите в компонента. Трябва да направите това упражнение за всички входни параметри.

Разработване на BPTs

Разработване на BPTs

Ако искате да използвате изходните параметри на предишните Компоненти, трябва да щракнете върху квадратчето за отметка на изхода под името на колоната на параметъра.

Прозорецът със списък на изходните параметри се показва със списък на всички изходни параметри на предишните компоненти. Можете да изберете желания изходен параметър от това и да щракнете върху бутона OK.

Разработване на BPTs

Групиране/дегрупиране на компоненти

Понякога, ако искате да групирате компонентите в BPT, за да ги стартирате заедно няколко пъти, трябва да ги групирате заедно. Първо изберете компонентите, които искате да групирате, и щракнете върху изображението на груповите компоненти или изберете компонентите, щракнете с десния бутон и изберете групиране > групови компоненти.

Разработване на BPTs

След групиране на компоненти, ще изглежда по следния начин. Ако искате да разгрупирате компонентите, изберете групата и щракнете върху иконата за разгрупиране на компоненти.

Разработване на BPTs

Добавяне на параметри/итерации към групирани компоненти

Подобно е на начина, по който въвеждате данните за параметър за един Компонент, но единствената разлика е, че когато щракнете върху връзка към който и да е входен параметър на групиран Компонент, ще се покаже входният параметър на всички Компоненти заедно.

Състояние на BPT

Както компонентът има различен статус, BPT също ще има различен статус въз основа на създаването на BPT и неговия напредък. BPT може да бъде всеки един от следните статуси във всеки даден момент.

Разработване на BPTs6 В процес на разработка
Разработване на BPTs7 Готово
Разработване на BPTsПоддръжка на 8
Разработване на BPTs9 Error

Състоянието на BPT може да се определи от състоянието на неговите компоненти. Състоянието на BPT се определя от най-тежкото състояние на всички негови компоненти.

Да предположим например, че имате тест за бизнес процес, който съдържа:

  • 3 готови компонента
  • 1 Компонент за поддръжка
  • 2 Компонент в процес на разработка
  • 1 Компонент за грешка
  • 1 Компонент в процес на разработка (заявен).

В този пример състоянието на теста е грешка, тъй като грешката е най-тежкото състояние на бизнес компонент в теста.

Стъпка 4) Отстраняване на грешки в BPT

След като BPT са проектирани, трябва да стартирате BPT, за да проверите дали компонентите са подредени в правилния ред и данните, които сте предали, работят правилно или не. То е подобно на Тестване нашия скрипт за автоматизация с всички възможни начини (положителни и отрицателни) и данни за проверка на точността на скрипта.

В модула за тест, план щракнете върху бутона Изпълнение или тест за отстраняване на грешки в лентата с инструменти на тестовия скрипт.

Отстраняване на грешки в BPT

След като щракнете върху бутона за изпълнение, се показва прозорецът „Изпълнение или тест за отстраняване на грешки“. В прозореца Run имате две опции за това как искате да стартирате нашия BPT.

  1. Нормален
  2. Debug

    Отстраняване на грешки в BPT

Режим на отстраняване на грешки: Когато стартирате компонент в този режим, по подразбиране той добавя точка на прекъсване на първия ред на компонента, което ще ни помогне да отстраняваме грешки в компонента ред по ред.

Нормален режим: В този режим той работи от началото до края без пауза и продължава веднага към следващия компонент в теста.

Можете да изберете всеки един от режимите за всеки от компонентите в зависимост от вашите изисквания. Ако вече сте проверили някои от компонентите в същия BPT или в друг BPT, можете да преминете директно към нормален режим.

След като изпълнението приключи, ще се покаже резюмето на изпълнението на всички компоненти на BPT.

Отстраняване на грешки в BPT

Стъпка 5) Изпълнение на BPT

След като BPT са разработени и тествани задълбочено, може да се наложи да изпълните тези BPT като част от цикъл на регресия, разум или друг цикъл на тестване.

За да изпълните BPT, трябва да използвате модула Test Lab на QC. Отидете до Test Lab и изберете папката Test plan и Test set, под които искате да стартирате тези BPT.

Изпълнение на BPT

Изберете опцията „Избор на тестове“ от мрежата на тестовата лаборатория, от дясната страна се показва един панел с дървовидна структура на тестов план, където са всички тестови случаи. Изберете BPTs, които искате да изпълните, и щракнете върху бутона със стрелка, BPTs се добавя към „Мрежата за изпълнение“. Дори можете да използвате функцията за плъзгане и пускане, за да изберете BPT, които искате да стартирате.

След като BPT са добавени към мрежата за изпълнение, трябва да щракнете върху бутона „Изпълни“.

След щракване върху бутона "Изпълнение" се показва отделен прозорец "Автоматичен пускач", в който трябва да посочите на коя машина трябва да стартирате тези BPT. Машината, на която искате да стартирате, софтуерът QTP трябва да е наличен. Можете да изпълнявате тестовете на същата машина, на която и вие.

Изпълнение на BPT

След като споменете имената на машините в колоната „Изпълни на хост“, трябва да щракнете върху „Изпълни всички“, ако искате да изпълните всички тестове в прозореца „Автоматично изпълнение“, или изберете „Изпълни“, ако искате да изпълните само избрания BPT.

QC автоматично ще се свърже със споменатата машина и ще изпълни BPT и ще актуализира резултатите обратно към QC със статус Pass или Fail.

Изпълнение на BPT

Ако кликнете два пъти върху конкретния тест, ще се покажат допълнителни и подробни резултати от конкретния тест.

Изпълнение на BPT

Този урок е възможен с приноса на г-н Нарендър Реди Нукала