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é.
3 Réponses :
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
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 :(
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
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).