2
votes

Comment généraliser les étapes de connexion dans Selenium Cucumber et éviter les étapes répétitives dans le fichier de fonctionnalités?

J'utilise Selenium + Cucumber pour mon projet d'automatisation et j'écris en Java. J'ai écrit un fichier de fonctionnalités dans lequel j'ai 4-5 étapes de connexion répétées dans chaque scénario. Voici les lignes de connexion qui se répètent dans chaque scénario.

Scenario: Display the relevant items assigned when logged in as an testUser
    Given I am on the login page
    And I fill email with valid testUser email address
    And I fill password with valid testUser password
    And I press Log in
    When I click on the selector
    Then I should see all the items assigned to my testUser account

Ici, le travail de clé "testUser" est paramétré. Parfois, les mêmes étapes seraient répétées avec un autre utilisateur tel que "stageUser". Pour ce genre d'étapes, Cucumber fournit-il un moyen de généraliser ces étapes d'une manière ou d'une autre? Parce que chaque scénario commence par ces 6 lignes, ce qui fait paraître les scearios plus grands et avec ces étapes répétitives.

Tout conseil serait très apprécié.


0 commentaires

3 Réponses :


0
votes

Utilisez les annotations @Before et @After pour exécuter respectivement avant et après chaque scénario. Dans les cas où nous devons effectuer une configuration / un nettoyage global: @BeforeSuite et @AfterSuite


3 commentaires

vous voulez dire dans la classe Java, non? Même dans ce cas, comment puis-je paramétrer l'adresse e-mail / le nom d'utilisateur? car il change d'un scénario à l'autre bien que les étapes soient les mêmes


Pensez-vous qu'il serait judicieux de diviser ces scénarios en différents fichiers de fonctionnalités? Pour conserver les scénarios pour un seul utilisateur séparément des scénarios pour plusieurs utilisateurs, et paramétrer les étapes @before dans le deuxième fichier.


merci pour la suggestion Valentyna, mais compte tenu du modèle d'objet de page que j'utilise, cela n'aurait pas beaucoup de sens pour moi :(



1
votes

Vous devriez envisager de déplacer les étapes courantes vers un arrière-plan. Cela semble être un peu un hack mais vous pouvez mentionner l'utilisateur dans la description du scénario comme ci-dessous.

private String user;

@Before
public void before(Scenario scen) {
    this.user = scen.getName().substring(scen.getName().indexOf('-') + 2);
}

Ensuite, capturez cet utilisateur dans le hook Before. L'utilisateur sera alors disponible à travers les étapes du scénario.

  Background: 
    Given Do given
    When Do when
    Then Do then

  Scenario: User is - Test User One
    And user name is

  Scenario: User is - Test User Two
    And user name is


0 commentaires

1
votes

Rédigez de meilleurs scénarios et étapes. Le vôtre dépend de la façon dont vous vous connectez, donc la répétition est douloureuse. Au lieu de cela, écrivez des étapes qui ne concernent que CE que vous faites; ils sont plus faciles à réutiliser.

Alors ...

Given I am logged in
  @i = create_registered_user
  login(user: @i
end

When I login
  login(user: @i)
end

Given I am registered
  @i = create_registered_user
end

puis plus tard

Feature: Something that requires me to be logged in

Background
  Given I am logged in

Scenario: Do something
  When I do something
  Then something should be done

Voir comment j'ai réduit le gros tas d'arrière-plan en quelque chose de beaucoup plus simple et abstrait.

Je vais vous donner quelques conseils sur l'implémentation ici

Scenario: Login
  Given I am registered
  When I login
  Then I should be logged in

Vous pouvez appliquer cette approche avec tout niveau de complexité. Notez comment, dans le dernier scénario, vous utilisez notre comportement relativement complexe d'enregistrement sans que le scénario ou la fonctionnalité n'en soit même conscient (l'enregistrement fait partie de la connexion).


0 commentaires