การดำเนินการแบบขนานใน Selenium: การจัดการเซสชัน & TestNG การอยู่ที่

เพื่อให้เข้าใจถึงวิธีการรันสคริปต์แบบขนาน เรามาทำความเข้าใจกันก่อน

เหตุใดเราจึงต้องมีการจัดการเซสชัน?

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

การจัดการเซสชัน

ในสถานการณ์เช่นนี้ เราจำเป็นต้องมีกลไกที่การดำเนินการทั้งสองที่แตกต่างกันของเราไม่ควรทับซ้อนกัน ซึ่งสามารถทำได้โดยใช้การจัดการเซสชันใน Selenium.

วิธีบรรลุการจัดการเซสชันใน Selenium เว็บไดร์เวอร์?

หากคุณตรวจสอบซอร์สโค้ดของ Selenium WebDriver คุณจะพบตัวแปรชื่อ 'sessionId' เมื่อใดก็ตามที่เราสร้างอินสแตนซ์ใหม่ของวัตถุ WebDriver 'sessionId' ใหม่จะถูกสร้างขึ้นและแนบไปกับสิ่งนั้น Firefox/Chrome/ไดรเวอร์ IE ()

บรรลุการจัดการเซสชันใน Selenium ไดรเวอร์เว็บ

ดังนั้นสิ่งที่เราทำหลังจากนี้จะดำเนินการเฉพาะในเรื่องนั้นเท่านั้น Firefox เซสชันเบราว์เซอร์

บรรลุการจัดการเซสชันใน Selenium ไดรเวอร์เว็บ

เนื่องจากนี่เป็นฟังก์ชันที่สร้างขึ้นเอง จึงไม่จำเป็นต้องกำหนดรหัสเซสชันอย่างชัดเจน

ตัวอย่างรหัส: ที่นี่จะมีการสร้างเซสชันที่แตกต่างกันสองเซสชันสำหรับ 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

มีสถานการณ์ที่คุณต้องการรันการทดสอบหลายรายการพร้อมกัน

ในกรณีเช่นนี้ เราสามารถใช้แอตทริบิวต์ "ขนาน" ได้

รันการทดสอบแบบขนานด้วย Selenium

แอตทริบิวต์แบบขนานของแท็กชุดสามารถรับค่าได้สี่ค่า:

การทดสอบ กรณีทดสอบทั้งหมดภายใน แท็กของ การทดสอบ ไฟล์ xml จะทำงานแบบขนาน
ชั้นเรียน กรณีทดสอบทั้งหมดภายใน Java คลาสจะทำงานแบบขนาน
วิธีการ วิธีการทั้งหมดที่มีคำอธิบายประกอบ @Test จะดำเนินการแบบขนาน
อินสแตนซ์ กรณีทดสอบในอินสแตนซ์เดียวกันจะดำเนินการแบบขนาน แต่สองวิธีจากสองอินสแตนซ์ที่แตกต่างกันจะทำงานในเธรดที่ต่างกัน

จำนวนเธรดของแอ็ตทริบิวต์ช่วยให้คุณสามารถระบุจำนวนเธรดที่ควรจัดสรรสำหรับการดำเนินการนี้

ตัวอย่างที่สมบูรณ์: ในตัวอย่างนี้ กรณีทดสอบสามกรณีจะทำงานแบบขนานและกรอกข้อมูลการเข้าสู่ระบบ http://demo.guru99.com/

โครงการที่สมบูรณ์จะมีลักษณะดังนี้:

รันการทดสอบแบบขนานด้วย Selenium

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
  • หนึ่งเซสชันจะเชื่อมโยงกับเบราว์เซอร์ใดเบราว์เซอร์หนึ่งโดยเฉพาะ
  • การใช้เธรดแอตทริบิวต์และแบบขนาน คุณเรียกใช้สคริปต์ของคุณแบบขนาน
  • คุณสามารถใช้การพึ่งพาแอตทริบิวต์เพื่อกำหนดลำดับในการทดสอบการดำเนินการได้