并行执行 Selenium
要了解如何并行运行脚本,我们首先要了解
为什么我们需要会话处理?
在测试执行期间, Selenium WebDriver 必须始终与浏览器交互才能执行给定的命令。在执行时,也有可能在当前执行完成之前,其他人在同一台机器和同一类型的浏览器中开始执行另一个脚本。
在这种情况下,我们需要一种机制,使两个不同的执行不会相互重叠。这可以使用会话处理来实现 Selenium.
如何实现会话处理 Selenium WebDriver?
如果你检查源代码 Selenium WebDriver,你会发现一个名为“sessionId”的变量。每当我们创建一个 WebDriver 对象的新实例时,就会生成一个新的“sessionId”,并将其附加到该特定实例上。 Firefox/Chrome/IE 驱动程序()。
因此我们在此之后所做的任何事情都只会在特定的时间执行 Firefox 浏览器会话。
由于这是内置功能,因此无需明确分配会话 ID
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();
//Goto guru99 site
driver.get("https://demo.guru99.com/V4/");
//Second session of WebDriver
WebDriver driver2 = new FirefoxDriver();
//Goto guru99 site
driver2.get("https://demo.guru99.com/V4/");
}
}
如何运行并行测试 Selenium
在某些情况下,您想要同时运行多个测试。
在这种情况下,可以使用“parallel”属性
suite标签的parallel属性可以接受四个值:
| 测试 | 里面的所有测试用例标签 测试与验证 xml 文件将并行运行。 |
| 类 | 所有测试用例 Java 课程将同时进行 |
| 方法 | 所有带有@Test注释的方法将并行执行。 |
| 实例 | 同一实例中的测试用例将并行执行,但两个不同实例的两种方法将在不同的线程中运行。 |
属性线程数允许您指定应为此次执行分配多少个线程。
完整示例:在此示例中,三个测试用例将并行运行并填写登录数据 https://demo.guru99.com/
完整的项目将如下所示:
《测试》(Test)Guru99MultipleSession.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("https://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("https://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("https://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>
测试用例顺序和依赖关系
您可以设置顺序和依赖性 测试用例 执行。
假设你有两个测试用例,'test'Guru99TC1' 和 '测试Guru99TC2',并且你想执行测试用例'test'Guru在“测试”之前有“99TC2”Guru99TC1'。在这种情况下,我们将使用“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>
结语
- 为 WebDriver 的新实例创建一个新的 sessionID。
- 一个会话将与一个特定的浏览器绑定。
- 使用属性线程和并行,您可以并行运行脚本。
- 您可以使用属性依赖关系来设置测试执行的顺序





