Selenium and TestNG Używanie zarówno „dependsOn”, jak i „priority =”

Pracuję nad wdrożeniem lepszej kontroli przepływu pracy w testach automatyzacji GUI. Po raz pierwszy zacząłem od dependOn, ale szybko odkryłem, że wadą jest to, że jeśli jeden test się nie powiedzie, cała reszta pakietu nie zostanie uruchomiona. Więc przełączyłem się na używanie 'priority =', ale widzę nieoczekiwane zachowanie. Jeden przykład:

@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() {...}

Co chcę zrobić:

Zaloguj Się.Sprawdź, czy użytkownik jest zalogowany.Przejdź do strony ustawień raportu.Sprawdź ustawienia ogólne i okres raportowania na stronie ustawień raportu (w dowolnej kolejności)Dokonaj zmian i zapisz.Ważne: 10, 20 i 30 muszą odnieść sukces lub pominąć resztę. Jeśli jakieś 40 się nie powiedzie, kontynuuj do 50 po zakończeniu wszystkich 40. Ale bez zależności od jakiegokolwiek kroku 40s, aby odnieść sukces!

Co się dzieje:

Login (priorytet 10).Zapisz (priorytet 90).

Uwaga: istnieją również adnotacje „grupowe”, ale nie sądzę, aby było to istotne tutaj. Z góry dziękujemy za wszelkie wskazówki, jak skutecznie łączyć priorytet i dependsOn w celu kontrolowania przepływu pracy, ale z zależnościami używanymi tylko tam, gdzie jest to potrzebne.

Oto kolejny przykładowy kod. Nie mam pojęcia, dlaczego działa w następującej kolejności: Wyjście: 10, 20, 30, 40 itd. 110, // OK 130, 140, 150, 160, // Dlaczego pominięto 120 priorytetów? 120, 120, 120 itd ... 120 // Biegnij ostatni? Interesujące jest również to, że grupa 120s może być numerowana kolejno (121, 122, 123 itd.) I nadal są one uruchamiane jako ostatnie.

Dlatego problem musi być taki, że „dependsOn” i „priority =” po prostu nie grają dobrze razem. I jestem ciekawy, czy ktoś dostał tych dwóch pracujących w swoim środowisku. Kto wie, może to ale z Intellij IDEA? W każdym razie muszę szybko dojść do sedna, aby uniknąć późniejszej kosztownej refaktoryzacji! Jeszcze raz dziękuję za wszelkie opinie - 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");

}

Jest to znacznie prostszy przykład, ale również pokazanie, jak zależy od po prostu łamie priorytety:

@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");
}

Powinny działać: 10, 20, 30, 40. Biegi: 10, 20, 40, 30.

questionAnswers(3)

yourAnswerToTheQuestion