Chinaunix首页 | 论坛 | 博客
  • 博客访问: 57519
  • 博文数量: 12
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 130
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-24 10:58
文章分类

全部博文(12)

文章存档

2014年(12)

我的朋友

分类: Web开发

2014-03-26 09:27:56

这里用一个 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(""), capability);
        
        
        baseUrl = ""; // 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);   }
}
阅读(1456) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~