2016-05-19 3 views
0

Ich muss in der Lage sein, die gleichen Tests in verschiedenen Umgebungen (max. 3), aber mit unterschiedlichen Daten für jeden durchzuführen.Testen mehrerer Umgebungen mit unterschiedlichen Daten - Best Practice

Ich habe eine Testmethode:

@Test (groups = "core", description = "Login: Valid log in") 
public void validLogin() { 
    User user = UserData.user_2(); 
    loginPage.logOn(user); 
} 

In der Userdata-Klasse I haben:

public static User user_2() { 
    return new User().newUser("user2", "password"); 
} 

"user2" nicht auf allen Umgebungen existieren. Ich bin möglicherweise nicht in Lage, die Daten zu ändern, die in allen Umgebungen verfügbar sind, um den Testdaten zu entsprechen.

Die Tests werden entweder mit Maven und TestNg ausgeführt, damit ich den Parameter für die Ausführungsumgebung einsenden kann.

Mein erster Gedanke ist zu verwenden:

public static User user_2() { 
    switch(env) { 
    case "env1": return new User().newUser("user2", "password"); break; 
    case "env2": return new User().newUser("user2Z", "password"); break; 
    case "env3": return new User().newUser("user2X", "password"); break; 
} 

ich eine begrenzte Anzahl von Datenklassen und Methoden (< 100), aber mehrere tausend Tests.

Was ist der beste Weg, um die für die verschiedenen Umgebungen erforderlichen Daten einzurichten und zu verarbeiten?

+0

Bevor Sie sich die Mühe machen, solch eine seltsame Anforderung zu implementieren, könnten Sie vielleicht teilen, warum Sie das versuchen. Und dann helfen wir Ihnen, einen besseren Ansatz zu finden. –

Antwort

0

Wenn es um verschiedene Benutzer geht, wünschen Sie immer, dass alle meine Testfälle so bleiben sollen, wie sie sind und mit minimalen Änderungen. Also das ist was ich folge. Ich erstelle eine Datei lässt sagen username.properties Datei in Eclipse.

[email protected] Passwort = passswd1

Sie können also mit dem Namen mehrere Benutzer hier erstellen

[email protected] Rohans Passwort: rohan

wir jetzt muss diese Datei in unserer Klasse aufrufen. Siehe untenstehendes Beispiel.

Hauptprüfung

SignInPage.SendkeysMethodForSignInPAgeForPropertyFile(driver, By.cssSelector("input[id='Email']") , "username"); 

SignInPage.SendkeysMethodForSignInPAgeForPropertyFile(driver, By.cssSelector("input[id='Passwd'][type='password']"), "password"); 

Also hier werden Benutzernamen von Eigenschaften genommen werden Datei.

Dies zu SendkeysMethodForSignInPAgeForPropertyFile gehen, die ist:

public class SignInPage {

public void SendkeysMethodForSignInPAgeForPropertyFile(WebDriver driver, By by, String Text) { 
    WebUtils.SendkeysForPropertyFile(driver,by, Text); 
    } 
} 

die zu SendkeysForPropertyFile Verfahren wie gehen:

public static void SendkeysForPropertyFile(WebDriver driver, By by, String Text) { 
    ReadFileData File = new ReadFileData(); 
    Properties Values = File.ReadFile(); 
     WebElement Element = driver.findElement(by); 
     Element.clear(); 
     if (Text == "username"){ 
     Element.sendKeys(Values.getProperty("username")); 
     } 
     else { 
     Element.sendKeys(Values.getProperty("password")); 
     } 

, die aus ReadFileData() der Klasse gelesen werden was ist:

public class ReadFileData { 
    public Properties ReadFile() { 
     File file = new File("D:\\Selenium\\Gmail_Web_UI\\Loginproperty.properties"); 

     FileInputStream fileInput = null; 
     try { 
      fileInput = new FileInputStream(file); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
     Properties prop = new Properties(); 

     //load properties file 
     try { 
      prop.load(fileInput); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return prop; 
    } 

Dies hilft, unseren Benutzernamen und das Passwort in einer einzigen Datei zu schützen. Antwort an mich für weitere Anfrage.Happy Learning :-)