Εκτέλεση πολλαπλών δοκιμαστικών περιπτώσεων με TestNG Σουίτα μέσα Selenium
TestNG σας δίνει τη δυνατότητα να εκτελείτε μεθόδους δοκιμών, τάξεις δοκιμών και δοκιμαστικές περιπτώσεις παράλληλα μέσα στο έργο σας. Εκτελώντας παράλληλη εκτέλεση, μπορούμε να μειώσουμε τον 'χρόνο εκτέλεσης' καθώς οι δοκιμές ξεκινούν και εκτελούνται ταυτόχρονα σε διαφορετικά νήματα.
Εδώ θα δούμε πώς να τρέξουμε πολλές κλάσεις (γνωστές και ως διαφορετικές σουίτες) χρησιμοποιώντας TestNG.
Βήμα 1) Δημιουργία α TestNGαρχείο .xml για εκτέλεση δοκιμής
Για να το κάνετε αυτό ακολουθήστε τα παρακάτω βήματα.
- Δημιουργήστε ένα νέο έργο στο eclipse
- Δημιουργήστε δύο πακέτα στα έργα (ονομάστε τα ως com.suite1 και com.suite2)
- Δημιουργήστε μια κλάση σε κάθε πακέτο (ονομάστε τα ως Flipkart.java και Snapdeal.java) και αντιγράψτε τον παρακάτω κώδικα στις αντίστοιχες κλάσεις
- Δημιουργήστε ένα νέο αρχείο στο έργο σας και ονομάστε το testng.xml (Βεβαιωθείτε ότι έχετε εγκαταστήσει το πρόσθετο δοκιμής για έκλειψη, διαθέσιμες οδηγίες εδώ). Το Testng.xml περιέχει όλες τις ρυθμίσεις παραμέτρων (ονόματα κλάσεων, ονόματα δοκιμών και ονόματα.
Flipkart.java
package com.suite1;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class Flipkart{
WebDriver driver = new FirefoxDriver();
String username = ""; // Change to your username and passwrod
String password = "";
// This method is to navigate flipkart URL
@BeforeClass
public void init() {
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
driver.navigate().to("https://www.flipkart.com");
}
// To log in flipkart
@Test
public void login() {
driver.findElement(By.partialLinkText("Login")).click();
driver.findElement(
By.cssSelector(".fk-input.login-form-input.user-email"))
.sendKeys(username);
driver.findElement(
By.cssSelector(".fk-input.login-form-input.user-pwd"))
.sendKeys(password);
driver.findElement(By.cssSelector(".submit-btn.login-btn.btn")).click();
}
// Search For product
@Test
public void searchAndSelectProduct() {
driver.findElement(By.id("fk-top-search-box")).sendKeys("moto g3");
driver.findElement(
By.cssSelector("search-bar-submit.fk-font-13.fk-font-bold"))
.click();
// select the first item in the search results
String css = ".gd-row.browse-grid-row:nth-of-type(1) > div:nth-child(1)>div>div:nth-child(2)>div>a";
driver.findElement(By.cssSelector(css)).click();
}
@Test
public void buyAndRemoveFromCart() {
driver.findElement(
By.cssSelector(".btn-express-checkout.btn-big.current"))
.click();
driver.findElement(By.cssSelector(".remove.fk-inline-block")).click();
Alert a = driver.switchTo().alert();
a.accept();
}
@Test
public void logout() {
Actions s = new Actions(driver);
WebElement user = driver.findElement(By.partialLinkText(username));
s.moveToElement(user).build().perform();
driver.findElement(By.linkText("Logout")).click();
}
@AfterClass
public void quit() {
driver.close();
}
}
SnapDeal.java
package com.suite2;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class SnapDeal {
WebDriver driver = new FirefoxDriver();
String username = ""; // Change to your username and passwrod
String password = "";
String pinCode = "";
// This method is to navigate snapdeal URL
@BeforeClass
public void init() {
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
driver.navigate().to("https://www.snapdeal.com");
}
// To log in flipkart
@Test
public void login() {
driver.findElement(By.xpath("//button[text()='Login']")).click();
driver.switchTo().frame("loginIframe");
driver.findElement(By.cssSelector("div[onClick='getLoginForm()']"))
.click();
driver.findElement(By.id("j_username")).sendKeys(username);
driver.findElement(By.id("j_password_login")).sendKeys(password);
driver.findElement(By.id("signin_submit")).click();
driver.switchTo().defaultContent();
}
// Search For product
@Test
public void searchAndSelectProduct() {
driver.findElement(By.cssSelector(".col-xs-20.searchformInput.keyword"))
.sendKeys("iphone 6s");
driver.findElement(By.cssSelector(".sd-icon.sd-icon-search")).click();
// select the first item in the search results
String css = ".product_grid_row:nth-of-type(1)>div:nth-child(1)";
driver.findElement(By.cssSelector(css)).click();
}
@Test
public void buyAndRemoveFromCart() {
driver.findElement(By.xpath("//li[contains(text(),'Silver')]")).click();
driver.findElement(By.id("pincode-check")).sendKeys(pinCode);
driver.findElement(By.id("buy-button-id")).click();
driver.findElement(By.cssSelector("i[title='Delete Item']")).click();
Alert a = driver.switchTo().alert();
a.accept();
}
@Test
public void logout() {
driver.findElement(By.linkText("START SHOPPING NOW")).click();
Actions s = new Actions(driver);
WebElement user = driver.findElement(By.cssSelector(".sd-icon.sd-icon-user"));
s.moveToElement(user).build().perform();
driver.findElement(By.linkText("Logout")).click();
}
@AfterClass
public void quit() {
driver.close();
}
}
TestNg.xml
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite thread-count="1" verbose="1" name="Gmail Suite" annotations="JDK" parallel="tests">
<test name="flipkart">
<classes>
<class name="com.suite1.Flipkart"/>
</classes>
</test>
<test name="Myntra">
<classes>
<class name="com.suite2.SnapDeal"/>
</classes>
</test>
</suite>
Η τελική δομή του έργου μοιάζει με παρακάτω,
Βήμα 2) Παράλληλη εκτέλεση σε TestNG
Αφού δημιουργήσουμε το αρχείο xml όπως φαίνεται παραπάνω, στο επόμενο βήμα, θα εκτελέσουμε την παράλληλη δοκιμή. Παρακάτω είναι ο κωδικός.
1) αριθμός νημάτων: Χρησιμοποιείται για παράλληλη εκτέλεση, με βάση το σενάριο αριθμών. Θα εκτελεστεί με παράλληλη ή διαδοχική σειρά.
2) πολυλεκτικός: Χρησιμοποιείται για την καταγραφή των λεπτομερειών εκτέλεσης στην κονσόλα. Η τιμή πρέπει να είναι 1-10. Οι λεπτομέρειες του αρχείου καταγραφής στο παράθυρο της κονσόλας θα γίνονται πιο λεπτομερείς και σαφέστερες καθώς αυξάνετε την τιμή του χαρακτηριστικού verbose στο αρχείο διαμόρφωσης testng.xml.
3) όνομα: Όνομα της σουίτας. Ορίστε το «Gmail Σουίτα"
4) Παράλληλη: Για την παράλληλη εκτέλεση σεναρίων, η τιμή μπορεί να είναι δοκιμές/τάξεις/μέθοδοι/σουίτες. Η προεπιλεγμένη τιμή είναι κανένας
Κάντε δεξί κλικ στο testng.xml και επιλέξτε run as testing, μόλις πετύχετε θα δείτε όλα τα αποτελέσματα
Όταν εκτελέσετε τον παραπάνω κώδικα, θα λάβετε την ακόλουθη έξοδο.
Παραγωγή:
1) όνομα της σουίτας που δίνεται στο testng.xml
2) όνομα του τεστ που δίνεται στο testng.xml
3) όνομα της τάξης που δίνεται στο testng.xml
4) ονόματα μεθόδων σχολιασμένα με @Test σε αρχείο .java
Ομοίως, θα εκτελέσει δοκιμαστική σουίτα για snap deal επίσης.
Συμπέρασμα
Εδώ είδαμε στο παραπάνω παράδειγμα, πώς να το χρησιμοποιήσετε Testng για την εκτέλεση παράλληλης δοκιμής. TestNG δίνει την επιλογή εκτέλεσης πολλαπλών δοκιμών παράλληλα σε ένα μόνο αρχείο διαμόρφωσης (XML).




