2016-12-01 4 views
0

Versucht, alle guten Keywords in der Frage zu bekommen. Im Prinzip habe ich eine Reihe von Selen-Tests unter Verwendung von JUnit4/Maven und erstellt eine benutzerdefinierte Anmerkung jeden Test mit einigen grundlegenden Informationen auszuzeichnen:Ist es möglich, (via Maven) wählen Sie Junit Selen Tests basierend auf einer benutzerdefinierten Anmerkung

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.METHOD) 
public @interface TestInfo { 
public enum Priority { LOW, MEDIUM, HIGH } 

Priority priority() default Priority.LOW; 
String useCase() default ""; 
String createdBy() default "unknown"; 
String lastModified() default "unknown"; 
} 

Also jeder Test wie folgt aussieht:

@Test 
@TestInfo(priority = TestInfo.Priority.HIGH, 
     createdBy = "MivaScott", 
     lastModified = "2016/11/29", 
     useCase = "Log into website with valid credentials") 
public void loginValidCredentials() throws Exception { 
    Properties user = Data.getUserCredentials("default"); 
    loginPage.setLogin(user.getProperty("username")); 
    loginPage.setPassword(user.getProperty("password")); 
    loginPage.clickSignInButtonAndWait(); 
    Verify.titleContains(MyConstants.TITLE_DASHBOARD, ""); 
} 

Was ich Ich hoffe, dass ich in dem Befehl angeben kann, dass nur Tests ausgeführt werden sollen, die als HIGH-Priorität markiert sind. So etwas in der Art von:

mvn -DTestInfo.priority=HIGH test

Ist dies möglich, oder etwas ähnliches?

+0

Verwenden Sie junit4? Dann sollten Sie sich die Kategorien ansehen. Löst Ihre Anforderung, Tests basierend auf einer Annotation zu starten. https://github.com/junit-team/junit4/wiki/categories – Grasshopper

+0

@Grasshopper, sah ich Kategorien in meiner Suche nach Antworten (habe nicht erforscht, wie sie noch arbeiten). Ich hatte wirklich gehofft, dass ich nicht noch eine Anmerkung/ein Erinnerungsstück hinzufügen muss. Ich entwickle diesen Rahmen für Nicht-Programmierer, also die weniger beweglichen Teile, desto besser. Aber ja, das ist die Fallback-Option. – MivaScott

Antwort

0

Es gibt zwei mögliche Möglichkeiten, um dies zu lösen.

einen benutzerdefinierter Testläufer erstellen, die Ihr System Eigenschaft analysiert und ausgeführt werden nur Prüfverfahren mit der dazugehörigen Anmerkung.

public class PrioritzedTestRunner extends BlockJUnit4ClassRunner { 


@Override 
protected void runChild(final FrameworkMethod method, RunNotifier notifier) { 
    String priority = System.getProperty("TestInfo.priority"); 
    TestInfo info = method.getAnnotation(TestInfo.class); 

    if (priority == null || info == null) { 
     //If the configuration is blank or the test is uncategorized then run it 
     super.runChild(method, notifier); 
    } else if (priority != null) { 
     //try to resolve the priority and check for a match. 
     TestInfo.Priority configPri = TestInfo.Priority.valueOf(priority.toUpperCase()); 
     if (info.equals(configPri)) { 
      super.runChild(method, notifier); 
     } 
    } 
    } 

Sie müßten die RunWith Anmerkung zu Ihren Testklassen hinzuzufügen.

@RunWith(PrioritizedTestRunner.class) 
public voidMyTestClass() { 
    @Test 
    @TestInfo(...)  
    public void testThing1(){} 
    @Test 
    @TestInfo(...)  
    public void testThing2(){} 
} 

Wenn die Tests ziemlich statisch sind, sie in Klassen trennen, anstatt Anmerkungen und ein benutzerdefinierten Maven Profil verwendet die Test Sammlung häufig benannten Dateien oder Ressourcen basierend auf auszuführen.

Ich habe dies selbst nicht konfiguriert ist, aber ich habe es getan gesehen. Sie sollten in der Lage sein, maven-Testphasen zu haben, die auf Ihre PriorityLevels abzielen.

an diesem Punkt sollten Sie in der Lage sein, jede Prioritätsstufe als separaten mvn-Befehl auszuführen, wenn ich die Dokumentation richtig lese.

Best of Luck

0

Ich glaube, diese Funktion kann durch Verwendung von Tags in Ihrem junit Testfälle durchgeführt werden.

@WithTag (type = "episch", name = "Audit")

Referenz: http://thucydides.info/docs/thucydides/_adding_tags_to_test_cases.html

+0

Die @WithTag-Annotation ist eine Anmerkung, die von der Thucydides-Bibliothek hinzugefügt wurde und nicht Teil der standardmäßigen JUnit 4-API ist.Eine zusätzliche Testumfangs-Bibliothek wäre erforderlich, um diese Funktion zu verwenden. – Jeremiah

Verwandte Themen