51Testing软件测试论坛

标题: selenium grid 想实现多线程启动多个chrome浏览器 碰到一个问题 [打印本页]

作者: edgechers    时间: 2015-9-25 15:21
标题: selenium grid 想实现多线程启动多个chrome浏览器 碰到一个问题
demo:使用junit的JUnitCore实现并发
包括两个用例类tastcase1.java,tastcase2.java,都是用来启动chrome浏览器,还有一个使用多线程来run两个用例的类bingfa.java,用的是junit,【遇到的问题:】
在grid两个子节点机器分别跑tastcase1、tastcase2这两个用例,即同时启动了两个浏览器并打开一个网址,启动后只有一个浏览器(节点机器A)可正常执行,另外一个浏览器(节点机器B)起来后直接挂在那里无法往下执行(url栏显示data;,如下图),实际结果就是两个用例都在一个浏览器执行了,而不是两个用例分别在两个浏览器上执行;
[attach]97263[/attach]x

比较了一下节点机器A和B的selenium 执行日志,发现可以执行用例的A机器上的chromedriver的ID和无法执行用例的B机器上的chromedriver的ID 两者是相同的,从而怀疑是否是这个问题导致的。
A:
[attach]97265[/attach]
B:
[attach]97266[/attach]
这个问题困扰了我好久,请问大家有没有遇到类似的问题呢?求助,第一次搞自动化测试的项目,以下是demo代码
【testcase1】
public class testcase1 {
        @Test
        public void run() {
        Init.OpenUrl("1");
        long id = Thread.currentThread().getId();
        System.out.println("Sample test-method 1. Thread id is: " + id);
        }
}

【testcase2】
public class testcase2 {
        @Test
        public void run() {
        Init.OpenUrl("2");
        long id = Thread.currentThread().getId();
        System.out.println("Sample test-method 1. Thread id is: " + id);
        }
}


【Init.java】
public class Init{
       public static WebDriver driver;
       /**
        *@param nodeChromeVersion表示node机器上两个浏览器设置的version,用来标识两个node
        */
       public void OpenUrl(String nodeChromeVersion){
                Map<String, String> mobileEmulation = new HashMap<String, String>();
                mobileEmulation.put("deviceName", "Google Nexus 5");
                Map<String, Object> chromeOptions = new HashMap<String, Object>();
                chromeOptions.put("mobileEmulation", mobileEmulation);
                DesiredCapabilities capability = new DesiredCapabilities();
                capability.setBrowserName("chrome");
                capability.setVersion(nodeChromeVersion);
                capability.setPlatform(Platform.WINDOWS);
                capability.setCapability(ChromeOptions.CAPABILITY,chromeOptions);
                try {
                         driver = new RemoteWebDriver(new URL("http://10.199.144.163:4444/wd/hub"), capability);
                } catch (MalformedURLException e) {
                        e.printStackTrace();
                }
       }
}
【bingfa.java】
public class Zbingfa {
        @Test
        public void test() {
                Class[] cls={Ztestcase1.class,Ztestcase2.class };
                 JUnitCore.runClasses(ParallelComputer.classes(), cls);  
        }
}




作者: edgechers    时间: 2016-4-14 03:04
没人指教。。。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2