Selen und TestNG unter Verwendung von 'dependOn' und 'priority =' Issue

Ich arbeite daran, in meinen GUI-Automatisierungstests eine bessere Workflow-Steuerung zu implementieren. Und ich habe zuerst mit dependOn begonnen, aber schnell festgestellt, dass der Nachteil darin besteht, dass, wenn ein Test fehlschlägt, der gesamte Rest der Suite nicht ausgeführt wird. Also habe ich auf 'priority =' umgestellt, sehe aber unerwartetes Verhalten. Ein Beispiel:

@Test(priority = 10)
public void login(){...}

@Test(priority = 20, dependsOnMethods = "login")
public void verifyUserLogin() {...}

@Test(priority = 30, dependsOnMethods = "verifyUserLogin")
public void navigateToReportSettings() {...}

@Test(priority = 40, dependsOnMethods = "navigateToReportSettings")
public void verifyGeneralSettings() {...}

@Test(priority = 40, dependsOnMethods = "navigateToReportSettings")
public void verifyReportingPeriod() {...}
...
@Test(priority = 90, dependsOnMethods = "navigateToReportSettings")
public void saveReportSettings() {...}

Was ich machen möchte:

Anmeldung.Überprüfen Sie, ob der Benutzer angemeldet ist.Navigieren Sie zur Seite mit den Berichtseinstellungen.Überprüfen Sie die allgemeinen Einstellungen und den Berichtszeitraum auf der Seite mit den Berichtseinstellungen (in beliebiger Reihenfolge).Nehmen Sie einige Änderungen vor und speichern Sie.Wichtig: 10, 20 und 30 müssen erfolgreich sein oder den Rest überspringen. Wenn 40 fehlschlagen, fahren Sie mit 50 fort, nachdem alle 40 abgeschlossen sind. Aber ohne Abhängigkeit von einem Schritt 40s zum Erfolg!

Was ist los:

Login (Priorität 10).Speichern (Priorität 90).

Hinweis: Es gibt auch "Gruppen" -Anmerkungen, aber ich denke nicht, dass dies hier relevant ist. Vielen Dank im Voraus für Tipps, wie Sie Priorität und Abhängigkeiten erfolgreich kombinieren können, um den Workflow zu steuern. Abhängigkeiten werden jedoch nur bei Bedarf verwendet.

Hier ist ein weiterer Beispielcode. Ich habe keine Ahnung, warum es in dieser Reihenfolge ausgeführt wird: Ausgabe: 10, 20, 30, 40 usw. 110, // OK 130, 140, 150, 160, // Warum wurden die 120 Prioritäten übersprungen? 120, 120, 120, etc ... 120 // Zuletzt ausführen? Interessant ist auch, dass die Gruppe der 120er nacheinander neu nummeriert werden kann (121, 122, 123 usw.), und dass sie immer noch zuletzt ausgeführt werden.

Daher muss das Problem sein, dass 'dependOn' und 'priority =' einfach nicht gut zusammenspielen. Und ich bin neugierig, ob jemand diese beiden dazu gebracht hat, in ihrer Umgebung zu arbeiten. Wer weiß, vielleicht ist es aber mit Intellij IDEA? Wie auch immer, ich muss demnächst auf den Grund gehen, um spätere kostspielige Umbauten zu vermeiden! Nochmals vielen Dank für jede Rückmeldung - JR

@Test(priority = 10, groups = "A")
public void login(){

System.out.println("10");

}


@Test(priority = 20, groups = {"A", "B"})
public void openUserAdministrationTest() {

    System.out.println("20");

}

@Test(priority = 30, groups = {"A", "B"})
public void usersTabTest() {

    System.out.println("30");

}

@Test(priority = 40, groups = {"A", "B"})
public void createUserTabTest() {

    System.out.println("40");

}


@Test(priority = 50, groups = {"A", "B"})
public void userCreationDataEntryTest() {

    System.out.println("50");

}

@Test(priority = 60, groups = {"A", "B", "C"})
public void userRolesTest() {

    System.out.println("60");

}

@Test(priority = 70, groups = {"A", "B"})
public void saveUserTest() {

    System.out.println("70");

}

@Test(priority = 80, groups = {"A", "B"})
public void closeUserAdminAndLogoutTest() {

    System.out.println("80");

}

@Test(priority = 90, groups = "A")
public void loginNavigateToUserAdmin() {

    System.out.println("90");
}

@Test(priority = 100, groups = {"A", "D"})
public void verifyUserSearchUserReturned() {

    System.out.println("100");

}

@Test(priority = 110, groups = {"A", "D"})
public void reOpenNewUserTest() {

    System.out.println("110");

}

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserUserNameTest() {

    System.out.println("120");
}

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserFullNameTest() {

    System.out.println("120");
}

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserDepartmentTest() {

    System.out.println("120");
}

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserPhoneNumberTest() {

    System.out.println("120");
}

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserEmailTest() {

    System.out.println("120");
}

//      Note: password and active verified by user login

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserActiveCheckedTest() {
    System.out.println("120");
}

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserLanguageTest() {

    System.out.println("120");
}

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserDateFormatTest() {

    System.out.println("120");
}

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserNumberFormatTest() {

    System.out.println("120");
}

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserReportingPeriodTest() {

    System.out.println("120");
}

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserReportingPeriodExampleTest() {

    System.out.println("120");
}

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserReferencePeriodTest() {

    System.out.println("120");
}

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserReferencePeriodExampleTest() {

    System.out.println("120");
}

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserShowAnnotationsCheckedTest() {
    System.out.println("120");
}

@Test(priority = 130, groups = {"A", "C"})
public void verifyNewUserRoleTest() {

    System.out.println("130");
}


@Test(priority = 140, groups = {"A", "C"})
public void verifyNewUserFunctionalRoleTest() {

    System.out.println("140");

}

@Test(priority = 150, groups = {"A", "C"})
public void verifyUserAdminCloseAndLogoutTest() {

    System.out.println("150");

}

@Test(priority = 160, groups = {"A", "C"})
public void verifyUserLogin() {

    System.out.println("160");

}

Dies ist ein viel einfacheres Beispiel, zeigt aber auch, wie es darauf ankommt, Prioritäten einfach zu knacken:

@Test(priority = 10)
public void test10(){
    System.out.println("10");
}

@Test(priority = 20, dependsOnMethods = "test10")
public void test20() {
    System.out.println("20, depends on 10");
}

@Test(priority = 30, dependsOnMethods = "test20")
public void test30() {
    System.out.println("30, depends on 20");
}

@Test(priority = 40, dependsOnMethods = "test10")
public void test40() {
    System.out.println("40, depends on 10");
}

Sollte laufen: 10, 20, 30, 40. Läufe: 10, 20, 40, 30.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage