selenium 怎么打开junit测试用例
1个回答
展开全部
这里用一个 sample 展现如何用 Junit 并发测试。
第一个文件:TestBingFa.java
package com.xbosoft.junit4;
import org.junit.Test;
public class TestBingFa {
@Test
public void testMethod() {
System.out.println("test success!");
}
}
第二个文件:
package com.example.tests;
import org.junit.runner.JUnitCore;
import org.junit.runner.Request;
public class PerformTestBingFa {
public static void main(String[] args) {
new Thread() {
public void run() {
// JUnitCore.runClasses(new Class[] { TestExample.class }); //这个是说要直接运行某一整个 class 中的所有方法。
new JUnitCore().run(Request.method(TestBingFa.class,"testMethod")); //这个是指定 run 那个 class 中的哪个方法
} }.start(); new Thread() { public void run() { // JUnitCore.runClasses(new Class[] { TestExample.class }); //这个是说要直接运行某一整个 class 中的所有方法。 new JUnitCore().run(Request.method(TestBingFa.class,"testMethod")); //这个是指定 run 那个 class 中的哪个方法 } }.start(); // for (int i = 0; i< 10; i++) // { // new Thread() { // public void run() { // // JUnitCore.runClasses(new Class[] { TestExample.class }); //(1) // new JUnitCore().run(Request.method(TestGrid2.class,"testBenbriaSele01")); //(2) // } // }.start(); // } } }
这样就可以了。
于是我们就可以想到,用 Selenium Grid2 进行测试的使用,是不是也可以用这种发法进行?答案淡然是肯定的。
我们假设有两台机器。
机器一是 gird hub
机器二是 grid console
他们都安装了相同版本的 Firefox。都是 Windows
根据 Grid2 的特性,如果两个Windows 系统有同样 Firfox,如果都注册到了 hub 上,如果run 两遍同样的脚本,他会默认第一次在一个机器上跑,第二次再另外一个机器上跑。
我们就用这个场景看一下下面是怎样同时开两个线程,然后让一个脚本同时在两个机器的 Firefox 21 上跑的。
文件1: TestGrid.java
它是一个 Selenium WebDriver 脚本。 用 Grid 实现了可以再 RemoteWebDriver 上跑。
过程就是反复4次登陆一个站点 - 输入用户>密码>点击Submit 来登录> 点击 logout 退出。 重复4次。 为了看得清楚,还加了sleep时间。
package com.example.tests;
import java.io.File;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.Select;
public class TestGrid {
private WebDriver driver;
private String baseUrl;
@Before
public void setUp() throws Exception {
//Use Firefox
DesiredCapabilities capability = DesiredCapabilities.firefox();
driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capability);
baseUrl = "http://10.1.3.12/";
// driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
Capabilities actualCapabilities = ((RemoteWebDriver)driver).getCapabilities();
System.out.println(actualCapabilities);
}
@Test
public void testBenbriaSele01() throws Exception {
int sleepTime = 3000;
System.out.println("before driver get()");
driver.get(baseUrl);
System.out.println("After driver get()");
//First time
driver.findElement(By.id("username")).sendKeys("admin");
Thread.sleep(sleepTime);
driver.findElement(By.id("password")).sendKeys("admin");
Thread.sleep(sleepTime);
driver.findElement(By.id("login_submit")).click();
Thread.sleep(sleepTime);
driver.findElement(By.id("logout")).click();
//Second Time
Thread.sleep(sleepTime);
driver.findElement(By.id("username")).sendKeys("admin");
Thread.sleep(sleepTime);
driver.findElement(By.id("password")).sendKeys("admin");
Thread.sleep(sleepTime);
driver.findElement(By.id("login_submit")).click();
Thread.sleep(sleepTime);
driver.findElement(By.id("logout")).click();
//Third Time
Thread.sleep(sleepTime);
driver.findElement(By.id("username")).sendKeys("admin");
Thread.sleep(sleepTime);
driver.findElement(By.id("password")).sendKeys("admin");
Thread.sleep(sleepTime);
driver.findElement(By.id("login_submit")).click();
Thread.sleep(sleepTime);
driver.findElement(By.id("logout")).click();
Thread.sleep(sleepTime);
//Forth Time
Thread.sleep(sleepTime);
driver.findElement(By.id("username")).sendKeys("admin");
Thread.sleep(sleepTime);
driver.findElement(By.id("password")).sendKeys("admin");
Thread.sleep(sleepTime);
driver.findElement(By.id("login_submit")).click();
Thread.sleep(sleepTime);
driver.findElement(By.id("logout")).click();
Thread.sleep(sleepTime);
}
// @After
// public void tearDown() throws Exception {
// driver.quit();
// String verificationErrorString = verificationErrors.toString();
// if (!"".equals(verificationErrorString)) {
// fail(verificationErrorString);
// }
// System.out.println("tearDown!");
// }
}
第二个文件: 就是创建了两个线程,然后调用 TestGrid 中的 testBenbriaSele01 方法,并同时在两个浏览器中执行。
package com.example.tests;
import org.junit.runner.JUnitCore;
import org.junit.runner.Request;
public class PerformTestBingFa {
public static void main(String[] args) {
new Thread() {
public void run() {
// JUnitCore.runClasses(new Class[] { TestExample.class }); //(1)
new JUnitCore().run(Request.method(TestGrid.class,"testBenbriaSele01")); //(2)
}
}.start();
new Thread() {
public void run() {
// JUnitCore.runClasses(new Class[] { TestExample.class }); //(1)
new JUnitCore().run(Request.method(TestGrid.class,"testBenbriaSele01")); //(2)
}
}.start();
// for (int i = 0; i< 10; i++)
// {
// new Thread() {
// public void run() {
// // JUnitCore.runClasses(new Class[] { TestExample.class }); //(1)
// new JUnitCore().run(Request.method(TestGrid2.class,"testBenbriaSele01")); //(2)
// }
// }.start();
// }
}
}
在 Junit 4 中,当然也提供了最新的处于试验阶段的并发方法。如下:
package com.xbosoft.blackline;
import org.junit.Test;
import org.junit.experimental.ParallelComputer;
import org.junit.runner.JUnitCore;
import org.junit.runner.Request;
public class PerformTestBingFa2 {
@Test
public void test() {
Class[] cls={TestAll.class,TestGrid2.class };
//Parallel among classes
JUnitCore.runClasses(ParallelComputer.classes(), cls);
// //Parallel among methods in a class
// JUnitCore.runClasses(ParallelComputer.methods(), cls);
// //Parallel all methods in all classes
// JUnitCore.runClasses(new ParallelComputer(true, true), cls);
}
}
第一个文件:TestBingFa.java
package com.xbosoft.junit4;
import org.junit.Test;
public class TestBingFa {
@Test
public void testMethod() {
System.out.println("test success!");
}
}
第二个文件:
package com.example.tests;
import org.junit.runner.JUnitCore;
import org.junit.runner.Request;
public class PerformTestBingFa {
public static void main(String[] args) {
new Thread() {
public void run() {
// JUnitCore.runClasses(new Class[] { TestExample.class }); //这个是说要直接运行某一整个 class 中的所有方法。
new JUnitCore().run(Request.method(TestBingFa.class,"testMethod")); //这个是指定 run 那个 class 中的哪个方法
} }.start(); new Thread() { public void run() { // JUnitCore.runClasses(new Class[] { TestExample.class }); //这个是说要直接运行某一整个 class 中的所有方法。 new JUnitCore().run(Request.method(TestBingFa.class,"testMethod")); //这个是指定 run 那个 class 中的哪个方法 } }.start(); // for (int i = 0; i< 10; i++) // { // new Thread() { // public void run() { // // JUnitCore.runClasses(new Class[] { TestExample.class }); //(1) // new JUnitCore().run(Request.method(TestGrid2.class,"testBenbriaSele01")); //(2) // } // }.start(); // } } }
这样就可以了。
于是我们就可以想到,用 Selenium Grid2 进行测试的使用,是不是也可以用这种发法进行?答案淡然是肯定的。
我们假设有两台机器。
机器一是 gird hub
机器二是 grid console
他们都安装了相同版本的 Firefox。都是 Windows
根据 Grid2 的特性,如果两个Windows 系统有同样 Firfox,如果都注册到了 hub 上,如果run 两遍同样的脚本,他会默认第一次在一个机器上跑,第二次再另外一个机器上跑。
我们就用这个场景看一下下面是怎样同时开两个线程,然后让一个脚本同时在两个机器的 Firefox 21 上跑的。
文件1: TestGrid.java
它是一个 Selenium WebDriver 脚本。 用 Grid 实现了可以再 RemoteWebDriver 上跑。
过程就是反复4次登陆一个站点 - 输入用户>密码>点击Submit 来登录> 点击 logout 退出。 重复4次。 为了看得清楚,还加了sleep时间。
package com.example.tests;
import java.io.File;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.Select;
public class TestGrid {
private WebDriver driver;
private String baseUrl;
@Before
public void setUp() throws Exception {
//Use Firefox
DesiredCapabilities capability = DesiredCapabilities.firefox();
driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capability);
baseUrl = "http://10.1.3.12/";
// driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
Capabilities actualCapabilities = ((RemoteWebDriver)driver).getCapabilities();
System.out.println(actualCapabilities);
}
@Test
public void testBenbriaSele01() throws Exception {
int sleepTime = 3000;
System.out.println("before driver get()");
driver.get(baseUrl);
System.out.println("After driver get()");
//First time
driver.findElement(By.id("username")).sendKeys("admin");
Thread.sleep(sleepTime);
driver.findElement(By.id("password")).sendKeys("admin");
Thread.sleep(sleepTime);
driver.findElement(By.id("login_submit")).click();
Thread.sleep(sleepTime);
driver.findElement(By.id("logout")).click();
//Second Time
Thread.sleep(sleepTime);
driver.findElement(By.id("username")).sendKeys("admin");
Thread.sleep(sleepTime);
driver.findElement(By.id("password")).sendKeys("admin");
Thread.sleep(sleepTime);
driver.findElement(By.id("login_submit")).click();
Thread.sleep(sleepTime);
driver.findElement(By.id("logout")).click();
//Third Time
Thread.sleep(sleepTime);
driver.findElement(By.id("username")).sendKeys("admin");
Thread.sleep(sleepTime);
driver.findElement(By.id("password")).sendKeys("admin");
Thread.sleep(sleepTime);
driver.findElement(By.id("login_submit")).click();
Thread.sleep(sleepTime);
driver.findElement(By.id("logout")).click();
Thread.sleep(sleepTime);
//Forth Time
Thread.sleep(sleepTime);
driver.findElement(By.id("username")).sendKeys("admin");
Thread.sleep(sleepTime);
driver.findElement(By.id("password")).sendKeys("admin");
Thread.sleep(sleepTime);
driver.findElement(By.id("login_submit")).click();
Thread.sleep(sleepTime);
driver.findElement(By.id("logout")).click();
Thread.sleep(sleepTime);
}
// @After
// public void tearDown() throws Exception {
// driver.quit();
// String verificationErrorString = verificationErrors.toString();
// if (!"".equals(verificationErrorString)) {
// fail(verificationErrorString);
// }
// System.out.println("tearDown!");
// }
}
第二个文件: 就是创建了两个线程,然后调用 TestGrid 中的 testBenbriaSele01 方法,并同时在两个浏览器中执行。
package com.example.tests;
import org.junit.runner.JUnitCore;
import org.junit.runner.Request;
public class PerformTestBingFa {
public static void main(String[] args) {
new Thread() {
public void run() {
// JUnitCore.runClasses(new Class[] { TestExample.class }); //(1)
new JUnitCore().run(Request.method(TestGrid.class,"testBenbriaSele01")); //(2)
}
}.start();
new Thread() {
public void run() {
// JUnitCore.runClasses(new Class[] { TestExample.class }); //(1)
new JUnitCore().run(Request.method(TestGrid.class,"testBenbriaSele01")); //(2)
}
}.start();
// for (int i = 0; i< 10; i++)
// {
// new Thread() {
// public void run() {
// // JUnitCore.runClasses(new Class[] { TestExample.class }); //(1)
// new JUnitCore().run(Request.method(TestGrid2.class,"testBenbriaSele01")); //(2)
// }
// }.start();
// }
}
}
在 Junit 4 中,当然也提供了最新的处于试验阶段的并发方法。如下:
package com.xbosoft.blackline;
import org.junit.Test;
import org.junit.experimental.ParallelComputer;
import org.junit.runner.JUnitCore;
import org.junit.runner.Request;
public class PerformTestBingFa2 {
@Test
public void test() {
Class[] cls={TestAll.class,TestGrid2.class };
//Parallel among classes
JUnitCore.runClasses(ParallelComputer.classes(), cls);
// //Parallel among methods in a class
// JUnitCore.runClasses(ParallelComputer.methods(), cls);
// //Parallel all methods in all classes
// JUnitCore.runClasses(new ParallelComputer(true, true), cls);
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询