[JAVA] Beschleunigen Sie die Ausführungszeit von Selen mit der ClassRule-Annotation von JUnit

Einführung

Beim Testen mit Selen ist es üblich (glaube ich), den Browser für jede Testmethode zu starten / zu stoppen. Ich wollte es jedoch verkürzen, da sich die Ausführungszeit erheblich erhöhen würde, wenn der Browser jedes Mal neu gestartet würde.

Ich denke, es gibt verschiedene Methoden, aber dieses Mal habe ich es mit der ClassRule-Annotation von JUnit4 versucht. Wenn Sie es in ClassRule deklarieren, kann für jede Testklasse new / quit von WebDriver festgelegt werden, sodass es entsprechend gekürzt wird.

↓ In Bezug auf Regel / Klassenregel ist diese leichter zu verstehen. http://qiita.com/Chayata/items/dd31e22bca6df6c91793

Implementierung

Um die Regelanmerkung zu verwenden, müssen Sie eine dedizierte Klasse implementieren und als Testmethodenfeld verwenden. Weitere Informationen finden Sie in diesem Repository (https://github.com/knakamatsu/SeleniumJUnitRuleSample).

Regelseite

Implementieren Sie die Klasse, indem Sie ExternalResouce erben, und generieren Sie WebDriver als Feld der Klasse. Da die überschriebene after-Methode zur Nachbearbeitung der Junction wird, implementieren Sie das Beenden von WebDriver in after.

WebDriverRule.java


public class WebDriverRule extends ExternalResource {

	private WebDriver driver;
	public WebDriver getDriver() {
		return getInstance();
	}

	@Override
	protected void after() {
		this.driver.quit();
	}

	private WebDriver getInstance(){
		if(this.driver == null){
			this.driver = new ChromeDriver();
		}
		return this.driver;
	}
}

Testausführungsseite

Die implementierte Regelklasse kann sowohl in @Rule als auch in @ClassRule verwendet werden und lautet wie folgt. Bei Deklaration mit @ClassRule entspricht Vorher / Nachher der Vor- und Nachbearbeitung für jede Klasse (@BeforeClass und @AfterClass). Bei Deklaration mit @Rule entspricht Vorher / Nachher der Vor- und Nachbearbeitung für jede Methode (@setUp und @tearDown).

Test.java


public class classSample {
	@ClassRule
	public static WebDriverRule dr = new WebDriverRule();

	@Test
	public void test(){
		WebDriver d = dr.getDriver();
		d.get("https://www.google.co.jp/");
		WebElement el = d.findElement(By.cssSelector("input[aria-label='Suche']"));
		el.sendKeys("chrome test.");
	}
}

Vergleich

QS_20170513-195323.png Implementierung mit @ClassRule auf der Oberseite und @Rule auf der Unterseite. Beide Tests sind gleich. In der mit der Probe erstellten Testklasse ergibt sich ein Unterschied von ca. 10 Sekunden. Im Fall von ClassRule wird der Browser nur für die erste Testmethode gestartet. Je mehr Testmethoden vorhanden sind, desto effektiver ist er. In der Testumgebung dauerte das Starten des Browsers ca. 5 Sekunden.

Zusammenfassung

Dies hängt vom Testziel ab. Der Neustart des Browsers für jede Testmethode ist jedoch häufig zu lang. Daher ist dies vorzuziehen. Selbst wenn zwischen den Testmethoden eine Abhängigkeit besteht, ist dies schwer zu bemerken (z. B. Informationen, die im Cookie verbleiben und sich versehentlich bewegen). Seien Sie also vorsichtig.

Recommended Posts

Beschleunigen Sie die Ausführungszeit von Selen mit der ClassRule-Annotation von JUnit
Der JUnit 5-Gradle-Test führt zu einem Fehler mit der Lombok-Annotation