Fermer

mars 27, 2024

Annotations personnalisées TestNG avec paramètres / Blogs / Perficient

Annotations personnalisées TestNG avec paramètres / Blogs / Perficient


TestNG, un framework de test robuste pour Java, permet aux testeurs de créer des annotations personnalisées avec des paramètres, révolutionnant ainsi la façon dont les configurations de test sont gérées. Dans ce blog, nous approfondirons le processus de création d’annotations personnalisées dans TestNG, explorerons l’art de transmettre des paramètres à ces annotations et présenterons leur application pratique à travers des exemples illustratifs. Cette fonctionnalité améliore la modularité, la lisibilité et la maintenabilité des tests et change la donne pour les utilisateurs intermédiaires de TestNG.

Création d’annotations personnalisées avec des paramètres

Pour créer des annotations personnalisées dans TestNG, il faut définir l’interface d’annotation avec les paramètres souhaités. Ces paramètres peuvent être utilisés pour transmettre des valeurs aux méthodes de test, permettant ainsi des configurations de test dynamiques. En incorporant des paramètres dans des annotations personnalisées, les testeurs peuvent adapter le comportement des tests en fonction d’exigences spécifiques, améliorant ainsi la flexibilité et l’adaptabilité de leurs suites de tests.

Exemple:

Considérons un scénario dans lequel nous disposons de méthodes de test pour différents modes de paiement (par exemple, carte de crédit, PayPal), et nous souhaitons les paramétrer avec les détails du compte respectif à l’aide de l’annotation @TestData.

package Practice;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface TestData {

    String method(); // Payment method: creditCard or paypal

    String account(); // Account details: credit card number, PayPal email, etc.

    String cvv() default ""; // CVV for credit card (optional)

    String expiry() default ""; // Expiry date for credit card (optional)

    String password() default ""; // Password for PayPal (optional)
}

Comprenons le code :

  1. @Rétention(RetentionPolicy.RUNTIME):

    • Cette ligne définit la politique de rétention pour le @Données de test annotation. RetentionPolicy.RUNTIME indique que l’annotation doit être conservée au moment de l’exécution et est accessible via la réflexion.
  2. @Target (ElementType.METHOD):

    • Cette ligne précise que le @Données de test l’annotation ne peut être appliquée qu’aux méthodes.
  3. public @interface TestData:

    • Ceci déclare le Données de test annotation. Les annotations en Java sont déclarées à l’aide du @interface mot-clé.
package Practice;

import org.testng.annotations.Test;
import java.lang.reflect.Method;

public class PaymentTest {

    @Test
    @TestData(method = "creditCard", account = "1234567890123456", cvv = "123", expiry = "12/25")

    public void testCreditCardPayment() throws NoSuchMethodException {
        printTestData("testCreditCardPayment");
    }

    @Test
    @TestData(method = "paypal", account = "example@example.com", password = "password")
    public void testPayPalPayment() throws NoSuchMethodException {
        printTestData("testPayPalPayment");
    }

    private void printTestData(String methodName) throws NoSuchMethodException {
        Method method = getClass().getMethod(methodName);

        TestData testDataAnnotation = method.getAnnotation(TestData.class);

        if (testDataAnnotation != null) {

            System.out.println("Test Method: " + methodName);

            System.out.println("Payment Method: " + testDataAnnotation.method());

            if (testDataAnnotation.method().equals("creditCard")) {

                System.out.println("Credit Card Number: " + testDataAnnotation.account());

                System.out.println("CVV: " + testDataAnnotation.cvv());

                System.out.println("Expiry Date: " + testDataAnnotation.expiry());

            } else if (testDataAnnotation.method().equals("paypal")) {

                System.out.println("PayPal Account: " + testDataAnnotation.account());

                System.out.println("PayPal Password: " + testDataAnnotation.password());

            }
        } else {

            System.out.println("No TestData annotation found for method: " + methodName);
        }
    }
}

Comprenons le code :

  1. @Test:

    • Cette annotation marque une méthode comme méthode de test.
  2. @TestData(method = « creditCard », compte = « 1234567890123456 », cvv = « 123 », expiration = « 12/25 »):

    • Cette ligne applique le @Données de test annotation au testCarteDeCréditPaiement et spécifie le mode de paiement comme « carte de crédit » ainsi que les détails du compte associés, tels que le numéro de carte de crédit, le CVV et la date d’expiration.
  3. Méthode méthode = getClass().getMethod(methodName);:

    • Cette ligne récupère le Méthode objet correspondant à la méthode de test de nom donné (NomMéthode) en utilisant la réflexion.
  4. TestData testDataAnnotation = method.getAnnotation(TestData.class);:

    • Cette ligne récupère le @Données de test annotation associée à la méthode de test.
  5. si (testDataAnnotation != null):

    • Cette ligne vérifie si le @Données de test une annotation est présente pour la méthode de test.
  6. System.out.println (« Méthode de test :  » + nom de la méthode);:

    • Cette ligne imprime le nom de la méthode de test.
  7. System.out.println(« Méthode de paiement : » + testDataAnnotation.method());:

    • Cette ligne imprime le mode de paiement spécifié dans le @Données de test annotation.
  8. if (testDataAnnotation.method().equals(« CreditCard »)) { … }

    • Ce bloc conditionnel vérifie si le mode de paiement est « creditCard » et imprime des détails supplémentaires tels que le numéro de carte de crédit, le CVV et la date d’expiration.

Avantages des annotations personnalisées avec paramètres

  • Modularité améliorée: les annotations personnalisées permettent aux testeurs d’encapsuler des comportements ou des conditions de test courants, favorisant ainsi la réutilisabilité du code et réduisant la duplication.
  • Lisibilité améliorée: En résumant les configurations complexes dans des annotations personnalisées, les méthodes de test deviennent plus concises et plus faciles à comprendre.
  • Configuration des tests dynamiques: les paramètres des annotations personnalisées permettent une configuration de test dynamique, permettant aux testeurs de personnaliser le comportement des tests en fonction de critères spécifiques.

Les annotations personnalisées avec des paramètres dans TestNG offrent un moyen puissant d’améliorer les configurations de test, de promouvoir la réutilisation et d’améliorer la maintenabilité dans l’automatisation des tests. En créant des annotations comme @TestData avec des paramètres spécifiques, les testeurs peuvent fournir dynamiquement des valeurs d’entrée aux méthodes de test, rendant les tests plus adaptables et flexibles.






Source link