Fermer

décembre 5, 2024

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

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.

1 Hjpcblbvd8mpqaezzxwvgg

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 :

  1. 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.
  2. 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.
  3. 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.
  4. É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.

  1. 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
  1. 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
  1. 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."
  1. 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