TestNG @Test Priority in Selenium

TestNG είναι ένα Δοκιμές πλαίσιο, που καλύπτει διαφορετικούς τύπους σχεδίων δοκιμής, όπως δοκιμή μονάδας, λειτουργική δοκιμή, δοκιμή από άκρο σε άκρο, δοκιμή διεπαφής χρήστη και δοκιμή ενοποίησης.

Μπορείτε να εκτελέσετε μία ή περισσότερες περιπτώσεις δοκιμής στο δικό σας Testng κώδικας.

Εάν η προτεραιότητα δοκιμής δεν έχει καθοριστεί κατά την εκτέλεση πολλαπλών περιπτώσεων δοκιμής, TestNG εκχωρεί σε όλα τα @Test προτεραιότητα ως μηδέν(0).

Τώρα, ενώ τρέχετε? πρώτα θα προγραμματιστούν χαμηλότερες προτεραιότητες.

Επίδειξη του TestNG κωδικός χωρίς προτεραιότητα

Ας πάρουμε ένα σενάριο όπου θα απαιτείται αλληλουχία προκειμένου να περάσουν όλες οι περιπτώσεις δοκιμής:

Σενάριο: Δημιουργήστε έναν κωδικό όπου απαιτείται να πραγματοποιήσετε μια αναζήτηση Google με μια συγκεκριμένη λέξη-κλειδί, όπως "Facebook". Τώρα, βεβαιωθείτε ότι ο τίτλος του προγράμματος περιήγησης έχει αλλάξει σε "Facebook - Αναζήτηση Google".

Σημείωση: Κάθε βήμα που κωδικοποιείτε πρέπει να γίνεται σε ξεχωριστές μεθόδους

Μέθοδος 1: Ανοίξτε το πρόγραμμα περιήγησης πείτε Firefox (openBrowser())

Μέθοδος 2: Εκκίνηση του Google.com (launchGoogle())

Μέθοδος 3: Εκτελέστε μια αναζήτηση χρησιμοποιώντας το "Facebook" (performSearchAndClick1stLink())

Μέθοδος 4: Επαληθεύστε τον τίτλο της σελίδας αναζήτησης Google (FaceBookPageTitleVerification())

Κωδικός για το σενάριό μας:

import org.openqa.selenium.By;			
import org.openqa.selenium.WebDriver;			
import org.openqa.selenium.firefox.FirefoxDriver;			
import org.testng.Assert;			
import org.testng.annotations.Test;			

public class Priority_In_testNG {		
    WebDriver driver;			

	    // Method 1: Open Brower say Firefox			
	    @Test		
	    public void openBrowser() {				
	        driver = new FirefoxDriver();				
	    }		

	    // Method 2: Launch Google.com			
	    @Test		
	    public void launchGoogle() {				
	        driver.get("http://www.google.co.in");						
	    }		
        
	    // Method 3: Perform a search using "Facebook"			
	    @Test		
	    public void peformSeachAndClick1stLink() {				
	        driver.findElement(By.xpath(".//*[@title='Search']")).sendKeys("Facebook");								
	    }		

	    // Method 4: Verify Google search page title.			
	    @Test		
	    public void FaceBookPageTitleVerification() throws Exception {				
	        driver.findElement(By.xpath(".//*[@value='Search']")).click();						
	        Thread.sleep(3000);		
	        Assert.assertEquals(driver.getTitle().contains("Facebook - Google Search"), true);				
	    }		
	}		

Επεξήγηση Κώδικα

Όπως αναφέρθηκε παραπάνω, έχουμε δημιουργήσει 4 δοκιμαστικές περιπτώσεις για την εκτέλεση κάθε ενέργειας σε ανεξάρτητες μεθόδους.

  • Η πρώτη μέθοδος (ανοιχτό πρόγραμμα περιήγησης) καταστάσεις για αρχικοποίηση Firefox browser.
  • Η δεύτερη μέθοδος (εκκίνηση του Google) δηλώνει ότι η εκκίνηση του Google.com βρίσκεται στο αρχικοποιημένο πρόγραμμα περιήγησης.
  • Η τρίτη μέθοδος (peformSeachAndClick1stLink)καταστάσεις που πραγματοποιούν αναζήτηση στην αναζήτηση box (με xpath (“.//*[@title='Αναζήτηση']») με όρο αναζήτησης ως Facebook και
  • Η τέταρτη και τελευταία μέθοδος (FaceBookPageTitleVerification) δηλώνει ότι κάντε κλικ στο εικονίδιο αναζήτησης της Google και επαληθεύστε ότι ο τίτλος του προγράμματος περιήγησης έχει αλλάξει σε Facebook – Αναζήτηση Google.

Τώρα εκτελέστε αυτόν τον κωδικό χρησιμοποιώντας testNG όπως φαίνεται στο βίντεο θα βρείτε όλα τα Δοκιμαστική θήκη αποτυγχάνουν. Ο λόγος της αποτυχίας: καθώς υπάρχει εξάρτηση από προηγούμενη δοκιμαστική περίπτωση για να περάσει, θα περάσει μόνο από την τρέχουσα δοκιμαστική περίπτωση.

Στην περίπτωση αυτή,

  • Η πρώτη μέθοδος που εκτελείται είναι openBrowser(). Πέρασε γιατί δεν έχει καμία εξάρτηση.
  • Η δεύτερη μέθοδος που εκτελείται είναι FaceBookPageTitleVerification(); αποτυγχάνει επειδή προσπαθούμε να κάνουμε κλικ στο κουμπί αναζήτησης και να επαληθεύσουμε τον τίτλο του προγράμματος περιήγησης.
  • Μπορείτε να δείτε ότι εάν η δραστηριότητα αναζήτησης δεν είναι διαδικασία, τότε πώς μπορεί να περάσει οποιοδήποτε άλλο βήμα. Ως εκ τούτου, αυτός είναι ο λόγος που οι δοκιμαστικές μου περιπτώσεις αποτυγχάνουν.
PASSED: openBrowser
FAILED: FaceBookPageTitleVerification
FAILED: launchGoogle
FAILED: peformSeachAndClick1stLink

Επίδειξη του TestNG κωδικός χωρίς προτεραιότητα σε αλφαβητική σειρά

Αν δεν αναφέρουμε κάποια προτεραιότητα, testng θα εκτελέσει τις μεθόδους @Test με βάση την αλφαβητική σειρά των ονομάτων των μεθόδων τους, ανεξάρτητα από τον τόπο εφαρμογής τους στον κώδικα.

package com.guru.testngannotations;

import org.testng.annotations.Test;

public class TestNG_Priority_Annotations {

@Test
public void c_method(){
System.out.println("I'm in method C");
}
@Test
public void b_method(){
System.out.println("I'm in method B");
}
@Test
public void a_method(){
System.out.println("I'm in method A");
}
@Test
public void e_method(){
System.out.println("I'm in method E");
}
@Test
public void d_method(){
System.out.println("I'm in method D");
}

}

Παραγωγή

I'm in method A 
I'm in method B 
I'm in method C 
I'm in method D 
I'm in method E 

Αν και ορίσαμε τις μεθόδους με τυχαίο τρόπο (c, b, a, e, d), testng εκτέλεσαν τις μεθόδους με βάση τα ονόματα των μεθόδων τους λαμβάνοντας υπόψη την αλφαβητική σειρά και το ίδιο αντικατοπτρίστηκε και στην έξοδο.

Πώς να ορίσετε την προτεραιότητα TestNG

Όπως είδατε στο προηγούμενο παράδειγμα ότι απαιτείται αλληλουχία για να περάσει αυτό το σενάριο, έτσι θα τροποποιήσουμε το προηγούμενο κομμάτι κώδικα με Παράμετρος προτεραιότητας έτσι ώστε κάθε δοκιμή θα πρέπει να λειτουργεί με βάση την προτεραιότητα που τους έχει ανατεθεί.

Τώρα, όπως μπορείτε να δείτε, έχουμε εκχωρήσει την Προτεραιότητα σε κάθε περίπτωση δοκιμής σημαίνει ότι η δοκιμαστική περίπτωση θα εκτελεστεί πρώτα η τιμή χαμηλότερης προτεραιότητας.

Προτεραιότητα σε testNG εν ΔΡΑΣΕΙ

import org.openqa.selenium.By;			
import org.openqa.selenium.WebDriver;			
import org.openqa.selenium.firefox.FirefoxDriver;			
import org.testng.Assert;			
import org.testng.annotations.Test;			

public class Priority_In_testNG {		
    WebDriver driver;			

    // Method 1: Open Browser say Firefox			
    @Test (priority=1)		
    public void openBrowser() {				
        driver = new FirefoxDriver();				
    }		

    // Method 2: Launch Google.com			
    @Test (priority=2)		
    public void launchGoogle() {				
        driver.get("http://www.google.co.in");						
    }		

    // Method 3: Perform a search using "Facebook"			
    @Test (priority=3)		
    public void peformSeachAndClick1stLink() {				
        driver.findElement(By.xpath(".//*[@title='Search']")).sendKeys("Facebook");								
    }		

    // Method 4: Verify Google search page title.			
    @Test (priority=4)		
    public void FaceBookPageTitleVerification() throws Exception {				
        driver.findElement(By.xpath(".//*[@value='Search']")).click();						
        Thread.sleep(3000);		
        Assert.assertEquals(driver.getTitle().contains("Facebook - Google Search"), true);				
    }		
}

Επεξήγηση Κώδικα

Αφού ορίσετε προτεραιότητα σε κάθε δοκιμαστική περίπτωση, εκτελέστε τον παραπάνω κώδικα χρησιμοποιώντας testNG όπως φαίνεται στο Video-2 που αναφέρεται παρακάτω.

Εδώ, μπορείτε να δείτε ότι οι περιπτώσεις δοκιμής έχουν προτεραιότητα. Η δοκιμαστική περίπτωση που έχει χαμηλότερη προτεραιότητα εκτελείται πρώτα, δηλαδή τώρα υπάρχει μια διαδοχική εκτέλεση σύμφωνα με την προτεραιότητα στις περιπτώσεις δοκιμής. Ως εκ τούτου, όλα τα τεστ περνούν τώρα.

Σημειώστε την κονσόλα του eclipse:

Παραγωγή :

PASSED: openBrowser
PASSED: launchGoogle
PASSED: peformSearchAndClick1stLink
PASSED: FaceBookPageTitleVerification

Ο αριθμός 0 έχει την υψηλότερη προτεραιότητα (θα εκτελεστεί πρώτος) και η προτεραιότητα συνεχίζεται με βάση τον δεδομένο αριθμό, δηλαδή, το 0 έχει την υψηλότερη προτεραιότητα από το 1. Το 1 έχει την υψηλότερη προτεραιότητα από το 2 κ.ο.κ.

package com.guru.testngannotations;
import org.testng.annotations.Test;

public class TestNG_Priority_Annotations {

    @Test(priority=6)
    public void c_method(){
    System.out.println("I'm in method C");
    }
    @Test(priority=9)
    public void b_method(){
    System.out.println("I'm in method B");
    }
    @Test(priority=1)
    public void a_method(){
    System.out.println("I'm in method A");
    }
    @Test(priority=0)
    public void e_method(){
    System.out.println("I'm in method E");
    }
    @Test(priority=3)
    public void d_method(){
    System.out.println("I'm in method D");
    }

}

Παραγωγή

I'm in method E 
I'm in method A 
I'm in method D 
I'm in method C 
I'm in method B

Εδώ έχουμε δώσει τις προτεραιότητες ως 0,1,3,6,9. Έτσι, η μέθοδος που έχει προτεραιότητα το 0 εκτελείται πρώτα και μετά η μέθοδος που έχει προτεραιότητα-1 και ούτω καθεξής. Εδώ το όνομα της μεθόδου αλφαβητικής σειράς δεν θα λαμβάνεται υπόψη, καθώς δώσαμε τις προτεραιότητες

Μέθοδοι με την ίδια προτεραιότητα

Μπορεί να υπάρχει πιθανότητα οι μέθοδοι να έχουν την ίδια προτεραιότητα. Σε αυτές τις περιπτώσεις, testng εξετάζει την αλφαβητική σειρά των ονομάτων μεθόδων των οποίων η προτεραιότητα είναι ίδια.

package com.guru.testngannotations;
import org.testng.annotations.Test;

public class TestNG_Priority_Annotations {

    @Test(priority=6)
    public void c_method(){
    System.out.println("I'm in method C");
    }
    @Test(priority=9)
    public void b_method(){
    System.out.println("I'm in method B");
    }
    @Test(priority=6)
    public void a_method(){
    System.out.println("I'm in method A");
    }
    @Test(priority=0)
    public void e_method(){
    System.out.println("I'm in method E");
    }
    @Test(priority=3)
    public void d_method(){
    System.out.println("I'm in method D");
    }

}

Παραγωγή

I'm in method E 
I'm in method D 
I'm in method A 
I'm in method C 
I'm in method B 

Εδώ τα 'e' και 'd' εκτελούνται με βάση τις τιμές προτεραιότητάς τους. Αλλά οι μέθοδοι 'a' και 'c' περιέχουν την ίδια τιμή προτεραιότητας(6). Οποτε εδω testng εξετάζει την αλφαβητική σειρά των «α» και «γ» και τα εκτελεί ανάλογα.

Συνδυασμός μεθόδων με προτεραιότητα (με την ίδια προτεραιότητα) και μη ιεραρχημένη

Σε αυτήν την περίπτωση, θα καλύψουμε δύο περιπτώσεις σε μία testng τάξη.

  1. Μέθοδοι με την ίδια τιμή προτεραιότητας.
  2. Περισσότερες από μία μέθοδοι χωρίς προτεραιότητα.
package com.guru.testngannotations;

import org.testng.annotations.Test;

public class TestNG_Priority_Annotations {

	@Test()
	public void c_method(){
		System.out.println("I'm in method C");
	}
	@Test()
	public void b_method(){
		System.out.println("I'm in method B");
	}
	@Test(priority=6)
	public void a_method(){
		System.out.println("I'm in method A");
	}
	@Test(priority=0)
	public void e_method(){
		System.out.println("I'm in method E");
	}
	@Test(priority=6)
	public void d_method(){
		System.out.println("I'm in method D");
	}
}

Παραγωγή:

I'm in method B 
I'm in method C 
I'm in method E 
I'm in method A 
I'm in method D
PASSED: b_method 
PASSED: c_method 
PASSED: e_method 
PASSED: a_method 
PASSED: d_method

Επεξήγηση:

Πρώτη προτίμηση: Μέθοδοι χωρίς προτεραιότητα: 'c' και 'b': Με βάση την αλφαβητική σειρά εκτελέστηκε πρώτα το 'b' και μετά το 'c'.

Δεύτερη προτίμηση: Μέθοδοι με προτεραιότητα: 'a', 'e' και 'd': το 'e' εκτελέστηκε πρώτα καθώς είχε την υψηλότερη προτεραιότητα(0). Καθώς η προτεραιότητα των μεθόδων «a» και «d» ήταν ίδια, testng έλαβε υπόψη την αλφαβητική σειρά των ονομάτων των μεθόδων τους. Έτσι, μεταξύ τους, εκτελέστηκε πρώτα το 'a' και μετά το 'd'.

Με διάκριση πεζών-κεφαλαίων σε TestNG

Απλώς για ενημέρωσή σας υπάρχει μια τυπική σύνταξη για τον καθορισμό της προτεραιότητας testNG δηλαδή @Test (προτεραιότητα=4), ας υποθέσουμε ότι το ορίζετε σε κάποια άλλη σύνταξη ας πούμε @Δοκιμή (PRIORITY=1) τότε το IDE σας θα το εμφανίσει ως σφάλμα μεταγλώττισης. Ανατρέξτε στην εικόνα παρακάτω:

Με διάκριση πεζών-κεφαλαίων σε TestNG

Συμπέρασμα

Όπως έχετε δει ότι εάν υπάρχει απαίτηση να εκτελεστεί ένα σύνολο δοκιμαστικών περιπτώσεων με συγκεκριμένη σειρά, τότε μπορεί να γίνει εύκολα χρησιμοποιώντας Προτεραιότητα χρησιμοποιώντας testNG ως εργαλείο τρεξίματος.

Αυτό το σεμινάριο κατέστη δυνατό χάρη στις συνεισφορές των Ramandeep Singh και Rama Krishna Gadde