Rationaliser l’automatisation des tests avec le modèle d’objet de page (POM) dans PyTest et Selenium / Blogs / Perficient

Lors de notre discussion précédente sur l’utilisation de PyTest avec Selenium, nous avons jeté les bases des tests automatisés dans les applications Web. Améliorons maintenant cette base en explorant le modèle d’objet de page (POM), un modèle de conception qui améliore l’organisation de votre code et améliore la maintenabilité de vos tests.
Qu’est-ce que le modèle objet de page (POM) ?
Le modèle d’objet de page est un modèle de conception largement adopté dans l’automatisation des tests qui favorise une meilleure organisation du code et améliore la maintenance des tests. Essentiellement, POM représente chaque page de votre application comme une classe. Chaque classe encapsule les éléments Web et les fonctionnalités de cette page, permettant une séparation claire entre la logique de test et la logique d’interaction de l’interface utilisateur.
Principaux avantages de la mise en œuvre de POM :
- Maintenabilité améliorée: En faisant abstraction de la logique spécifique à la page, toute modification apportée à l’interface utilisateur ne doit être effectuée qu’à un seul endroit (au sein de la classe de page) plutôt que dans chaque scénario de test qui interagit avec cette page.
- Lisibilité améliorée: Les tests écrits à l’aide de POM ont tendance à être plus intuitifs, car ils ressemblent davantage à des actions utilisateur (par exemple, login_page.enter_username(« user »)), ce qui peut aider les membres de l’équipe à comprendre l’intention derrière les tests.
- Réutilisabilité accrue: les interactions courantes avec une page, comme cliquer sur des boutons ou remplir des formulaires, peuvent être réutilisées dans différents cas de test, réduisant ainsi la duplication et rendant les tests moins sujets aux erreurs.
- Évolutivité: Au fur et à mesure que votre application se développe, vous pouvez ajouter de nouvelles classes de pages sans affecter les tests existants, permettant ainsi à votre suite d’automatisation d’évoluer parallèlement à votre application.
Configuration de POM avec PyTest et Selenium
Pour illustrer comment implémenter POM dans un projet PyTest avec Selenium, nous suivrons une approche structurée.
Organiser la structure de votre projet
Une structure de projet bien organisée peut faire une différence significative dans la gestion de votre suite d’automatisation. Voici une disposition de répertoire recommandée :
bash /your_project /tests test_login.py /pages login_page.py /drivers chrome_driver.py pytest.ini requirements.txt
Définir l’objet de page
Créons une classe LoginPage qui représente la page de connexion de notre application. Cette classe encapsulera les éléments de la page et les actions qu’un utilisateur peut effectuer sur cette page.
python # /pages/login_page.py from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys class LoginPage: def __init__(self, driver): self.driver = driver self.username_field = (By.ID, "username") self.password_field = (By.ID, "password") self.login_button = (By.ID, "login") def enter_username(self, username): self.driver.find_element(*self.username_field).send_keys(username) def enter_password(self, password): self.driver.find_element(*self.password_field).send_keys(password) def click_login(self): self.driver.find_element(*self.login_button).click() def is_login_successful(self): # Example method to check if login was successful return "Dashboard" in self.driver.title
Rédaction d’un cas de test
Créons maintenant un scénario de test qui utilise notre classe LoginPage. Celui-ci sera placé dans le répertoire tests.
python # /tests/test_login.py import pytest from selenium import webdriver from pages.login_page import LoginPage @pytest.fixture def setup(): # Initialize the Chrome WebDriver driver = webdriver.Chrome(executable_path="path/to/chromedriver") driver.get("http://example.com/login") # Replace with your actual login URL yield driver driver.quit() def test_login(setup): driver = setup login_page = LoginPage(driver) # Perform login actions login_page.enter_username("testuser") login_page.enter_password("testpassword") login_page.click_login() # Assert login was successful assert login_page.is_login_successful(), "Login failed: User was not redirected to the dashboard."
Exécuter votre test
Pour exécuter vos tests, exécutez simplement la commande suivante dans votre terminal :
bash pytest tests/test_login.py
Si tout est configuré correctement, vous devriez voir les résultats de vos tests affichés dans la sortie du terminal.
Meilleures pratiques pour POM
Lors de la mise en œuvre du modèle objet de page, tenez compte des bonnes pratiques suivantes pour maximiser ses avantages :
- Gardez les classes de pages concentrées: Chaque classe de page doit représenter une seule page Web ou un composant de votre application. Pour rester clair, évitez d’inclure des méthodes appartenant à d’autres pages.
- Utilisez des noms de méthodes significatifs: Les noms de méthodes doivent décrire clairement leur fonction, comme enter_username ou click_login. Cela améliore la lisibilité de vos tests.
- Incorporer les attentes: utilisez des attentes explicites pour gérer le contenu dynamique. Cela permet de garantir que les éléments sont prêts à interagir avant que vos tests tentent d’interagir avec eux.
- Méthodes liées au groupe: Si votre page possède de nombreuses fonctionnalités, pensez à regrouper les méthodes associées pour maintenir l’organisation et la lisibilité.
Conclusion
En tirant parti du modèle objet de page dans votre stratégie d’automatisation des tests avec PyTest et Selenium, vous pouvez améliorer considérablement la structure, la lisibilité et la maintenabilité de votre code de test. Ce modèle de conception vous permet d’écrire des tests plus propres tout en garantissant que votre suite d’automatisation reste adaptable aux modifications de l’interface utilisateur de l’application.
À mesure que vous continuez à développer votre cadre d’automatisation, envisagez d’explorer des stratégies supplémentaires pour améliorer vos pratiques d’automatisation des tests, telles que l’utilisation de dispositifs, de tests basés sur les données et de l’exécution de tests en parallèle.
Bons tests et à la prochaine fois alors que nous nous plongerons dans des stratégies avancées pour une automatisation efficace des tests !
Source link