• Junit4 如何实现并发测试用例,及 Selenium Grid2 与 Junit4 结合进行并发测试。


    这里用一个 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);     
           
           }
    }

    That's all.

  • 相关阅读:
    window端口被占用
    webstorm中关闭烦人Eslint语法检查
    STM32 printf 函数原型
    Memset、Memcpy、Strcpy 的作用和区别(转)
    SMD贴片元件的封装尺寸(转)
    Windows Phone开发工具初体验(转载)
    Open Cell(转载)
    标题:常用贴片元件封装(转载)
    关于TV Dongle的功能设计和思考【图】(转载)
    图片预览加上传遇到的一系列问题
  • 原文地址:https://www.cnblogs.com/backpacker/p/2797362.html
Copyright © 2020-2023  润新知