การดำเนินการแบบขนานใน Selenium
⚡ สรุปอย่างชาญฉลาด
เซสชัน การทำงานแบบขนาน และการพึ่งพาใน Selenium รวม sessionId ที่ไม่ซ้ำกันสำหรับแต่ละอินสแตนซ์ของ WebDriver เข้ากับ TestNG การควบคุมชุดโปรแกรม ช่วยให้หน้าต่างเบราว์เซอร์หลายหน้าต่างสามารถเรียกใช้สคริปต์อิสระหรือตามลำดับพร้อมกัน และช่วยให้กระบวนการทดสอบการถดถอยเสร็จสิ้นเร็วขึ้น

เพื่อให้เข้าใจวิธีการรันสคริปต์แบบขนาน คุณต้องรู้ก่อนว่าทำอย่างไร Selenium แยกแต่ละเบราว์เซอร์ออกจากกันผ่านเซสชัน
เหตุใดเราจึงต้องมีการจัดการเซสชัน?
ในระหว่างการทดสอบการดำเนินการ Selenium WebDriver ต้องโต้ตอบกับเบราว์เซอร์ในทุกขั้นตอนเพื่อดำเนินการคำสั่งที่กำหนด ในขณะที่การทดสอบนั้นกำลังทำงานอยู่ ผู้ใช้รายอื่นอาจเรียกใช้สคริปต์ที่สองบนเครื่องเดียวกันและเบราว์เซอร์ประเภทเดียวกันก็ได้
ในสถานการณ์เช่นนี้ เราจำเป็นต้องมีกลไกเพื่อป้องกันไม่ให้การดำเนินการทั้งสองทับซ้อนกัน Selenium แก้ไขปัญหานี้ด้วยการจัดการเซสชัน
วิธีบรรลุการจัดการเซสชันใน Selenium เว็บไดร์เวอร์?
หากคุณตรวจสอบ Selenium ในซอร์สโค้ดของ WebDriver คุณจะพบตัวแปรที่ชื่อว่า sessionIdทุกครั้งที่คุณสร้างอินสแตนซ์ WebDriver ใหม่ ระบบจะสร้างอินสแตนซ์ใหม่ขึ้นมา sessionId ถูกสร้างขึ้นและแนบไปกับสิ่งนั้น Firefoxไดรเวอร์ Chrome หรือ IE
คำสั่งต่อๆ ไปทั้งหมดจะทำงานเฉพาะภายในเซสชันเบราว์เซอร์นั้นๆ เท่านั้น
เนื่องจากฟังก์ชันนี้มีอยู่ใน WebDriver อยู่แล้ว จึงไม่จำเป็นต้องกำหนด sessionId ด้วยตนเอง
Code ตัวอย่าง: มีการสร้างเซสชันที่แตกต่างกันสองเซสชันสำหรับอินสแตนซ์ WebDriver สองตัว
import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class SessionHandling { public static void main(String... strings) { // First session of WebDriver WebDriver driver = new FirefoxDriver(); // Go to guru99 demo site driver.get("https://demo.guru99.com/V4/"); // Second session of WebDriver WebDriver driver2 = new FirefoxDriver(); // Go to guru99 demo site driver2.get("https://demo.guru99.com/V4/"); } }
วิธีรัน Parallel Tests ด้วย Selenium
ในบางสถานการณ์ คุณอาจต้องการทำการทดสอบหลายอย่างพร้อมกัน เช่น การตรวจสอบข้ามเบราว์เซอร์ หรือห้องสูบบุหรี่ขนาดใหญ่
ในกรณีเช่นนี้ parallel คุณสมบัติบน TestNG แท็กห้องชุดจะช่วยจัดการเรื่องนี้เอง
คุณลักษณะ parallel ของแท็ก suite ยอมรับค่าได้สี่ค่า:
| ค่าคุณสมบัติ | ความหมาย |
|---|---|
| การทดสอบ | ทั้งหมด กรณีทดสอบ ภายใน แท็กของ การทดสอบ ไฟล์ XML จะถูกประมวลผลแบบขนาน |
| ชั้นเรียน | กรณีทดสอบทั้งหมดภายใน Java คลาสเรียนทำงานแบบขนาน |
| วิธีการ | เมธอดทั้งหมดที่มีคำอธิบายประกอบ @Test จะทำงานแบบขนาน |
| อินสแตนซ์ | การทดสอบในอินสแตนซ์เดียวกันจะทำงานแบบขนาน ในขณะที่สองเมธอดของสองอินสแตนซ์ที่แตกต่างกันจะทำงานในเธรดที่ต่างกัน |
การขอ thread-count คุณสมบัตินี้จะกำหนดจำนวนเธรดที่จัดสรรให้กับการดำเนินการนั้น จับคู่กับ TestNG กรอบ และ ติดตั้ง TestNG in Eclipse ก่อนเริ่มใช้งาน สำหรับการใช้งานในเครื่องมากกว่าหนึ่งเครื่อง ให้กำหนดเส้นทางชุดคำสั่งเดียวกันผ่านทาง Selenium ตาราง 4 สำหรับการประมวลผลแบบขนานแบบกระจาย
ตัวอย่างที่สมบูรณ์: รันเคสทดสอบสามเคสพร้อมกันและกรอกข้อมูลการเข้าสู่ระบบ https://demo.guru99.com/.
โครงการทั้งหมดมีลักษณะดังนี้:
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.Test; public class TestGuru99MultipleSession { @Test public void executeSessionOne() { // First session of WebDriver System.setProperty("webdriver.chrome.driver", "chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/V4/"); // Find the user name text box and fill it driver.findElement(By.name("uid")).sendKeys("Driver 1"); } @Test public void executeSessionTwo() { // Second session of WebDriver System.setProperty("webdriver.chrome.driver", "chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/V4/"); driver.findElement(By.name("uid")).sendKeys("Driver 2"); } @Test public void executeSessionThree() { // Third session of WebDriver System.setProperty("webdriver.chrome.driver", "chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/V4/"); driver.findElement(By.name("uid")).sendKeys("Driver 3"); } }
TestNG.XML
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="TestSuite" thread-count="3" parallel="methods"> <test name="testGuru"> <classes> <class name="TestGuru99MultipleSession"/> </classes> </test> </suite>
ลำดับกรณีทดสอบและการพึ่งพา
คุณสามารถกำหนดลำดับและความสัมพันธ์ของสิ่งต่างๆ ได้ กรณีทดสอบ การดำเนินการ สมมติว่าคุณมีกรณีทดสอบสองกรณี testGuru99TC1 และ testGuru99TC2และคุณต้องการ testGuru99TC2 วิ่งก่อน testGuru99TC1. ใช้ dependsOnMethods คุณลักษณะ (หรือ dependsOnGroups (สำหรับการเชื่อมโยงระดับกลุ่ม) เพื่อแก้ไขลำดับนั้น สำหรับการเชื่อมโยงที่กว้างขึ้น กรอบการทำงานอัตโนมัติ ออกแบบ เปรียบเทียบ JUnit vs TestNGและทบทวน ค้นหาองค์ประกอบ อ้างอิงหากการทดสอบที่เกี่ยวข้องของคุณใช้ตัวระบุตำแหน่งร่วมกัน
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="TestSuite" thread-count="3" parallel="methods"> <test name="testGuru"> <classes> <class name="TestGuru99MultipleSession"> <include name="testGuru99TC1" dependsOnMethods="testGuru99TC2"/> <include name="testGuru99TC2"/> </class> </classes> </test> </suite>
การขอ TestNG รันไทม์ โฮสต์อยู่ที่ testng.orgโดยจะประเมินการประกาศเหล่านี้ก่อนที่จะเริ่มเธรด ดังนั้นเมธอดที่ขึ้นกับเมธอดอื่นจะเริ่มต้นหลังจากที่เมธอดที่จำเป็นเสร็จสิ้นแล้วเสมอ





