ซีลีเนียม - กริด
Selenium Grid เป็นเครื่องมือที่กระจายการทดสอบไปยังเครื่องจริงหรือเครื่องเสมือนหลายเครื่องเพื่อให้เราสามารถรันสคริปต์แบบขนาน ช่วยเร่งกระบวนการทดสอบในเบราว์เซอร์และข้ามแพลตฟอร์มอย่างมากโดยการให้ข้อเสนอแนะที่รวดเร็วและแม่นยำ
Selenium Grid ช่วยให้เราสามารถดำเนินการทดสอบ WebDriver หรือ Selenium Remote Control หลายอินสแตนซ์พร้อมกันซึ่งใช้รหัสฐานเดียวกันดังนั้นรหัสจึงไม่จำเป็นต้องมีอยู่ในระบบที่ดำเนินการ แพคเกจซีลีเนียมเซิร์ฟเวอร์แบบสแตนด์อโลนประกอบด้วย Hub, WebDriver และ Selenium RC เพื่อดำเนินการสคริปต์ในตาราง
Selenium Grid มี Hub และ Node
Hub- ฮับยังสามารถเข้าใจได้ว่าเป็นเซิร์ฟเวอร์ซึ่งทำหน้าที่เป็นจุดศูนย์กลางที่การทดสอบจะถูกเรียกใช้ Selenium Grid มีเพียง Hub เดียวและเปิดตัวในเครื่องเดียวครั้งเดียว
Node- โหนดคืออินสแตนซ์ Selenium ที่ต่อเข้ากับ Hub ซึ่งดำเนินการทดสอบ อาจมีโหนดอย่างน้อยหนึ่งโหนดในกริดซึ่งอาจเป็นระบบปฏิบัติการใดก็ได้และสามารถมีเบราว์เซอร์ที่รองรับซีลีเนียมได้
สถาปัตยกรรม
แผนภาพต่อไปนี้แสดงสถาปัตยกรรมของ Selenium Grid
การทำงานกับ Grid
ในการทำงานกับ Grid เราจำเป็นต้องปฏิบัติตามโปรโตคอลบางอย่าง ฟังด้านล่างนี้คือขั้นตอนสำคัญที่เกี่ยวข้องในกระบวนการนี้ -
- การกำหนดค่าฮับ
- การกำหนดค่าโหนด
- พัฒนาสคริปต์และเตรียมไฟล์ XML
- ทดสอบการดำเนินการ
- การวิเคราะห์ผลลัพธ์
ให้เราพูดคุยแต่ละขั้นตอนเหล่านี้โดยละเอียด
การกำหนดค่าฮับ
Step 1 - ดาวน์โหลดไฟล์ JAR แบบสแตนด์อโลนของเซิร์ฟเวอร์ Selenium ล่าสุดจากไฟล์ http://docs.seleniumhq.org/download/. ดาวน์โหลดโดยคลิกที่เวอร์ชันดังที่แสดงด้านล่าง
Step 2- เริ่มต้นฮับโดยการเรียกใช้เซิร์ฟเวอร์ซีลีเนียมโดยใช้คำสั่งต่อไปนี้ ตอนนี้เราจะใช้พอร์ต '4444' เพื่อเริ่มต้นฮับ
Note - ตรวจสอบให้แน่ใจว่าไม่มีแอปพลิเคชันอื่น ๆ ที่ทำงานบนพอร์ต # 4444
java -jar selenium-server-standalone-2.25.0.jar -port 4444 -role hub -nodeTimeout 1000
Step 3 - ตอนนี้เปิดเบราว์เซอร์และไปที่ URL http // localhost: 4444 จาก Hub (ระบบที่คุณดำเนินการขั้นตอนที่ # 2)
Step 4- คลิกที่ลิงค์ 'คอนโซล' แล้วคลิก 'ดู config' การกำหนดค่าของฮับจะแสดงดังนี้ ณ ตอนนี้เรายังไม่มีโหนดใด ๆ ดังนั้นเราจะไม่สามารถดูรายละเอียดได้
การกำหนดค่าโหนด
Step 1- ล็อกออนเข้าสู่โหนด (ที่คุณต้องการเรียกใช้สคริปต์) และวาง 'ซีลีเนียมเซิร์ฟเวอร์สแตนด์อโลน -242.2' ในโฟลเดอร์ เราจำเป็นต้องชี้ไปที่ JAR ซีลีเนียมเซิร์ฟเวอร์แบบสแตนด์อโลนในขณะที่เรียกใช้โหนด
Step 2 - เรียกใช้ FireFox Node โดยใช้คำสั่งด้านล่างนี้
java -jar D:\JAR\selenium-server-standalone-2.42.2.jar
-role node -hub http://10.30.217.157:4444/grid/register
-browser browserName = firefox -port 5555
ที่ไหน
D: \ JAR \ selenium-server-standalone-2.42.2.jar = ตำแหน่งของไฟล์ Jar แบบสแตนด์อโลนของเซิร์ฟเวอร์ Selenium (บน Node Machine)
http://10.30.217.157:4444 = IP Address ของ Hub และ 4444 คือพอร์ตของ Hub
browserName = firefox (พารามิเตอร์เพื่อระบุชื่อเบราว์เซอร์บนโหนด)
5555 = พอร์ตที่ Firefox Node จะเปิดใช้งาน
Step 3- หลังจากดำเนินการคำสั่งแล้วให้กลับมาที่ Hub ไปที่ URL - http://10.30.217.157:4444 และตอนนี้ Hub จะแสดงโหนดที่ต่ออยู่
Step 4- ตอนนี้ให้เราเปิด Internet Explorer Node สำหรับการเปิดใช้งาน IE Node เราจำเป็นต้องดาวน์โหลดไดรเวอร์ Internet Explorer บนเครื่องโหนด
Step 5 - หากต้องการดาวน์โหลดไดรเวอร์ Internet Explorer ให้ไปที่ http://docs.seleniumhq.org/download/และดาวน์โหลดไฟล์ที่เหมาะสมตามสถาปัตยกรรมของระบบปฏิบัติการของคุณ หลังจากคุณดาวน์โหลดแล้วให้คลายซิปไฟล์ exe และวางไว้ในโฟลเดอร์ที่ต้องอ้างถึงในขณะที่เรียกใช้โหนด IE
Step 6 - เปิด IE โดยใช้คำสั่งต่อไปนี้
C:\>java -Dwebdriver.ie.driver = D:\IEDriverServer.exe
-jar D:\JAR\selenium-server-standalone-2.42.2.jar
-role webdriver -hub http://10.30.217.157:4444/grid/register
-browser browserName = ie,platform = WINDOWS -port 5558
ที่ไหน
D: \ IEDriverServer.exe = ตำแหน่งของไดรเวอร์ IE ที่ดาวน์โหลดมา (บน Node Machine)
D: \ JAR \ selenium-server-standalone-2.42.2.jar = ตำแหน่งของไฟล์ Jar แบบสแตนด์อโลนของเซิร์ฟเวอร์ Selenium (บน Node Machine)
http://10.30.217.157:4444 = IP Address ของ Hub และ 4444 คือพอร์ตของ Hub
browserName = ie (พารามิเตอร์เพื่อระบุชื่อเบราว์เซอร์บนโหนด)
5558 = พอร์ตที่ IE Node จะเปิดใช้งาน
Step 7- หลังจากดำเนินการคำสั่งแล้วให้กลับมาที่ Hub ไปที่ URL - http://10.30.217.157:4444 และตอนนี้ Hub จะแสดงโหนด IE ที่แนบมา
Step 8- ให้เราเปิด Chrome Node ในการเปิด Chrome Node เราจำเป็นต้องดาวน์โหลดไดรเวอร์ Chrome บนเครื่องโหนด
Step 9 - หากต้องการดาวน์โหลดไดรเวอร์ Chrome ให้ไปที่ http://docs.seleniumhq.org/download/ จากนั้นไปที่พื้นที่ Third Party Browser Drivers และคลิกที่หมายเลขเวอร์ชัน '2.10' ดังที่แสดงด้านล่าง
Step 10- ดาวน์โหลดไดรเวอร์ตามประเภทของระบบปฏิบัติการของคุณ เราจะดำเนินการในสภาพแวดล้อม Windows ดังนั้นเราจะดาวน์โหลดไดรเวอร์ Windows Chrome หลังจากคุณดาวน์โหลดแล้วให้คลายซิปไฟล์ exe และวางไว้ในโฟลเดอร์ที่ต้องอ้างถึงในขณะที่เรียกใช้โหนดโครเมี่ยม
Step 11 - เปิด Chrome โดยใช้คำสั่งต่อไปนี้
C:\>java -Dwebdriver.chrome.driver = D:\chromedriver.exe
-jar D:\JAR\selenium-server-standalone-2.42.2.jar
-role webdriver -hub http://10.30.217.157:4444/grid/register
-browser browserName = chrome, platform = WINDOWS -port 5557
ที่ไหน
D: \ chromedriver.exe = ตำแหน่งของไดรเวอร์ chrome ที่ดาวน์โหลดมา (บน Node Machine)
D: \ JAR \ selenium-server-standalone-2.42.2.jar = ตำแหน่งของไฟล์ Jar แบบสแตนด์อโลนของเซิร์ฟเวอร์ Selenium (บน Node Machine)
http://10.30.217.157:4444 = IP Address ของ Hub และ 4444 คือพอร์ตของ Hub
browserName = chrome (พารามิเตอร์เพื่อระบุชื่อเบราว์เซอร์บนโหนด)
5557 = พอร์ตที่ Chrome Node จะเปิดใช้งาน
Step 12- หลังจากดำเนินการคำสั่งแล้วให้กลับมาที่ Hub ไปที่ URL - http://10.30.217.157:4444 และตอนนี้ Hub จะแสดงโหนดโครเมี่ยมที่ต่ออยู่
พัฒนาสคริปต์และเตรียมไฟล์ XML
Step 1- เราจะพัฒนาการทดสอบโดยใช้ TestNG ในตัวอย่างต่อไปนี้เราจะเปิดเบราว์เซอร์แต่ละตัวโดยใช้ webDriver ระยะไกล สามารถส่งต่อความสามารถของพวกเขาไปยังไดรเวอร์เพื่อให้ไดรเวอร์มีข้อมูลทั้งหมดเพื่อดำเนินการบนโหนด
พารามิเตอร์ของเบราว์เซอร์จะถูกส่งผ่านจากไฟล์ "XML"
package TestNG;
import org.openqa.selenium.*;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import java.net.MalformedURLException;
public class TestNGClass {
public WebDriver driver;
public String URL, Node;
protected ThreadLocal<RemoteWebDriver> threadDriver = null;
@Parameters("browser")
@BeforeTest
public void launchapp(String browser) throws MalformedURLException {
String URL = "http://www.calculator.net";
if (browser.equalsIgnoreCase("firefox")) {
System.out.println(" Executing on FireFox");
String Node = "http://10.112.66.52:5555/wd/hub";
DesiredCapabilities cap = DesiredCapabilities.firefox();
cap.setBrowserName("firefox");
driver = new RemoteWebDriver(new URL(Node), cap);
// Puts an Implicit wait, Will wait for 10 seconds before throwing exception
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
// Launch website
driver.navigate().to(URL);
driver.manage().window().maximize();
} else if (browser.equalsIgnoreCase("chrome")) {
System.out.println(" Executing on CHROME");
DesiredCapabilities cap = DesiredCapabilities.chrome();
cap.setBrowserName("chrome");
String Node = "http://10.112.66.52:5557/wd/hub";
driver = new RemoteWebDriver(new URL(Node), cap);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
// Launch website
driver.navigate().to(URL);
driver.manage().window().maximize();
} else if (browser.equalsIgnoreCase("ie")) {
System.out.println(" Executing on IE");
DesiredCapabilities cap = DesiredCapabilities.chrome();
cap.setBrowserName("ie");
String Node = "http://10.112.66.52:5558/wd/hub";
driver = new RemoteWebDriver(new URL(Node), cap);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
// Launch website
driver.navigate().to(URL);
driver.manage().window().maximize();
} else {
throw new IllegalArgumentException("The Browser Type is Undefined");
}
}
@Test
public void calculatepercent() {
// Click on Math Calculators
driver.findElement(By.xpath(".//*[@id = 'menu']/div[3]/a")).click();
// Click on Percent Calculators
driver.findElement(By.xpath(".//*[@id = 'menu']/div[4]/div[3]/a")).click();
// Enter value 10 in the first number of the percent Calculator
driver.findElement(By.id("cpar1")).sendKeys("10");
// Enter value 50 in the second number of the percent Calculator
driver.findElement(By.id("cpar2")).sendKeys("50");
// Click Calculate Button
// driver.findElement(By.xpath(".//*[@id = 'content']/table/tbody/tr/td[2]/input")).click();
// Get the Result Text based on its xpath
String result =
driver.findElement(By.xpath(".//*[@id = 'content']/p[2]/span/font/b")).getText();
// Print a Log In message to the screen
System.out.println(" The Result is " + result);
if(result.equals("5")) {
System.out.println(" The Result is Pass");
} else {
System.out.println(" The Result is Fail");
}
}
@AfterTest
public void closeBrowser() {
driver.quit();
}
}
Step 2- พารามิเตอร์เบราว์เซอร์จะถูกส่งผ่านโดยใช้ XML สร้าง XML ภายใต้โฟลเดอร์โครงการ
Step 3 - เลือก 'ไฟล์' จาก 'ทั่วไป' และคลิก 'ถัดไป'
Step 4 - ป้อนชื่อไฟล์และคลิก 'เสร็จสิ้น'
Step 5 - TestNg.XML ถูกสร้างขึ้นภายใต้โฟลเดอร์โครงการดังที่แสดงด้านล่าง
Step 6- เนื้อหาของไฟล์ XML แสดงอยู่ด้านล่าง เราสร้างการทดสอบ 3 รายการและวางไว้ในชุดและพูดถึง parallel = "การทดสอบ" เพื่อให้การทดสอบทั้งหมดดำเนินการควบคู่กันไป
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name = "Suite" parallel = "tests">
<test name = "FirefoxTest">
<parameter name = "browser" value = "firefox" />
<classes>
<class name = "TestNG.TestNGClass" />
</classes>
</test>
<test name = "ChromeTest">
<parameter name = "browser" value = "chrome" />
<classes>
<class name = "TestNG.TestNGClass" />
</classes>
</test>
<test name = "IETest">
<parameter name = "browser" value = "ie" />
<classes>
<class name = "TestNG.TestNGClass" />
</classes>
</test>
</suite>
ทดสอบการดำเนินการ
Step 1- เลือก XML ที่สร้างขึ้น คลิกขวาและเลือก 'Run As' >> 'TestNG Suite'
Step 2- ตอนนี้เปิดโหนดซึ่งเราได้เปิดใช้โหนดเบราว์เซอร์ทั้งหมด คุณจะเห็นเบราว์เซอร์ทั้งสามทำงานพร้อมกัน
การวิเคราะห์ผลลัพธ์
Step 1- เมื่อเสร็จสิ้นการดำเนินการเราสามารถวิเคราะห์ผลลัพธ์เหมือนกับการดำเนินการอื่น ๆ สรุปผลลัพธ์จะพิมพ์ในคอนโซลตามที่แสดงในสแนปชอตต่อไปนี้
Step 2 - ไปที่แท็บ 'Results of Running Suite' และ TestNG จะแสดงผลสรุปดังที่แสดงด้านล่าง
Step 3 - เมื่อสร้าง HTML เราจะสามารถเห็นผลการทดสอบในรูปแบบ HTML