การดำเนินการแบบขนานใน Selenium: การจัดการเซสชัน & TestNG การอยู่ที่
เพื่อให้เข้าใจถึงวิธีการรันสคริปต์แบบขนาน เรามาทำความเข้าใจกันก่อน
เหตุใดเราจึงต้องมีการจัดการเซสชัน?
ในระหว่างการทดสอบการดำเนินการ Selenium WebDriver ต้องโต้ตอบกับเบราว์เซอร์ตลอดเวลาเพื่อดำเนินการคำสั่งที่กำหนด ในขณะที่ดำเนินการ อาจเป็นไปได้ว่าก่อนที่การดำเนินการปัจจุบันจะเสร็จสิ้น บุคคลอื่นเริ่มดำเนินการสคริปต์อื่นในเครื่องเดียวกันและในเบราว์เซอร์ประเภทเดียวกัน
ในสถานการณ์เช่นนี้ เราจำเป็นต้องมีกลไกที่การดำเนินการทั้งสองที่แตกต่างกันของเราไม่ควรทับซ้อนกัน ซึ่งสามารถทำได้โดยใช้การจัดการเซสชันใน Selenium.
วิธีบรรลุการจัดการเซสชันใน Selenium เว็บไดร์เวอร์?
หากคุณตรวจสอบซอร์สโค้ดของ Selenium WebDriver คุณจะพบตัวแปรชื่อ 'sessionId' เมื่อใดก็ตามที่เราสร้างอินสแตนซ์ใหม่ของวัตถุ WebDriver 'sessionId' ใหม่จะถูกสร้างขึ้นและแนบไปกับสิ่งนั้น Firefox/Chrome/ไดรเวอร์ IE ()
ดังนั้นสิ่งที่เราทำหลังจากนี้จะดำเนินการเฉพาะในเรื่องนั้นเท่านั้น Firefox เซสชันเบราว์เซอร์
เนื่องจากนี่เป็นฟังก์ชันที่สร้างขึ้นเอง จึงไม่จำเป็นต้องกำหนดรหัสเซสชันอย่างชัดเจน
ตัวอย่างรหัส: ที่นี่จะมีการสร้างเซสชันที่แตกต่างกันสองเซสชันสำหรับ 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(); //Goto guru99 site driver.get("http://demo.guru99.com/V4/"); //Second session of WebDriver WebDriver driver2 = new FirefoxDriver(); //Goto guru99 site driver2.get("http://demo.guru99.com/V4/"); } }
วิธีรัน Parallel Tests ด้วย Selenium
มีสถานการณ์ที่คุณต้องการรันการทดสอบหลายรายการพร้อมกัน
ในกรณีเช่นนี้ เราสามารถใช้แอตทริบิวต์ "ขนาน" ได้
แอตทริบิวต์แบบขนานของแท็กชุดสามารถรับค่าได้สี่ค่า:
การทดสอบ | กรณีทดสอบทั้งหมดภายใน แท็กของ การทดสอบ ไฟล์ xml จะทำงานแบบขนาน |
ชั้นเรียน | กรณีทดสอบทั้งหมดภายใน Java คลาสจะทำงานแบบขนาน |
วิธีการ | วิธีการทั้งหมดที่มีคำอธิบายประกอบ @Test จะดำเนินการแบบขนาน |
อินสแตนซ์ | กรณีทดสอบในอินสแตนซ์เดียวกันจะดำเนินการแบบขนาน แต่สองวิธีจากสองอินสแตนซ์ที่แตกต่างกันจะทำงานในเธรดที่ต่างกัน |
จำนวนเธรดของแอ็ตทริบิวต์ช่วยให้คุณสามารถระบุจำนวนเธรดที่ควรจัดสรรสำหรับการดำเนินการนี้
ตัวอย่างที่สมบูรณ์: ในตัวอย่างนี้ กรณีทดสอบสามกรณีจะทำงานแบบขนานและกรอกข้อมูลการเข้าสู่ระบบ http://demo.guru99.com/
โครงการที่สมบูรณ์จะมีลักษณะดังนี้:
TestGuru99MultipleSession.java
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.Test; public class TestGuru99MultipleSession { @Test public void executSessionOne(){ //First session of WebDriver System.setProperty("webdriver.chrome.driver","chromedriver.exe"); WebDriver driver = new ChromeDriver(); //Goto guru99 site driver.get("http://demo.guru99.com/V4/"); //find 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(); //Goto guru99 site driver.get("http://demo.guru99.com/V4/"); //find user name text box and fill it driver.findElement(By.name("uid")).sendKeys("Driver 2"); } @Test public void executSessionThree(){ //Third session of WebDriver System.setProperty("webdriver.chrome.driver","chromedriver.exe"); WebDriver driver = new ChromeDriver(); //Goto guru99 site driver.get("http://demo.guru99.com/V4/"); //find user name text box and fill it 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"> </class> </classes> </test> </suite>
ลำดับกรณีทดสอบและการพึ่งพา
คุณสามารถกำหนดลำดับและการพึ่งพาของ กรณีทดสอบ การดำเนินการ
สมมติว่าคุณมีกรณีทดสอบสองกรณี 'testGuru99TC1' และ 'testGuru99TC2' และคุณต้องการดำเนินการกรณีทดสอบ 'testGuru99TC2' ก่อน 'testGuru99TC1' ในกรณีนั้น เราจะใช้แอตทริบิวต์ 'dependsOnMethods' เพื่อทำการพึ่งพาและลำดับของการดำเนินการ
<?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 value="testGuru99TC1" dependsOnMethods=" testGuru99TC2"/> <include value="testGuru99TC2"/> </class> </classes> </test> </suite>
สรุป
- sessionID ใหม่ถูกสร้างขึ้นสำหรับอินสแตนซ์ใหม่ของ WebDriver
- หนึ่งเซสชันจะเชื่อมโยงกับเบราว์เซอร์ใดเบราว์เซอร์หนึ่งโดยเฉพาะ
- การใช้เธรดแอตทริบิวต์และแบบขนาน คุณเรียกใช้สคริปต์ของคุณแบบขนาน
- คุณสามารถใช้การพึ่งพาแอตทริบิวต์เพื่อกำหนดลำดับในการทดสอบการดำเนินการได้