2015-11-02 107 views
0

现在:我有测试项目。使用maven-failuresave-plugin我运行jetty,然后在那里部署war并执行测试脚本。 TODO:我需要在5个Web驱动程序中同时运行一个方法。 或在5个司机同时执行相同的测试课程。 这就像使用Selenium进行性能测试(不好的选择,但它的要求)。在多个驱动程序中执行硒和JUnit并行测试方法

+1

检查[这个答案](http://stackoverflow.com/a/31544625/1660507),它可能会帮助你。 – makeMonday

回答

1

这就是我的ParrallelParametrized类。

public class ParallelParametrized extends Parameterized { 
    private static class ThreadPoolScheduler implements RunnerScheduler { 

     private ExecutorService executor; 

     public ThreadPoolScheduler() { 
      String threads = System.getProperty("web.driver.amount"); 
      int numThreads = Integer.parseInt(threads); 
      executor = Executors.newFixedThreadPool(numThreads); 
     } 

     @Override 
     public void finished() { 
      executor.shutdown(); 
      try { 
       executor.awaitTermination(Long.MAX_VALUE, TimeUnit.MINUTES); 
      } catch (InterruptedException exc) { 
       throw new RuntimeException(exc); 
      } 
     } 

     @Override 
     public void schedule(Runnable childStatement) { 
      executor.submit(childStatement); 
     } 
    } 

    public ParallelParametrized(Class klass) throws Throwable { 
     super(klass); 
     setScheduler(new ThreadPoolScheduler()); 
    } 

    public void filter(Filter filter) throws NoTestsRemainException { 
     super.filter(new FilterDecorator(filter)); 
    } 

    private static class FilterDecorator extends Filter { 
     private final Filter delegate; 

     private FilterDecorator(Filter delegate) { 
      this.delegate = delegate; 
     } 

     @Override 
     public boolean shouldRun(Description description) { 
      return delegate.shouldRun(wrap(description)); 
     } 

     @Override 
     public String describe() { 
      return delegate.describe(); 
     } 
    } 

    private static Description wrap(Description description) { 
     String name = description.getDisplayName(); 
     String fixedName = deparametrizedName(name); 
     Description clonedDescription = 
       Description.createSuiteDescription(fixedName,description.getAnnotations().toArray(new Annotation[0])); 
     for(Description child : description.getChildren()){ 
      clonedDescription.addChild(wrap(child)); 
     } 
     return clonedDescription; 
    } 

    private static String deparametrizedName(String name) { 
     if(name.startsWith("[")){ 
      return name; 
     } 
     int indexOfOpenBracket = name.indexOf('['); 
     int indexOfCloseBracket = name.indexOf(']')+1; 
     return name.substring(0,indexOfOpenBracket).concat(name.substring(indexOfCloseBracket)); 
    } 
} 

这就是我的Abstact测试类

public abstract class AbstractParallelBaseTest { 

    public static ThreadLocal<WebDriver> CURRENT_DRIVER = new ThreadLocal<WebDriver>(); 

    public static List<WebDriver> DRIVERS_TO_CLEANUP = Collections.synchronizedList(new ArrayList<WebDriver>()); 
    public static final long TIMEOUT = 100; 


    protected static final Log LOGGER = LogFactory.getLog(AbstractParallelBaseTest.class); 

    static class WebDriverFactory { 
     static WebDriver create() { 
      WebDriver driver = null; 
      try { 
       LoggingPreferences logs = new LoggingPreferences(); 
       logs.enable(LogType.BROWSER, Level.OFF); 
       logs.enable(LogType.CLIENT, Level.OFF); 
       logs.enable(LogType.DRIVER, Level.OFF); 
       logs.enable(LogType.PERFORMANCE, Level.OFF); 
       logs.enable(LogType.PROFILER, Level.OFF); 
       logs.enable(LogType.SERVER, Level.OFF); 

       DesiredCapabilities desiredCapabilities; 
       String webDriver = System.getProperty("web.driver"); 

       if ("chrome".equals(webDriver)) { 
        desiredCapabilities = DesiredCapabilities.chrome(); 
        desiredCapabilities.setCapability(CapabilityType.LOGGING_PREFS, logs); 
        desiredCapabilities.setCapability(CapabilityType.PROXY, ClientUtil.createSeleniumProxy(proxy)); 
        driver = new ChromeDriver(desiredCapabilities); 
       } else if ("ie".equals(webDriver)) { 
        desiredCapabilities = DesiredCapabilities.internetExplorer(); 
        desiredCapabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true); 
        desiredCapabilities.setCapability(InternetExplorerDriver.IE_ENSURE_CLEAN_SESSION, true); 
        desiredCapabilities.setCapability(CapabilityType.LOGGING_PREFS, logs); 
        desiredCapabilities.setCapability(CapabilityType.PROXY, ClientUtil.createSeleniumProxy(proxy)); 
        driver = new InternetExplorerDriver(desiredCapabilities); 
       } else if ("firefox".equals(webDriver)) { 
        desiredCapabilities = DesiredCapabilities.firefox(); 
        desiredCapabilities.setCapability(CapabilityType.LOGGING_PREFS, logs); 
        driver = new FirefoxDriver(desiredCapabilities); 
       } else { 
        desiredCapabilities = DesiredCapabilities.htmlUnitWithJs(); 
        desiredCapabilities.setCapability(CapabilityType.LOGGING_PREFS, logs); 
        driver = new HtmlUnitDriver(desiredCapabilities); 
       } 

       driver.manage().window().setPosition(new Point(0, 0)); 
       driver.manage().window().setSize(new Dimension(1650, 1080)); 
       driver.manage().timeouts().implicitlyWait(120, TimeUnit.SECONDS); 
       driver.manage().timeouts().pageLoadTimeout(120, TimeUnit.SECONDS); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

      return driver; 
     } 
    } 

    @Parameterized.Parameter 
    public int currentDriverIndex; 

    @Parameterized.Parameters(name = "{0}") 
    public static ArrayList<Object> driverTypes() { 
     return Lists.newArrayList(getParams()); 
    } 
} 

在测试每个实现我贴@RunWith(ParallelParametrized.class)和它的作品!

相关问题