TestNG - Abhängigkeitstest
Manchmal müssen Sie möglicherweise Methoden in einem Testfall in einer bestimmten Reihenfolge aufrufen, oder Sie möchten einige Daten und Zustände zwischen Methoden teilen. Diese Art von Abhängigkeit wird von TestNG unterstützt, da sie die Deklaration expliziter Abhängigkeiten zwischen Testmethoden unterstützt.
Mit TestNG können Sie Abhängigkeiten entweder mit - angeben
Verwenden des Attributs abhängige Methoden in @ Test-Annotationen ODER.
Verwenden des Attributs abhängige Gruppen in @ Test-Annotationen.
Beispiel für die Verwendung von abhängigen Methoden
Erstellen Sie eine Klasse
Erstellen Sie eine zu testende Java-Klasse, z. MessageUtil.java im C:\>TestNG_WORKSPACE.
public class MessageUtil {
private String message;
// Constructor
// @param message to be printed
public MessageUtil(String message) {
this.message = message;
}
// prints the message
public String printMessage() {
System.out.println(message);
return message;
}
// add "Hi!" to the message
public String salutationMessage() {
message = "Hi!" + message;
System.out.println(message);
return message;
}
}
Erstellen Sie eine Testfallklasse
Erstellen Sie eine Java-Testklasse, z. B. DependencyTestUsingAnnotation.java.
Fügen Sie Ihrer Testklasse die Testmethoden testPrintMessage () und testSalutationMessage () sowie initEnvironmentTest () hinzu.
Attribute hinzufügen dependsOnMethods = {"initEnvironmentTest"} zur @ Test Annotation von testSalutationMessage() Methode.
Erstellen Sie einen Java-Klassendateinamen DependencyTestUsingAnnotation.java im C:\>TestNG_WORKSPACE.
import org.testng.Assert;
import org.testng.annotations.Test;
public class DependencyTestUsingAnnotation {
String message = "Manisha";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
message = "Manisha";
Assert.assertEquals(message, messageUtil.printMessage());
}
@Test(dependsOnMethods = { "initEnvironmentTest" })
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Manisha";
Assert.assertEquals(message, messageUtil.salutationMessage());
}
@Test
public void initEnvironmentTest() {
System.out.println("This is initEnvironmentTest");
}
}
Erstellen Sie testng.xml
Erstellen Sie testng.xml in C:\>TestNG_WORKSPACE Testfälle ausführen.
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1">
<test name = "test1">
<classes>
<class name = "DependencyTestUsingAnnotation" />
</classes>
</test>
</suite>
Kompilieren Sie die MessageUtil, Testfallklassen mit javac.
C:\TestNG_WORKSPACE>javac MessageUtil.java DependencyTestUsingAnnotation.java
Führen Sie nun die Datei testng.xml aus, mit der die Methode testSalutationMessage () erst nach Ausführung der Methode initEnvironmentTest () ausgeführt wird.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Überprüfen Sie die Ausgabe.
This is initEnvironmentTest
Inside testPrintMessage()
Manisha
Inside testSalutationMessage()
Hi!Manisha
===============================================
Suite1
Total tests run: 3, Failures: 0, Skips: 0
===============================================
Beispiel für die Verwendung von abhängigen Gruppen
Sie können auch Methoden verwenden, die von ganzen Gruppen abhängen. Lassen Sie uns ein Beispiel zeigen, um dies zu demonstrieren.
Erstellen Sie eine Klasse
Erstellen Sie eine zu testende Java-Klasse, z. MessageUtil.java im C:\>TestNG_WORKSPACE.
public class MessageUtil {
private String message;
// Constructor
// @param message to be printed
public MessageUtil(String message) {
this.message = message;
}
// prints the message
public String printMessage() {
System.out.println(message);
return message;
}
// add "Hi!" to the message
public String salutationMessage() {
message = "Hi!" + message;
System.out.println(message);
return message;
}
}
Erstellen Sie eine Testfallklasse
Erstellen Sie eine Java-Testklasse, z. B. DependencyTestUsingAnnotation.java.
Fügen Sie Ihrer Testklasse die Testmethoden testPrintMessage () testSalutationMessage () und initEnvironmentTest () hinzu und fügen Sie sie der Gruppe "init" hinzu.
Fügen Sie das Attribut hinzu dependsOnMethods = {"init.*"} zur @ Test Annotation von testSalutationMessage() Methode.
Erstellen Sie eine Java-Klassendatei mit dem Namen DependencyTestUsingAnnotation.java im C:\>TestNG_WORKSPACE.
import org.testng.Assert;
import org.testng.annotations.Test;
public class DependencyTestUsingAnnotation {
String message = "Manisha";
MessageUtil messageUtil = new MessageUtil(message);
@Test(groups = { "init" })
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
message = "Manisha";
Assert.assertEquals(message, messageUtil.printMessage());
}
@Test(dependsOnGroups = { "init.*" })
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Manisha";
Assert.assertEquals(message, messageUtil.salutationMessage());
}
@Test(groups = { "init" })
public void initEnvironmentTest() {
System.out.println("This is initEnvironmentTest");
}
}
In diesem Beispiel wird testSalutationMessage () als abhängig von einer Gruppe deklariert, die mit dem regulären Ausdruck "init. *" Übereinstimmt. Dies garantiert, dass die Methoden testPrintMessage () und initEnvironmentTest () immer vor testSalutationMessage () aufgerufen werden.
Wenn eine abhängige Methode fehlschlägt und Sie eine starke Abhängigkeit davon haben (alwaysRun = false, was die Standardeinstellung ist), werden die davon abhängigen Methoden nicht als FAIL, sondern als SKIP markiert. Übersprungene Methoden werden im Abschlussbericht als solche gemeldet (in einer Farbe, die in HTML weder Rot noch Grün ist). Dies ist wichtig, da übersprungene Methoden nicht unbedingt Fehler sind.
Erstellen Sie testng.xml
Erstellen Sie testng.xml in C:\>TestNG_WORKSPACE Testfälle ausführen.
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1">
<test name = "test1">
<classes>
<class name = "DependencyTestUsingAnnotation" />
</classes>
</test>
</suite>
Kompilieren Sie die MessageUtil, Testfallklassen mit javac.
C:\TestNG_WORKSPACE>javac MessageUtil.java DependencyTestUsingAnnotation.java
Führen Sie nun die Datei testng.xml aus, mit der die Methode testSalutationMessage () erst nach Ausführung der Methode initEnvironmentTest () ausgeführt wird.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Überprüfen Sie die Ausgabe.
This is initEnvironmentTest
Inside testPrintMessage()
Manisha
Inside testSalutationMessage()
Hi!Manisha
===============================================
Suite1
Total tests run: 3, Failures: 0, Skips: 0
===============================================
abhängige Gruppen gegen abhängige Methoden
Bei der Verwendung von Gruppen sind wir keinen Refactoring-Problemen mehr ausgesetzt. Solange wir die Attribute abhängige Gruppen oder Gruppen nicht ändern, werden unsere Tests mit den richtigen Einstellungen ausgeführt.
Wenn eine neue Methode in das Abhängigkeitsdiagramm eingefügt werden muss, müssen wir sie nur in die richtige Gruppe einordnen und sicherstellen, dass sie von der richtigen Gruppe abhängt. Wir müssen keine andere Methode ändern.