JUnitParams ermöglicht der automatische Test-Code zu optimieren. Wenn Sie einige Tests vorbereiten müssen, die nur von den Eingabedaten und ende Ergebnissen sich abweichen, können Sie einfach verschiedene Testparameter, statt der Schaffung von separaten Testverfahren für jeden Datensatz, anpassen. Um parametrische Tests zu schreiben, müssen Sie die JUnitParams library downloaden und beinhalten mit Verbindung von JUnit 4.6 oder höher. Sind Sie Fertig? Jetzt konzentrieren wir uns auf die Aufgabe.
Aufgabe
Stellen Sie sich vor, dass es notwendig ist, negative Tests für die Zulassung Form der http://www.skype.com/en/ Website durchzuführen. Da es zwei Datensätzen gibt und ist es bequemer, JUnitParams für die Tests (Benutzername und Passwort) und die entsprechenden Ergebnisse zu verwenden. Mit dessen Hilfe werden wir das Vollmachtsformular für ungültige Daten und Kontrollsystemverhalten (Meldungen Anzeigen) zu testen.
Test
Zum Beispiel, haben wir die folgende Daten für die Felder Benutzer und Passwort:
1. (“”,”"),
2. (“catja12″, “”),
3. (“”, “cvbnm”),
4. (“somename”, “123!@#qwe”).
Nach jeder Eingabe kann ein Benutzer solche Ergebnisse erhalten:
1. “Sie haben Ihren Skype-Namen nicht geben.”
2. “Falsches Passwort. Bitte versuchen Sie es erneut.”
3. “Sie haben Ihren Skype-Namen nicht geben.”
4. “Anmeldung fehlgeschlagen. Bitte überprüfen Sie Ihren Skype-Namen und geben Sie Ihr Passwort ein.”
Die JUnitParams Tests sehen sich so aus:
package params; import static org.junit.Assert.*; import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import static junitparams.JUnitParamsRunner.$; import junitparams.JUnitParamsRunner; import junitparams.Parameters; import org.junit.runner.RunWith; @RunWith(JUnitParamsRunner.class) public class SkypeLogin { private WebDriver driver; private StringBuffer verificationErrors = new StringBuffer(); @Before public void setUp(){ driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); driver.get("http://www.skype.com/en/"); driver.findElement(By.linkText("Sign in")).click(); } By loginField = By.id("username"); By passwField = By.id("password"); By loginButton = By.id("signIn"); By errorMessage = By.xpath("//*[@id='content']/div[2]"); @Parameters(method="invalidDataForTest") @Test public void invalidLoginTestCompare(String username, String password, String message){ driver.findElement(loginField).clear(); driver.findElement(loginField).sendKeys(username); driver.findElement(passwField).clear(); driver.findElement(passwField).sendKeys(password); driver.findElement(loginButton).click(); String result = driver.findElement(errorMessage).getText(); assertEquals(result, message); } public Object[] invalidDataForTest(){ return $($("", "", "You did not enter your Skype Name."), $("catja12", "", "Incorrect password. Please try again."), $("", "cvbnm", "You did not enter your Skype Name."), $("somename", "123!@#qwe", "Signing in failed. Please double-check your Skype Name and re-enter your password.")); } @After public void tearDown() throws Exception { driver.quit(); String verificationErrorString = verificationErrors.toString(); if (!"".equals(verificationErrorString)) { fail(verificationErrorString); } } }
Jetzt wollen wir jedes Codeteils untersuchen. Die Verbindung mit JunitParamsRunner tritt in den folgenden Zeilen:
@RunWith(JUnitParamsRunner.class)
public class SkypeLogin {
Testdatenverbindung wird über “@Parameters” Anmerkungen fertig sein, die vor dem “Test” Anmerkung geschrieben wurden.
@Parameters(method="invalidDataForTest")
Die “@Parameters” Anmerkung zeigt die Testdatenquelle. In diesem speziellen Fall, wird die Testdatenquelle der “invalidDataForTest” Methode.
public Object[] invalidDataForTest(){ return $($("", "", "You did not enter your Skype Name."), $("catja12", "", "Incorrect password. Please try again."), $("", "cvbnm", "You did not enter your Skype Name."), $("somename", "123!@#qwe", "Signing in failed. Please double-check your Skype Name and re-enter your password.")); }
Es sei auch bemerkt werden, dass die Testdatenquelle aus verschiedenen Methoden sich bestehen kann. Zum Beispiel, können Sie eine Methode erstellen, die das Datenfeld für positive Tests (für die erfolgreiche Autorisierung) zurückkehren wird. Als Folge, werden diese Methoden in der Parameter Anbieterklasse (Klasse DataForTest) platziert.
@Parameters (source = DataForTest.class)
JUnitParams macht Ihren Code lesbarer und leicht für Bedienung. Sie können die aktuellen Parameterwerte in Ihrem IDE sehen und brauchen nicht, die Parameter durch Konstruktor einzurichten. Es ist nützliches Werkzeug, um Ihre Tests zu automatisieren, genauere Ergebnisse zu liefern, Zeit und Anstrengungen zu sparen.