how develop test scripts using top 5 most popular test automation frameworks
Quan comenceu a conèixer l’automatització de proves, heu de trobar el terme “marc d’automatització de proves”. Potser alguns de vosaltres us sentiu incòmodes amb aquest terme i comenceu a sentir que és quelcom difícil d’entendre i encara més difícil d’implementar.
Aquest tutorial està escrit amb l'objectiu d'ajudar-vos a entendre els marcs d'automatització de proves de la manera més senzilla possible. Llegiu tots els tutorials ' Les sèries de tutorials de proves d’automatització aquí .
Marc d'automatització de proves (en un llenguatge molt senzill) és un 'conjunt de regles'. Les regles ens ajuden a escriure scripts de manera que resultin en un 'manteniment inferior'.
Per entendre completament el concepte del marc, primer hem d'aprendre com escrivim scripts senzills i després com implementar-los.
A l’automatització de proves, escrivim scripts. L’escriptura consisteix bàsicament en tres ‘A’:
- DISPOSICIÓ
- ACCIÓ
- ASSERVACIÓ
A continuació es detallen els detalls de cada A, amb exemples:
# 1.DISPOSICIÓo Identificació d’objectes
Identifiquem objectes (botons, desplegables, etc.), ja sigui pels seus identificadors, noms o pels seus títols de finestra, etc.
En cas d'aplicació web, ens identifiquem per identificador d'usuari, o per XPath o per CSS o per nom de classe, etc.
Prenem aquest exemple de Selenium WebDriver (amb C #) en què identifiquem objectes mitjançant l’identificador. (Aplicació web)
IWebElement txtServer = _webDriver.FindElement(By.Id('tfsServerURL'));
Un altre exemple de la interfície d'usuari codificada per MS (aplicació d'escriptori)
WinButton btnAdd = new WinButton(calWindow); btnAdd.SearchProperties(WinButton.PropertyNames.Name) = 'Add';
Després de la identificació, organitzem o emmagatzemem aquests objectes a UIMaps o al Repositori d’objectes per tornar-los a utilitzar als nostres scripts. És per això que aquest pas s’anomena DISPOSICIÓ.
# 2.ACCIÓsobre l’objecte identificat
Quan s’identifiquen els objectes, hi realitzem algun tipus d’acció amb el ratolí o amb el teclat.Per exemple, fem clic o fem doble clic, o passem el ratolí per sobre o, de vegades, arrosseguem i deixem anar. De vegades escrivim en quadres de text. Per tant, qualsevol tipus d’acció que realitzem sobre aquests objectes es cobreix en aquest segon pas.
Exemple 1 : (Selenium WebDriver amb C #)
txtServer.Clear(); txtServer.SendKeys(“Some sample text”);
Exemple 2 : (Interfície d'usuari codificada per MS amb C #)
Mouse.Click(buttonAdd);
# 3.ASSERVACIÓ
L’afirmació bàsicament comprova l’objecte amb algun resultat esperat. Per exemple, si premem 2 + 3 a la calculadora, la pantalla hauria de mostrar 5. En aquest cas, el nostre resultat esperat és 5. Aquest concepte ja s’explica al nostre primer tutorial.
Aquí donem un exemple d’afirmació:
Assert.AreEqual('5', txtResult.DisplayText);
Gairebé tots els scripts escrits en automatització de proves contenen aquestes tres coses: arranjament, acció i afirmació.
Vegeu ara un script complet que conté tots aquests passos. El script obrirà una calculadora, premeu 1 + 6 i, a continuació, comproveu si la pantalla mostra 7 o no.
Exemple A:
eines de proves de rendiment per a aplicacions Java
(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(); }
Què aprendreu:
- Què passa amb aquest guió?
- Hi ha cinc marcs populars en automatització de proves:
- # 1. Marc lineal:
- # 2. Marc de modularitat:
- # 3. Marc basat en dades:
- # 4. Marc basat en paraules clau:
- # 5. Marc d'automatització de proves híbrides:
- Conclusió
- Lectura recomanada
Què passa amb aquest guió?
El guió és fàcil d’entendre i espero que obtingueu el concepte de tres ‘A’ a l’exemple anterior. Però tot no està bé amb aquest guió.
Aquest script no permet un manteniment fàcil. Prenem de nou l’exemple de la calculadora, si hem d’escriure casos de prova de cada funció de la calculadora, hi haurà molts casos de prova. Si hi ha 10 casos de prova i en cada prova, hem de definir el mateix objecte; si es produeix algun canvi en el nom o l’identificador de l’objecte, hem de canviar la part d’identificació de l’objecte en 10 casos de prova.
Per exemple, agafeu l'exemple del botó AFEGEIX a l'script.
WinButton btnAdd = new WinButton(calWindow); btnAdd.SearchProperties(WinButton.PropertyNames.Name) = 'Add';
Diguem que aquesta línia s’utilitza en 10 casos de prova. Ara, a la propera versió de la calculadora, el desenvolupador ha canviat el nom del botó de 'Afegeix' a 'Més'. Ara, quan executem els nostres casos de prova, fallaran i hem de canviar la línia anterior a aquesta en 10 casos de prova.
btnAdd.SearchProperties(WinButton.PropertyNames.Name) = 'Plus';
Per tant, hem de millorar aquest cas de prova. Hauríem de seguir el famós principi DRY a la nostra codificació. DRY significa 'No et repeteixis'. Hauríem d’escriure la part d’identificació de l’objecte de manera que l'objecte només s'hauria d'identificar en un lloc i s'hauria de cridar a tot arreu.
Mireu el guió millorat.
Exemple B:
//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(); }
A l'exemple anterior, hem separat el fitxer calWindow i Resultat txt objectes i moveu-los a la part superior perquè es puguin utilitzar en diferents mètodes de prova. Els hem definit una sola vegada i els podem utilitzar en tants casos de prova com vulguem.
També hem creat dues funcions. ClickButton () que accepta un nom de botó i hi fa clic i AddTwoNumbers () que pren dos números qualsevol i afegiu-los amb el fitxer feu clic al botó funció dins seu.
En el moment que comencem a “millorar” el nostre codi i el fem reutilitzable i mantenible, vol dir que estem fent ús de qualsevol marc d’automatització. Ara es posa interessant.
Vegeu també=> Per què necessitem el marc per a l'automatització de proves?
N’hi ha cinc marcs populars en automatització de proves :
- Lineal
- Modularitat
- Basat en dades
- Impulsat per paraules clau
- Híbrid
Ara explicarem cada marc amb l'ajut de les seves característiques.
# 1. Marc lineal:
Característiques
- Tot el relacionat amb un script es defineix dins dels scripts.
- No es preocupa per l'abstracció i la duplicació de codi
- El registre i la reproducció normalment generen codi lineal
- Fàcil de començar
- Malson de manteniment.
En llegir les 5 característiques anteriors de Linear Framework, podem relacionar fàcilment el nostre exemple A amb elles. Aquest exemple s’utilitza bàsicament en un marc lineal. Alguna cosa relacionada amb un script es defineix dins de l’escript. El finestra de trucada i TxtResult es defineixen dins de l'script. A l’escriptura no li importa l’abstracció i la duplicació de codi. També és un malson de manteniment, com he explicat anteriorment.
Llavors, per què hauríem d’utilitzar aquest marc?
com obtenir la clau de seguretat del wifi
Aquest marc es pot utilitzar en projectes de petita escala on no hi ha moltes pantalles d’interfície d’usuari. A més, quan utilitzem qualsevol eina d’automatització per primera vegada, normalment genera codi en forma lineal. Per tant, podem conèixer quin codi genera l'eina d'automatització per a accions específiques. A part d'aquests motius, s'hauria d'evitar aquest marc en els vostres scripts.
=> Vegeu aquí l'exemple de Linear and Keyword Framework amb QTP.
# 2. Marc de modularitat:
Característiques
- Els objectes es defineixen una vegada i es poden reutilitzar en tots els mètodes de prova.
- Es creen mètodes petits i puntuals per a funcionalitats individuals
- El cas de prova és la col·lecció d’aquests petits mètodes i objectes reutilitzables
- Això ens permet escriure codi mantenible.
Llegint les característiques anteriors, podem relacionar el nostre exemple B amb aquestes característiques. En aquest exemple, hem creat una abstracció movent el fitxer calWindow a la part superior i definiu-la dins d’una propietat que es pugui utilitzar a tot arreu. Hem creat dues funcions petites i independents anomenades ClickButton () i AddTwoNumbers () . Combinem aquestes dues petites funcions per crear el nostre script final que prova la funcionalitat 'Afegeix' de la calculadora.
Això fa que el manteniment sigui més fàcil. Si es produeix algun canvi a la interfície d’usuari de la calculadora, només hem de canviar les funcions. Els nostres scripts romandran intactes. Aquest marc s’utilitza molt en automatització. El famós Page Object Framework (que s’utilitza amb Selenium) també és un tipus de marc de modularitat. Distribuïm tota l'aplicació web en pàgines separades. Els botons, desplegables i caselles de selecció de cada pàgina es defineixen dins de la classe d’aquesta pàgina. Si es produeix algun canvi al lloc web, només hem de canviar en aquesta classe de pàgines i la resta de pàgines es mantenen intactes. Això es tradueix en un millor manteniment i facilitat de lectura dels scripts.
L'únic inconvenient d'aquest marc és que requereix bons conceptes orientats a objectes i fortes habilitats de desenvolupament. Si en teniu, es recomana aquest marc.
# 3. Marc basat en dades:
Característiques:
- Les dades de prova (valors d'entrada i sortida) se separen de l'script i s'emmagatzemen a fitxers externs. Pot ser un fitxer CSV, un full de càlcul d'Excel o una base de dades.
- Quan s'executa l'script, aquests valors es recullen de fitxers externs, s'emmagatzemen en variables i substitueixen els valors codificats de manera dura si hi ha.
- Molt útil en llocs on s’ha d’executar el mateix cas de prova amb entrades diferents.
Exemple C:
Volem executar el cas de prova add amb tres entrades diferents.
Les dades són
7 + 2 = 9
5 +2 = 7
3 + 2 = 5
Hem emmagatzemat aquestes dades (tant d’entrada com de sortida) en un fitxer CSV extern.
(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(); }
A l'script anterior, definim la nostra font de dades a la part superior de l'script, que és un fitxer .csv.
Hem donat la ruta d'aquest fitxer CSV i hem dit a l'script que l'analitzi 'Seqüencialment'. Això significa que l'script s'executarà tantes vegades com hi hagi files al fitxer CSV. En el nostre cas, el guió s’executarà 3 vegades. A cada tirada, afegirà els dos números definits a les dues primeres columnes i verificarà que la suma d’aquests dos números coincideixi amb el nombre present a la tercera columna.
Hi ha diversos avantatges d’aquest marc. Tots els valors s’emmagatzemen fora de l’escript, de manera que si es produeix algun canvi en la següent compilació, només hem de canviar les dades del fitxer extern i l’escript romandrà intacte.
El segon avantatge és que es pot executar el mateix script per a diferents entrades. Prenguem l'exemple d'un ERP en el qual haureu de provar el registre de 100 empleats. Podeu escriure un script i emmagatzemar els noms i altres dades relacionades amb els empleats en un fitxer extern. Executareu un script i s’executarà 100 vegades. Cada vegada amb dades de l’empleat diferents. Podeu detectar fàcilment quines dades el script no registra l’empleat. Serà un avantatge addicional quan feu proves negatives.
=> Vegeu aquí l'exemple del framework basat en dades i híbrid amb QTP.
# 4. Marc basat en paraules clau:
Característiques:
- Tant les dades com les accions es defineixen fora de l'script.
- Es requeria el desenvolupament de paraules clau per a diferents tipus d'accions.
- La funcionalitat que hem de provar s’escriu pas a pas de forma tabular mitjançant les paraules clau que desenvolupem i les dades de la prova. Emmagatzemem aquesta taula en fitxers externs igual que el framework basat en dades.
- El guió analitzarà aquesta taula i realitzarà les accions corresponents.
- Permet que el provador manual que no sàpiga sobre la codificació formi part fins a cert punt de l'automatització.
Exemple D:
Hem definit les dades (p. Ex. 1 + 3 = 4), així com les accions (p. Ex., Feu clic, esborra, etc.) en un fitxer Excel en forma de taula.
El guió es convertirà en una cosa així (el codi següent només s’escriu per tal d’entendre-ho)
(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 } }
L'escriptura anterior és només un analitzador del fitxer Excel. Analitza el fitxer Excel línia per línia i busca paraules clau per realitzar accions respectives. Si troba la paraula clau 'Feu clic', farà clic a l'objecte definit. Si troba 'Verifica el resultat', realitzarà l'afirmació.
Hi ha diversos avantatges d’utilitzar el marc basat en paraules clau.
El primer avantatge és que aquest marc és molt útil en aquells escenaris on hi ha grans possibilitats de canvis en casos de prova. Si algun pas canvia en un cas de prova, no cal que toquem el codi. Només hem d’actualitzar el fitxer Excel i l’escriptura s’actualitzarà.
Podeu definir tots els vostres scripts en un fitxer Excel i lliurar-los a verificadors manuals per afegir scripts nous o actualitzar els existents. D'aquesta manera, els verificadors manuals també poden convertir-se en part de l'automatització de proves perquè no necessiten codificar res. Només actualitzaran aquest fitxer Excel quan calgui i els scripts s’actualitzaran automàticament.
El segon avantatge és que el vostre script esdevé independent de l'eina. Podeu mantenir els scripts en un fitxer Excel i, si necessiteu canviar l'eina d'automatització en algun moment, podeu canviar-lo fàcilment escrivint un analitzador Excel en una altra eina.
L’inconvenient d’aquest marc és que cal inventar paraules clau per a diversos tipus d’accions. En projectes a gran escala, hi haurà tantes paraules clau que cal recordar i organitzar els scripts i les paraules clau. Això es converteix en una tasca feixuga en un moment determinat.
En alguns escenaris complexos, on els objectes no es poden identificar fàcilment i necessitem utilitzar coordenades del ratolí i altres tècniques, aquest marc no és molt útil.
Keyword driven continua sent un marc preferit per a molts provadors d'automatització. Marc del robot by Google és un marc popular basat en paraules clau que compta amb el suport d’una comunitat activa.
# 5. Marc d'automatització de proves híbrides:
Característiques:
- La combinació de dues o més de les tècniques anteriors, prenent els seus punts forts i minimitzant els seus punts febles.
- El framework pot utilitzar l'enfocament modular juntament amb un framework basat en dades o basat en paraules clau.
- El framework pot utilitzar scripts per realitzar algunes tasques que podrien ser massa difícils d’implementar en un enfocament pur basat en paraules clau.
En paraules simples, Hybrid Framework, utilitzeu la combinació de les tècniques esmentades anteriorment. Podem utilitzar un marc basat en dades que també té un caràcter modular. Per a alguns casos de prova, podem utilitzar un enfocament basat en paraules clau i, per a la resta, podem utilitzar modulars. Per tant, sempre que barregem dues o més tècniques esmentades en aquest article, realment fem servir un enfocament híbrid.
Conclusió
Espero que aquest marc d’automatització de proves ja no sigui un terme aterrador per a vosaltres. Vaig intentar explicar els marcs més populars de la manera més senzilla possible.
Els marcs són aquí per facilitar-vos la vida. Us ajuden a escriure scripts fiables i mantenibles. Sense utilitzar frameworks, el camp d’automatització de proves és un malson. Per a cada petit canvi de l'aplicació, heu de canviar el codi a centenars de llocs.
Per tant, la comprensió d’aquests marcs és imprescindible per a tots els provadors que vulguin provar l’automatització de les proves.
En la nostra següent tutorial en aquesta sèrie, aprendrem 'Execució i informes de l'automatització de proves'.
Si he trobat a faltar alguna cosa d’aquest article o necessiteu fer alguna pregunta, no dubteu a fer-ho a la secció de comentaris.
PREV Tutorial # 4 | NEXT Tutorial # 6
Lectura recomanada
- Marcs QTP - Marcs d'automatització de proves - Exemples de marcs basats en paraules clau i lineals - Tutorial QTP núm. 17
- Ordres d’automatització SeeTest: una explicació detallada amb exemples
- 10 eines RPA d'automatització de processos robòtics més populars el 2021
- En què es diferencia la planificació de proves per a projectes manuals i d'automatització?
- Marcs d'automatització de proves més populars amb avantatges i inconvenients de cadascun: Selenium Tutorial # 20
- Marc d’automatització de proves sense script: eines i exemples
- Automatització de proves: és una carrera especialitzada? Els verificadors normals també poden fer automatització?
- 25 millors marcs i eines de prova de Java per a proves d'automatització (part 3)