how develop test scripts using top 5 most popular test automation frameworks
Wenn Sie anfangen, sich mit Testautomatisierung vertraut zu machen, müssen Sie auf den Begriff „Testautomatisierungs-Framework“ stoßen. Vielleicht fühlen sich einige von Ihnen mit diesem Begriff unwohl und fühlen, dass er schwer zu verstehen und noch schwieriger umzusetzen ist.
Dieses Tutorial soll Ihnen helfen, Testautomatisierungs-Frameworks so einfach wie möglich zu verstehen. Lesen Sie hier alle Tutorials ' Hier finden Sie eine Reihe von Tutorials zu Automatisierungstests .
Testautomatisierungs-Framework (in sehr einfacher Sprache) ist 'Regelwerk'. Regeln helfen uns, Skripte so zu schreiben, dass sie weniger Wartung benötigen.
Um das Konzept des Frameworks vollständig zu verstehen, müssen wir zuerst lernen, wie wir einfache Skripte schreiben und dann ein Framework darauf implementieren.
In der Testautomatisierung schreiben wir Skripte. Bei der Skripterstellung geht es im Wesentlichen um drei A:
- ANORDNUNG
- AKTION
- BEHAUPTUNG
Nachfolgend finden Sie die Details zu jedem A mit Beispielen:
# 1.ANORDNUNGoder Objektidentifikation
Wir identifizieren Objekte (Schaltflächen, Dropdowns usw.) entweder anhand ihrer IDs, Namen oder anhand ihrer Fenstertitel usw.
Im Falle einer Webanwendung identifizieren wir uns anhand der Benutzer-ID oder anhand von XPath oder CSS oder anhand des Klassennamens usw. Wenn nichts funktioniert, identifizieren wir Objekte mithilfe von Mauskoordinaten (dies ist jedoch keine zuverlässige Methode zur Objektidentifizierung).
Nehmen Sie dieses Beispiel von Selenium WebDriver (mit C #), in dem wir Objekte anhand der ID identifizieren. (Internetanwendung)
IWebElement txtServer = _webDriver.FindElement(By.Id('tfsServerURL'));
Ein weiteres Beispiel aus MS Coded UI (Desktop-Anwendung)
WinButton btnAdd = new WinButton(calWindow); btnAdd.SearchProperties(WinButton.PropertyNames.Name) = 'Add';
Nach der Identifizierung ordnen oder speichern wir diese Objekte in UIMaps oder Object Repository, um sie in unseren Skripten wiederzuverwenden. Deshalb wird dieser Schritt ARRANGEMENT genannt.
#zwei.AKTIONauf dem identifizierten Objekt
Wenn die Objekte identifiziert sind, führen wir eine Aktion entweder mit der Maus oder mit der Tastatur aus.Zum BeispielEntweder wir klicken oder wir doppelklicken oder wir bewegen den Mauszeiger darüber oder manchmal ziehen wir per Drag & Drop. Manchmal schreiben wir in Textfelder. Jede Art von Aktion, die wir an diesen Objekten ausführen, wird in diesem zweiten Schritt behandelt.
Beispiel 1 : (Selenium WebDriver mit C #)
txtServer.Clear(); txtServer.SendKeys(“Some sample text”);
Beispiel 2 : (MS-codierte Benutzeroberfläche mit C #)
Mouse.Click(buttonAdd);
#3.BEHAUPTUNG
Die Behauptung überprüft im Grunde das Objekt mit einem erwarteten Ergebnis. Wenn wir beispielsweise 2 + 3 auf dem Taschenrechner drücken, sollte auf dem Bildschirm 5 angezeigt werden. In diesem Fall ist unser erwartetes Ergebnis 5. Dieses Konzept wird bereits in unserem ersten Tutorial erläutert.
Hier geben wir ein Beispiel für die Behauptung:
Assert.AreEqual('5', txtResult.DisplayText);
Nahezu jedes in der Testautomatisierung geschriebene Skript enthält die folgenden drei Elemente: Anordnung, Aktion und Behauptung.
Schauen Sie sich nun ein vollständiges Skript an, das alle diese Schritte enthält. Das Skript öffnet einen Taschenrechner, drückt 1 + 6 und prüft dann, ob auf dem Bildschirm 7 angezeigt wird oder nicht.
Beispiel A.::
(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(); }
Was du lernen wirst:
- Was ist los mit diesem Skript?
- In der Testautomatisierung gibt es fünf gängige Frameworks:
- # 1. Lineares Gerüst:
- # 2. Modularitätsrahmen:
- #3. Datengesteuertes Framework:
- # 4. Keyword-gesteuertes Framework:
- # 5. Hybrid Test Automation Framework:
- Fazit
- Literatur-Empfehlungen
Was ist los mit diesem Skript?
Das Skript ist leicht zu verstehen und ich hoffe, Sie erhalten das Konzept von drei 'A' im obigen Beispiel. Aber mit diesem Skript ist nicht alles in Ordnung.
Dieses Skript ermöglicht keine einfache Wartung. Nehmen wir noch einmal das Beispiel eines Taschenrechners. Wenn wir Testfälle für jede Funktion des Taschenrechners schreiben müssen, gibt es viele Testfälle. Wenn es 10 Testfälle gibt und wir in jedem Test dasselbe Objekt definieren müssen. Wenn sich der Name oder die ID des Objekts ändert, müssen wir den Objektidentifikationsteil in 10 Testfällen ändern.
Zum BeispielNehmen Sie das Beispiel der Schaltfläche HINZUFÜGEN im Skript.
WinButton btnAdd = new WinButton(calWindow); btnAdd.SearchProperties(WinButton.PropertyNames.Name) = 'Add';
Angenommen, diese Zeile wird in 10 Testfällen verwendet. In der nächsten Version des Rechners hat der Entwickler den Namen der Schaltfläche von 'Hinzufügen' in 'Plus' geändert. Wenn wir nun unsere Testfälle ausführen, werden sie fehlschlagen und wir müssen die obige Zeile in 10 Testfällen ändern.
btnAdd.SearchProperties(WinButton.PropertyNames.Name) = 'Plus';
Also müssen wir diesen Testfall verbessern. Wir sollten bei unserer Codierung dem berühmten DRY-Prinzip folgen. DRY steht für 'Wiederholen Sie sich nicht'. Wir sollten den Objektidentifikationsteil so schreiben, dass Das Objekt sollte nur an einer Stelle identifiziert und überall aufgerufen werden.
Schauen Sie sich das verbesserte Skript an.
Beispiel 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(); }
Im obigen Beispiel haben wir die getrennt calWindow und txtResult Objekte und verschieben Sie sie nach oben, damit sie für verschiedene Testmethoden verwendet werden können. Wir haben sie nur einmal definiert und können sie in so vielen Testfällen verwenden, wie wir möchten.
Wir haben auch zwei Funktionen erstellt. Klicktaste() welches einen Schaltflächennamen akzeptiert und darauf klickt und AddTwoNumbers () Das nimmt zwei beliebige Zahlen und addiert sie mit der klicktaste Funktion darin.
Sobald wir anfangen, unseren Code zu „verbessern“ und ihn wiederverwendbar und wartbar zu machen, bedeutet dies, dass wir jedes Automatisierungsframework verwenden. Jetzt wird es interessant.
Siehe auch=> Warum brauchen wir das Framework für die Testautomatisierung?
Wie viel kostet Quickbooks Point of Sale?
Es gibt fünf beliebte Frameworks in der Testautomatisierung ::
- Linear
- Modularität
- Datengesteuert
- Schlüsselwortgesteuert
- Hybrid
Wir werden nun jedes Framework anhand seiner Eigenschaften erklären.
# 1. Lineares Gerüst:
Eigenschaften
- Alles, was mit einem Skript zusammenhängt, wird in den Skripten definiert.
- Kümmert sich nicht um Abstraktion und Codeduplizierung
- Aufnahme und Wiedergabe erzeugen normalerweise linearen Code
- Einfach loszulegen
- Wartung Albtraum.
Durch Lesen der obigen 5 Merkmale des linearen Gerüsts können wir unser Beispiel A leicht mit ihnen in Beziehung setzen. In diesem Beispiel wird im Wesentlichen das lineare Framework verwendet. Alles, was mit einem Skript zusammenhängt, wird im Skript definiert. Das Fenster anrufen und TxtResult sind im Skript definiert. Das Skript kümmert sich nicht um Abstraktion und Codeduplizierung. Es ist auch ein Wartungs-Albtraum, wie ich zuvor erklärt habe.
Warum sollten wir dieses Framework verwenden?
Dieses Framework kann in kleinen Projekten verwendet werden, in denen nicht viele UI-Bildschirme vorhanden sind. Wenn wir zum ersten Mal ein Automatisierungstool verwenden, wird normalerweise Code in linearer Form generiert. So können wir erfahren, welcher Code vom Automatisierungstool für bestimmte Aktionen generiert wird. Abgesehen von diesen Gründen sollte dieses Framework in Ihren Skripten vermieden werden.
=> Sehen Sie hier das Beispiel des linearen und Keyword-Frameworks mit QTP-Beispiel.
# 2. Modularitätsrahmen:
Eigenschaften
- Die Objekte werden einmal definiert und können in allen Testmethoden wiederverwendet werden.
- Für einzelne Funktionen werden kleine und auf den Punkt gebrachte Methoden erstellt
- Der Testfall ist die Sammlung dieser kleinen Methoden und wiederverwendbaren Objekte
- Dies ermöglicht es uns, wartbaren Code zu schreiben.
Durch Lesen der obigen Merkmale können wir unser Beispiel B mit diesen Merkmalen in Beziehung setzen. In diesem Beispiel haben wir eine Abstraktion erstellt, indem wir die calWindow nach oben und definieren Sie es innerhalb einer Eigenschaft, die überall verwendet werden kann. Wir haben zwei kleine und unabhängige Funktionen namens aufgerufen Klicktaste() und AddTwoNumbers () . Wir kombinieren diese beiden kleinen Funktionen, um unser endgültiges Skript zu erstellen, das die Funktion „Hinzufügen“ des Taschenrechners testet.
Dies führt zu einer einfacheren Wartung. Wenn sich die Benutzeroberfläche des Rechners ändert, müssen wir nur die Funktionen ändern. Unsere Skripte bleiben erhalten. Dieses Framework wird in der Automatisierung häufig verwendet. Das berühmte Page Object Framework (das mit Selenium verwendet wird) ist auch eine Art Modularitäts-Framework. Wir verteilen die gesamte Webanwendung auf separate Seiten. Die Schaltflächen, Dropdowns und Kontrollkästchen jeder Seite werden innerhalb der Klasse dieser Seite definiert. Wenn auf der Website Änderungen vorgenommen werden, müssen diese nur in dieser Seitenklasse geändert werden, und andere Seiten bleiben erhalten. Dies führt zu einer besseren Wartung und einer besseren Lesbarkeit der Skripte.
Der einzige Nachteil dieses Frameworks ist, dass es gute objektorientierte Konzepte und starke Entwicklungsfähigkeiten erfordert. Wenn Sie diese haben, wird dieses Framework dringend empfohlen.
#3. Datengesteuertes Framework:
Eigenschaften:
- Testdaten (Eingabe- und Ausgabewerte) werden vom Skript getrennt und in externen Dateien gespeichert. Dies kann eine CSV-Datei, eine Excel-Tabelle oder eine Datenbank sein.
- Wenn das Skript ausgeführt wird, werden diese Werte aus externen Dateien ausgewählt, in Variablen gespeichert und ersetzen die fest codierten Werte, falls vorhanden.
- Sehr nützlich an Orten, an denen derselbe Testfall mit unterschiedlichen Eingaben ausgeführt werden muss.
Beispiel C.::
Wir möchten den Add-Testfall mit drei verschiedenen Eingaben ausführen.
Die Daten sind
7 + 2 = 9
5 + 2 = 7
3 + 2 = 5
Wir haben diese Daten (sowohl Eingabe als auch Ausgabe) in einer externen CSV-Datei gespeichert.
(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(); }
Im obigen Skript definieren wir unsere Datenquelle oben im Skript, bei der es sich um eine CSV-Datei handelt.
Wir haben den Pfad dieser CSV-Datei angegeben und das Skript angewiesen, sie 'sequentiell' zu analysieren. Das bedeutet, dass das Skript so oft ausgeführt wird, wie Zeilen in der CSV-Datei vorhanden sind. In unserem Fall wird das Skript dreimal ausgeführt. In jedem Lauf werden die beiden in den ersten beiden Spalten definierten Zahlen hinzugefügt und überprüft, ob die Summe dieser beiden Zahlen mit der in der dritten Spalte vorhandenen Zahl übereinstimmt.
Dieses Framework bietet verschiedene Vorteile. Alle Werte werden außerhalb des Skripts gespeichert. Wenn also beim nächsten Build Änderungen vorgenommen werden, müssen nur die Daten in der externen Datei geändert werden, und das Skript bleibt erhalten.
Der zweite Vorteil ist, dass dasselbe Skript für verschiedene Eingaben ausgeführt werden kann. Nehmen Sie das Beispiel eines ERP, in dem Sie die Registrierung von 100 Mitarbeitern testen müssen. Sie können ein Skript schreiben und die Namen und anderen Daten von Mitarbeitern in einer externen Datei speichern. Sie führen ein Skript aus und es wird 100 Mal ausgeführt. Jedes Mal mit unterschiedlichen Mitarbeiterdaten. Sie können leicht erkennen, bei welchen Daten das Skript den Mitarbeiter nicht registriert. Dies ist ein zusätzlicher Vorteil, wenn Sie negative Tests durchführen.
=> Sehen Sie hier das Beispiel eines datengesteuerten und hybriden Frameworks mit QTP-Beispiel.
# 4. Keyword-gesteuertes Framework:
Eigenschaften:
- Sowohl Daten als auch Aktionen werden außerhalb des Skripts definiert.
- Es erforderte die Entwicklung von Schlüsselwörtern für verschiedene Arten von Aktionen.
- Die Funktionalität, die wir testen müssen, wird Schritt für Schritt in tabellarischer Form unter Verwendung der von uns entwickelten Schlüsselwörter und der Testdaten geschrieben. Wir speichern diese Tabelle in externen Dateien, genau wie ein datengesteuertes Framework.
- Das Skript analysiert diese Tabelle und führt die entsprechenden Aktionen aus.
- Ermöglicht manuellen Testern, die sich mit Codierung nicht auskennen, in gewissem Umfang, Teil der Automatisierung zu sein.
Beispiel D.::
Wir haben die Daten (z. B. 1 + 3 = 4) sowie die Aktionen (z. B. Klicken, Löschen usw.) in einer Excel-Datei in tabellarischer Form definiert.
Das Skript wird ungefähr so (der folgende Code wurde nur zum Verständnis geschrieben)
(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 } }
Das obige Skript ist nur ein Parser der Excel-Datei. Es analysiert die Excel-Datei zeilenweise und sucht nach Schlüsselwörtern, um die entsprechenden Aktionen auszuführen. Wenn das Schlüsselwort 'Klicken' gefunden wird, wird auf das definierte Objekt geklickt. Wenn 'Ergebnis überprüfen' gefunden wird, wird die Bestätigung ausgeführt.
Die Verwendung des schlüsselwortgesteuerten Frameworks bietet verschiedene Vorteile.
Der erste Vorteil ist, dass dieses Framework in solchen Szenarien sehr hilfreich ist, in denen große Chancen auf Änderungen in Testfällen bestehen. Wenn sich in einem Testfall ein Schritt ändert, müssen wir den Code nicht berühren. Wir müssen nur die Excel-Datei aktualisieren und das Skript wird aktualisiert.
Sie können alle Ihre Skripte in einer Excel-Datei definieren und diese Excel-Datei an manuelle Tester übergeben, um neue Skripte hinzuzufügen oder die vorhandenen zu aktualisieren. Auf diese Weise können manuelle Tester auch Teil der Testautomatisierung werden, da sie nichts codieren müssen. Sie aktualisieren diese Excel-Datei nur, wenn Bedarf besteht, und Skripte werden automatisch aktualisiert.
Unterschied zwischen Agil- und Wasserfalltests
Der zweite Vorteil ist, dass Ihr Skript werkzeugunabhängig wird. Sie können Ihre Skripte in einer Excel-Datei verwalten. Wenn Sie Ihr Automatisierungstool irgendwann ändern müssen, können Sie es einfach ändern, indem Sie einen Excel-Parser in ein anderes Tool schreiben.
Der Nachteil dieses Frameworks ist, dass Sie Schlüsselwörter für verschiedene Arten von Aktionen erfinden müssen. In Großprojekten gibt es so viele Schlüsselwörter, dass Sie sich Ihre Skripte und Schlüsselwörter merken und organisieren müssen. Dies selbst wird zu einer mühsamen Aufgabe an einem Punkt.
In einigen komplexen Szenarien, in denen Objekte nicht leicht identifiziert werden können und wir Mauskoordinaten und andere Techniken verwenden müssen, ist dieses Framework nicht sehr hilfreich.
Keyword-gesteuert ist immer noch ein beliebtes Framework für viele Automatisierungstester. Roboter-Framework von Google ist ein beliebtes Keyword-gesteuertes Framework, das von einer aktiven Community unterstützt wird.
# 5. Hybrid Test Automation Framework:
Eigenschaften:
- Die Kombination von zwei oder mehr der oben genannten Techniken, wobei ihre Stärken genutzt und ihre Schwächen minimiert werden.
- Das Framework kann den modularen Ansatz zusammen mit einem datengesteuerten oder einem schlüsselwortgesteuerten Framework verwenden.
- Das Framework kann mithilfe von Skripten einige Aufgaben ausführen, deren Implementierung in einem rein schlüsselwortgesteuerten Ansatz möglicherweise zu schwierig ist.
Verwenden Sie in einfachen Worten, Hybrid Framework, die Kombination der oben genannten Techniken. Wir können ein datengesteuertes Framework verwenden, das ebenfalls modular aufgebaut ist. Für einige Testfälle können wir einen schlüsselwortgesteuerten Ansatz verwenden, und für den Rest können wir einen modularen Ansatz verwenden. Wenn wir also zwei oder mehr in diesem Artikel erwähnte Techniken mischen, verwenden wir tatsächlich einen Hybrid-Ansatz.
Fazit
Ich hoffe, dass das Testautomatisierungs-Framework für Sie jetzt kein beängstigender Begriff mehr ist. Ich habe versucht, die beliebtesten Frameworks so einfach wie möglich zu erklären.
Frameworks sollen Ihnen das Leben erleichtern. Sie helfen Ihnen dabei, wartbare und zuverlässige Skripte zu schreiben. Ohne die Verwendung von Frameworks ist das Feld der Testautomatisierung ein Albtraum. Für jede kleine Änderung in der Anwendung müssen Sie Ihren Code an Hunderten von Stellen ändern.
Ein Verständnis dieser Frameworks ist daher ein Muss für jeden Tester, der einen Eindruck von der Testautomatisierung erhalten möchte.
In unserer nächstes Tutorial In dieser Reihe lernen wir „Ausführung und Berichterstellung von Testautomatisierung“.
Wenn ich etwas in diesem Artikel verpasst habe oder Sie eine Frage stellen müssen, können Sie diese gerne im Kommentarbereich stellen.
PREV Tutorial # 4 | NÄCHSTES Tutorial # 6
Literatur-Empfehlungen
- QTP-Frameworks - Testautomatisierungs-Frameworks - Beispiele für schlüsselwortgesteuerte und lineare Frameworks - QTP-Tutorial Nr. 17
- SeeTest-Automatisierungsbefehle: Eine ausführliche Erläuterung mit Beispielen
- 10 beliebtesten RPA-Tools für die Automatisierung von Roboterprozessen im Jahr 2021
- Wie unterscheidet sich die Testplanung für manuelle und Automatisierungsprojekte?
- Die beliebtesten Testautomatisierungs-Frameworks mit Vor- und Nachteilen - Selenium Tutorial # 20
- Skriptloses Testautomatisierungs-Framework: Tools und Beispiele
- Testautomatisierung - Ist es eine spezialisierte Karriere? Können normale Tester auch automatisieren?
- 25 besten Java-Test-Frameworks und -Tools für Automatisierungstests (Teil 3)