how develop test scripts using top 5 most popular test automation frameworks
Када почнете да учите о аутоматизацији тестова, морате наићи на израз „оквир аутоматизације тестова“. Можда се некима од вас не свиђа овај термин и почне осећати да је то нешто што је тешко разумети, а још теже применити.
Овај водич је написан са циљем да вам помогне да што једноставније разумете оквире за аутоматизацију тестирања. Прочитајте све водиче у овоме ' Овде ћете пронаћи серију Туториали за испитивање аутоматизације .
узорак животописа за искусног тестера софтвера
Оквир за аутоматизацију испитивања (на врло једноставном језику) је „скуп правила“. Правила нам помажу да пишемо скрипте на такав начин што резултира „нижим одржавањем“.
Да бисмо у потпуности разумели концепт оквира, прво морамо научити како пишемо једноставне скрипте, а затим како на њима применити оквир.
У аутоматизацији тестова пишемо скрипте. Скриптирање се у основи односи на три „А“:
- АРАНЖМАН
- ПОСТУПАК
- УТВРЂИВАЊЕ
Испод су детаљи сваког А, са примерима:
# 1.АРАНЖМАНили идентификација објекта
Објекте (дугмад, падајуће листе итд.) Идентификујемо било по њиховим ИД-овима, именима или према насловима прозора итд.
У случају веб апликације, идентификујемо према корисничком ИД-у, или према КСПатх-у или према ЦСС-у или према називу класе итд. Ако ништа не успе, идентификујемо објекте помоћу координата миша (Али то није поуздан метод идентификације објекта)
Узмимо овај пример Селениум ВебДривер (са Ц #) у којем идентификујемо објекте помоћу ид-а. (Веб апликација)
IWebElement txtServer = _webDriver.FindElement(By.Id('tfsServerURL'));
Још један пример из МС Цодед УИ (десктоп апликација)
WinButton btnAdd = new WinButton(calWindow); btnAdd.SearchProperties(WinButton.PropertyNames.Name) = 'Add';
Након идентификације, уређујемо или складиштимо ове објекте у УИМапс или Објецт Репоситори да бисмо их поново користили у нашим скриптама. Због тога се овај корак назива АРАНЖМАН.
#два.ПОСТУПАКна Идентификованом објекту
Када се објекти идентификују, извршимо неку врсту радњи над њима или мишем или тастатуром.На пример, или кликнемо, или двокликнемо, или задржимо показивач миша изнад њега или понекад повучемо-повучемо. Понекад пишемо у оквире за текст. Дакле, било која врста радње коју извршимо над овим објектима покривена је у овом другом кораку.
Пример 1 : (Селениум ВебДривер са Ц #)
txtServer.Clear(); txtServer.SendKeys(“Some sample text”);
Пример 2 : (МС кодирано корисничко сучеље са Ц #)
Mouse.Click(buttonAdd);
# 3.УТВРЂИВАЊЕ
Тврдња је у основи провера објекта са неким очекиваним резултатом. На пример, ако притиснемо 2 + 3 на калкулатору, на екрану ће се приказати 5. У овом случају, наш очекивани резултат је 5. Овај концепт је већ објашњен у нашем првом упутству.
Овде наводимо пример тврдње:
Assert.AreEqual('5', txtResult.DisplayText);
Готово свака скрипта написана у аутоматизацији тестова садржи ове три ствари: Аранжман, Акција и Утврђивање.
Сада погледајте комплетну скрипту која садржи све ове кораке. Скрипта ће отворити калкулатор, притисните 1 + 6, а затим проверите да ли се на екрану приказује 7 или не.
Пример А.:
(TestMethod) (TestMethod) public void TestCalculator() { var app = ApplicationUnderTest.Launch('C:\Windows\System32\calc.exe'); //Object identification part (ARRANGEMENT) //----*Calculator Window----*// WinWindow calWindow = new WinWindow(app); calWindow.SearchProperties(WinWindow.PropertyNames.Name) = 'Calculator'; calWindow.SearchProperties(WinWindow.PropertyNames.ClassName) = 'CalcFrame'; //----*Button1 ----*// WinButton btn1 = new WinButton(calWindow); btn1.SearchProperties(WinButton.PropertyNames.Name) = '1'; //----*Button Add ----*// WinButton btnAdd = new WinButton(calWindow); btnAdd.SearchProperties(WinButton.PropertyNames.Name) = 'Add'; //----*Button 6 ----*// WinButton btn6 = new WinButton(calWindow); btn6.SearchProperties(WinButton.PropertyNames.Name) = '6'; //----*Button Equals ----*// WinButton btnEquals = new WinButton(calWindow); btnEquals.SearchProperties(WinButton.PropertyNames.Name) = 'Equals'; //----*Text Box Results----*// WinText txtResult = new WinText(calWindow); txtResult.SearchProperties(WinText.PropertyNames.Name) = 'Result'; //(ACTIONS Part) // Click '1' button Mouse.Click(btn1); // Click 'Add' button Mouse.Click(btnAdd); // Click '6' button Mouse.Click(btn6); // Click 'Equals' button Mouse.Click(btnEquals); //evaluate the results (ASSERTIONS) Assert.AreEqual('7', txtResult.DisplayText, “Screen is not displaying 7); //close the application app.Close(); }
Шта ћете научити:
- Шта није у реду са том скриптом?
- Постоји пет популарних оквира у аутоматизацији тестова:
- # 1. Линеарни оквир:
- # 2. Оквир модуларности:
- # 3. Оквир вођен подацима:
- # 4. Оквир вођен кључним речима:
- # 5. Оквир хибридне аутоматизације теста:
- Закључак
- Препоручено читање
Шта није у реду са том скриптом?
Скрипт је једноставан за разумевање и надам се да ћете у горњем примеру добити концепт три „А“. Али са тим сценаријем није све у реду.
Ова скрипта не омогућава лако одржавање. Узмимо поново пример калкулатора, ако морамо да напишемо тест случајеве сваке функције калкулатора, биће много тест случајева. Ако постоји 10 тест случајева и у сваком тесту морамо да дефинишемо исти објекат, онда ако дође до било какве промене у имену или ид објекта, морамо да променимо део за идентификацију објекта у 10 тест случајева.
На пример, узмимо пример дугмета АДД у скрипти.
WinButton btnAdd = new WinButton(calWindow); btnAdd.SearchProperties(WinButton.PropertyNames.Name) = 'Add';
Рецимо, ова линија се користи у 10 тест случајева. Сада је у следећој верзији калкулатора програмер променио име дугмета из „Додај“ у „Плус“. Сада када покренемо своје тест случајеве, они неће успети и горњи ред морамо променити у овај у 10 тест случајева.
btnAdd.SearchProperties(WinButton.PropertyNames.Name) = 'Plus';
Зато морамо побољшати овај тест случај. У свом кодирању требало би да следимо чувени принцип СУВА. ДРИ је скраћеница од „Не понављајте се“. Део за идентификацију објекта требали бисмо написати на такав начин да објекат треба идентификовати само на једном месту и свуда га треба звати.
Погледајте побољшану скрипту.
основна питања и одговори на интервју за техничку подршку
Пример Б.:
//defining the objects outside the script and only once. ApplicationUnderTest app = null; public WinWindow calWindow { get { WinWindow _calWindow = new WinWindow(app); _calWindow.SearchProperties(WinWindow.PropertyNames.Name) = 'Calculator'; _calWindow.SearchProperties(WinWindow.PropertyNames.ClassName) = 'CalcFrame'; return _calWindow; } } public WinText txtResult { get { WinText _txtResult = new WinText(calWindow); _txtResult.SearchProperties(WinText.PropertyNames.Name) = 'Result'; return _txtResult; } } //making functions for similar kind of tasks public void ClickButton(string BtnName) { WinButton button = new WinButton(calWindow); button.SearchProperties(WinButton.PropertyNames.Name) = BtnName ; Mouse.Click(button); } public void AddTwoNumbers(string number1, string number2) { ClickButton(number1); ClickButton('Add'); ClickButton(number2); ClickButton('Equals'); } //Test case becomes simple and easy to maintain. (TestMethod) public void TestCalculatorModular() { app = ApplicationUnderTest.Launch('C:\Windows\System32\calc.exe'); //do all the operations AddTwoNumbers('6', '1'); //evaluate the results Assert.AreEqual('7', txtResult.DisplayText, “screen is not displaying 7”); //close the application app.Close(); }
У горњем примеру смо одвојили цалВиндов и тктРесулт објекте и преместите их на врх тако да се могу користити у различитим методама испитивања. Дефинисали смо их само једном и можемо их користити у онолико тест случајева колико желимо.
Такође смо креирали две функције. ЦлицкБуттон () који прихвата име дугмета и кликће на њега и АддТвоНумберс () која узима било која два броја и сабира их помоћу кликните на дугме функција унутар њега.
Оног тренутка када почнемо да „унапређујемо“ наш код и чинимо га поновним за употребу и одржавањем, то значи да користимо било који оквир за аутоматизацију. Сад постаје занимљиво.
Такође видети=> Зашто нам је потребан оквир за аутоматизацију испитивања?
Постоје пет популарних оквира у аутоматизацији тестова :
- Линеарно
- Модуларност
- Дата Дривен
- Кључне речи вођене
- Хибрид
Сада ћемо објаснити сваки оквир помоћу његових карактеристика.
# 1. Линеарни оквир:
Карактеристике
- Све што је повезано са скриптом дефинисано је унутар скрипти.
- Не брине о апстракцији и дуплицирању кода
- Снимање и репродукција обично генеришу линеарни код
- Лако је започети
- Ноћна мора одржавања.
Читајући горњих 5 карактеристика Линеарног оквира, можемо лако повезати наш Пример А са њима. Овај пример у основи користи Линеарни оквир. У скрипти је дефинисано све што је повезано са скриптом. Тхе прозор позива и ТктРесулт су дефинисани унутар скрипте. Скрипту није стало до апстракције и дуплицирања кода. То је такође и ноћна мора за одржавање као што сам раније објаснио.
Па зашто бисмо требали користити овај оквир?
Овај оквир се може користити у малим пројектима где нема много екрана корисничког интерфејса. Такође, када први пут користимо било који алат за аутоматизацију, он обично генерише код у линеарном облику. Тако можемо сазнати који код генерише алатка за аутоматизацију за одређене радње. Осим ових разлога, овај оквир треба избегавати у скриптирању.
=> Погледајте овде пример Линеарног оквира и оквира кључних речи са примером КТП.
# 2. Оквир модуларности:
Карактеристике
- Објекти су дефинисани једном и могу се поново употребити у свим методама испитивања.
- Мале и прецизне методе су створене за појединачне функционалности
- Тест случај је прикупљање ових малих метода и предмета за вишекратну употребу
- То нам омогућава да напишемо одрживи код.
Читајући горње карактеристике, можемо повезати наш Пример Б са овим карактеристикама. У том примеру креирали смо апстракцију померајући цалВиндов на врх и дефинишите га унутар својства које се може користити свуда. Створили смо две мале и независне функције тзв ЦлицкБуттон () и АддТвоНумберс () . Комбинујемо ове две мале функције да бисмо креирали коначну скрипту која тестира функцију „Додај“ калкулатора.
То резултира лакшим одржавањем. Ако се догоди било каква промена у корисничком интерфејсу калкулатора, морамо да променимо само функције. Наше скрипте ће остати нетакнуте. Овај оквир се веома користи у аутоматизацији. Чувени Паге Објецт Фрамеворк (који се користи са Селениум-ом) такође је врста оквира модуларности. Целу веб апликацију дистрибуирамо на засебне странице. Дугмад, падајући мени и поља за потврду сваке странице дефинисани су унутар класе те странице. Ако се на веб локацији догоди било каква промена, морамо да се променимо само у тој класи страница, а остале странице остају нетакнуте. То резултира бољим одржавањем и лакшом читљивошћу скрипти.
Једина мана овог оквира је што захтева добре објектно оријентисане концепте и јаке развојне вештине. Ако их имате, овај оквир се топло препоручује.
# 3. Оквир вођен подацима:
Карактеристике:
- Подаци за тест (улазне и излазне вредности) одвојени су од скрипте и чувају се у спољним датотекама. То може бити датотека ЦСВ, Екцел табела или база података.
- Када се скрипта изврши, ове вредности се бирају из спољних датотека, чувају у променљивим и замењују тврдо кодиране вредности ако су присутне.
- Заиста корисно на местима где се исти тест случај мора покретати са различитим улазима.
Пример Ц.:
Желимо да покренемо тест примера додавања са три различита улаза.
Подаци су
7 + 2 = 9
5 + 2 = 7
3 + 2 = 5
Те податке (и улазне и излазне) сачували смо у спољној ЦСВ датотеци.
(DataSource('Microsoft.VisualStudio.TestTools.DataSource.CSV', '|DataDirectory|\data.csv', 'data#csv', DataAccessMethod. Sequential ), DeploymentItem('TestCalc\data.csv'), TestMethod) public void TestCalculatorDataDrivsen() { app = ApplicationUnderTest.Launch('C:\Windows\System32\calc.exe'); //do all the operations AddTwoNumbers(FromCSV.ADD1, FromCSV.ADD2); //evaluate the results Assert.AreEqual(FromCSV.Sum, txtResult.DisplayText); //close the application app.Close(); }
У горњој скрипти дефинишемо извор података на врху скрипте, а то је .цсв датотека.
Дали смо пут до датотеке.ЦСВ и поручили скрипти да је рашчлани у „Секвенцијално“. То значи да ће се скрипта покренути онолико пута колико има редова у ЦСВ датотеци. У нашем случају, скрипта ће се покренути 3 пута. У сваком извођењу додаће два броја дефинисана у прве две колоне и проверити да ли збир ова два броја одговара броју присутном у трећој колони.
Постоје разне предности овог оквира. Све вредности се чувају изван скрипте, па ако се догоди нека промена у следећој верзији, само морамо да променимо податке у спољној датотеци и скрипта ће остати нетакнута.
Друга предност је што се иста скрипта може покретати за различите улазе. Узмимо пример ЕРП-а у којем морате да тестирате регистрацију 100 запослених. Можете написати једну скрипту и имена и друге податке који се односе на запослене сместити у спољну датотеку. Извршићете једну скрипту и она ће се покренути 100 пута. Сваки пут са различитим подацима запослених. Можете лако открити на којим подацима скрипта не успева да региструје запосленог. То ће бити додатна предност када радите негативно тестирање.
=> Погледајте овде пример података и Хибрид фрамеворк-а са примером КТП.
# 4. Оквир вођен кључним речима:
Карактеристике:
- И подаци и акције дефинисани су изван скрипте.
- Било је потребно развити кључне речи за различите врсте акција.
- Функционалност коју морамо да тестирамо написана је корак по корак у табеларном облику користећи кључне речи које развијамо и податке о тесту. Ову табелу чувамо у спољним датотекама баш као оквир вођен подацима.
- Скрипта ће рашчланити ову табелу и извршити одговарајуће радње.
- Омогућава ручном испитивачу који не зна за кодирање да буде донекле део аутоматизације.
Пример Д.:
како направити јира контролну таблу
Дефинисали смо податке (нпр. 1 + 3 = 4) као и радње (нпр. Клик, Обриши итд.) У екцел датотеци у табеларном облику.
Скрипта ће постати нешто слично (доњи код је написан само ради разумевања)
(TestMethod) public void TestCalculator() { app = ApplicationUnderTest.Launch('C:\Windows\System32\calc.exe'); Table tb = ReadFromExcel(); Foreach(WinRow row in tb) { WinCell Window = row.Cells(“Window”); WinCell Control = row.Cells(“Control”); WinCell Action = row.Cells(“Action”); WinCell Arguments = row.Cells(“Arguments”); UITestControl c = GetControl(Control.Text,Window.Text); If(Action.Text == “Click”) Mouse.Click (c); If (Action.Text == “Clear”) c.Clear(); if(Action.Text == “Verify Result”) Assert.AreEqual(c.Text, Arguments.Text) //….and so on } }
Горња скрипта је само парсер екцел датотеке. Анализира екцел датотеку ред по ред и тражи кључне речи за извршавање одговарајућих радњи. Ако пронађе кључну реч „Кликните“, кликнуће на дефинисани објекат. Ако пронађе „Верифи Ресулт“, извршиће тврдњу.
Постоје разне предности употребе оквира вођеног кључним речима.
Прва предност је што је овај оквир веома користан у оним сценаријима где постоје велике шансе за промене у тест случајевима. Ако се било који корак промени у тест случају, не треба да додирујемо код. Морамо само да ажурирамо екцел датотеку и скрипта ће бити ажурирана.
Можете дефинисати све своје скрипте у екцел датотеци и предати ову екцел датотеку ручним тестерима да додају нове скрипте или ажурирају постојеће. На овај начин ручни тестери такође могу постати део аутоматизације испитивања јер не требају ништа кодирати. Они ће само ажурирати ову екцел датотеку по потреби и скрипте ће се аутоматски ажурирати.
Друга предност је што ваша скрипта постаје независна од алата. Своје скрипте можете одржавати у екцел датотеци и ако у неком тренутку требате да промените свој алат за аутоматизацију, можете га лако променити тако што ћете написати екцел парсер у другом алату.
Лоша страна овог оквира је та што требате измислити кључне речи за разне врсте радњи. У великим пројектима биће толико кључних речи да морате да запамтите и организујете своје скрипте и кључне речи. То само по себи постаје гломазан задатак.
У неким сложеним сценаријима, где се објекти не могу лако идентификовати и морамо користити координате миша и друге технике, овај оквир није од велике помоћи.
Кључне речи и даље су омиљени оквир за многе тестере аутоматизације. Робот фрамеворк би Гоогле је популаран оквир вођен кључним речима који подржава активна заједница.
# 5. Оквир хибридне аутоматизације теста:
Карактеристике:
- Комбинација две или више горе наведених техника, узимајући из њихових снага и умањујући њихове слабости.
- Оквир може користити модуларни приступ заједно са оквиром на основу података или кључним речима.
- Оквир може користити скрипте за извршавање неких задатака који би могли бити превише тешки за имплементацију у чистом приступу вођеном кључним речима.
Једноставним речима, хибридни оквир, користите комбинацију горе поменутих техника. Можемо користити оквир вођен подацима који је такође модуларне природе. За неке тест случајеве можемо користити приступ базиран на кључним речима, а за остале можемо користити модуларни. Дакле, кад год помешамо две или више техника поменутих у овом чланку, ми заправо користимо хибридни приступ.
Закључак
Надам се да оквир аутоматизације тестова за вас више није застрашујући појам. Покушао сам да објасним најпопуларније оквире што једноставније.
Оквири су ту да вам олакшају живот. Они вам помажу да напишете одрживе и поуздане скрипте. Без употребе оквира, поље аутоматизације теста је ноћна мора. За сваку мању промену у апликацији морате да промените код на стотине места.
Дакле, разумевање ових оквира је неопходно за сваког испитивача који жели да проба аутоматизацију теста.
У нашем следећи водич у овој серији ћемо научити „Извршење и извештавање о аутоматизацији тестова“.
Ако сам нешто пропустио у овом чланку или морате да поставите било које питање, слободно питајте у одељку за коментаре.
ПРЕВ Туториал # 4 |. | СЛЕДЕЋА Лекција # 6
Препоручено читање
- КТП Фрамеворкс - Тест Аутоматион Фрамеворкс - Примери вођени кључним речима и линеарни оквири - КТП водич # 17
- Команде СееТест Аутоматион: Детаљно објашњење са примерима
- 10 најпопуларнијих РПА алата за аутоматизацију роботизованих процеса 2021. године
- Како се разликује планирање теста за ручне и аутоматизационе пројекте?
- Најпопуларнији оквири за аутоматизацију тестова са разлозима за и против - Селен Туториал # 20
- Оквир за аутоматизацију тестова без скрипти: алати и примери
- Тест аутоматизација - да ли је то специјализована каријера? Да ли могу и нормални тестери да раде аутоматизацију?
- 25 најбољих Јава оквира за тестирање и алата за аутоматско тестирање (3. део)