2017-01-10 2 views
0

Quelle est la meilleure approche pour instancier des objets lors de la création d'étapes dans un modèle d'objet de page Java?Meilleures pratiques du modèle d'objet Java Page - Nouveaux objets

Est-ce que quelqu'un sait comment les scripts Cucumber sont compilés?

J'imagine que si tout est construit et respecté la 2ème ou 3ème option ci-dessous peut être la meilleure approche.

Si seulement les étapes liées au test en cours d'exécution sont compilées, j'imagine que ce serait le premier.

J'ai l'exemple suivant:

private LoginPage loginPage = new LoginPage(driver); 

@Given("^I have logged in as customer with two stored cards$") 
public void iHaveLoggedInAsCustomerWithTwoStoredCards() throws Throwable { 
    new HomePage(driver).clickLoginButton(); 
    loginPage.enterEmail("[email protected]"); 
    loginPage.enterPassword("Password1"); 
    loginPage.clickLogin();   
} 

@Given("^I have logged in as customer with expired card$") 
public void iHaveLoggedInAsCustomerWithExpiredCard() throws Throwable { 
    new HomePage(driver).clickLoginButton(); 
    loginPage.enterEmail("[email protected]"); 
    loginPage.enterPassword("Password1"); 
    loginPage.clickLogin();   
} 

@Given("^the user logged in as customer with three stored cards$") 
public void theUserLoggedInAsCustomerWithThreeStoredCards() throws Throwable { 
    new HomePage(driver).clickLoginButton(); 
    loginPage.enterEmail("[email protected]"); 
    loginPage.enterPassword("Password1"); 
    loginPage.clickLogin();   
} 

Toutes les étapes ci-dessus (et plus encore dans la même classe LoginSteps.java) commencent par

new HomePage(driver).clickLoginButton(); 

Est-ce la meilleure approche, ou est il vaut mieux créer une seule instance?

private LoginPage loginPage = new LoginPage(driver); 
private HomePage homePage = new HomePage(driver); 

@Given("^I have logged in as customer with two stored cards$") 
public void iHaveLoggedInAsCustomerWithTwoStoredCards() throws Throwable { 
    homePage.clickLoginButton(); 
    loginPage.enterEmail("[email protected]"); 
    loginPage.enterPassword("Password1"); 
    loginPage.clickLogin();   
} 

@Given("^I have logged in as customer with expired card$") 
public void iHaveLoggedInAsCustomerWithExpiredCard() throws Throwable { 
    homePage.clickLoginButton(); 
    loginPage.enterEmail("[email protected]"); 
    loginPage.enterPassword("Password1"); 
    loginPage.clickLogin();   
} 

@Given("^the user logged in as customer with three stored cards$") 
public void theUserLoggedInAsCustomerWithThreeStoredCards() throws Throwable { 
    homePage.clickLoginButton(); 
    loginPage.enterEmail("[email protected]"); 
    loginPage.enterPassword("Password1"); 
    loginPage.clickLogin();   
} 

OU est encore plus efficace d'avoir l'instanciation toutes les pages dans une classe « baseSteps » qui LoginSteps étend?

public class LoginSteps extends BaseSteps { 
    @Given("^I have logged in as customer with two stored cards$") 
    public void iHaveLoggedInAsCustomerWithTwoStoredCards() throws Throwable { 
     homePage.clickLoginButton(); 
     loginPage.enterEmail("[email protected]"); 
     loginPage.enterPassword("Password1"); 
     loginPage.clickLogin();   
    } 

    @Given("^I have logged in as customer with expired card$") 
    public void iHaveLoggedInAsCustomerWithExpiredCard() throws Throwable { 
     homePage.clickLoginButton(); 
     loginPage.enterEmail("[email protected]"); 
     loginPage.enterPassword("Password1"); 
     loginPage.clickLogin();   
    } 

    @Given("^the user logged in as customer with three stored cards$") 
    public void theUserLoggedInAsCustomerWithThreeStoredCards() throws Throwable { 
     homePage.clickLoginButton(); 
     loginPage.enterEmail("[email protected]"); 
     loginPage.enterPassword("Password1"); 
     loginPage.clickLogin();   
    } 
} 

public baseSteps { 

    protected LoginPage loginPage = new LoginPage(driver); 
    protected HomePage homePage = new HomePage(driver); 
} 

Répondre

0

Je ferais un benchmark pour voir quelle version est la plus efficace.

La manière dont le code Cucumber est compilé dépend de votre outil de construction. Je suppose que tout est compilé avant d'être utilisé. Mais une machine virtuelle Java qui s'auto optimise après une certaine exécution peut se comporter différemment après un certain temps.

Je suis vraiment intéressé d'entendre pourquoi vous pensez à la performance à ce niveau tho? Prévoyez-vous d'exécuter ce code pendant des heures à la fois? La plupart de mes scénarios sont courts, exécutés sur la deuxième échelle et ensuite jetés.

+0

Je vais essayer et voir si je peux trouver une différence. Le raisonnement pour cela est parce que je vais les gérer de façon continue et j'ai besoin qu'ils soient aussi efficaces que possible. Merci de votre aide. –