跨浏览器测试 - 如何在testng.xml中配置测试的并行执行

时间:2017-12-12 10:50:18

标签: multithreading parallel-processing cross-browser automated-tests selenium-grid

我想使用TestNG在不同的浏览器上执行并行测试。 这是我的testng.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<suite name="Parallel Tests" verbose="2" parallel="tests" thread-count="4">

        <!--Set test parameters to execute test in Mozilla Firefox browser on Windows platform. -->

        <test name="Linux+firefox Test1" parallel="classes" thread-count="2">

                <parameter name="platform" value="LINUX"/>
                <parameter name="browser" value="firefox"/>
                <parameter name="url" value="http://hh.de/"/>
                <parameter name="version" value="58.0b7"/>

            <classes>
                <class name="suchen.Portalsuche"/>
                <class name="suchen.HVV"/>
            </classes>
        </test>

        <!-- Set test parameters to execute test in Google Chrome browser on Windows platform. -->
        <test name="Linux+chrome Test1" parallel="classes" thread-count="2">

                <parameter name="platform" value="LINUX"/>
                <parameter name="browser" value="chrome"/>
                <parameter name="url" value="http://hh.de/"/>
                <parameter name="version" value="62.0.3202.62"/>

            <classes>
                <class name="suchen.Portalsuche"/>
                <class name="suchen.HVV"/>
            </classes>
        </test>

</suite>

它启动了第一个浏览器(Mozilla Firefox),但它既没有执行这两个测试,也没有启动第二个浏览器(谷歌浏览器)。

这也是我目前用于启动这些浏览器的代码段

@Parameters({ "platform", "browser", "url", "version" })
    @BeforeTest(alwaysRun = true)
    public void setup(String platform, String browser, String url, String version) throws MalformedURLException {
        DesiredCapabilities caps = new DesiredCapabilities();
        caps.setPlatform(org.openqa.selenium.Platform.LINUX);
        System.setProperty("java.net.preferIPv4stack", "true");
        caps.setCapability("SeleniumTests", "redhat5 && amd64");

        if (browser.equalsIgnoreCase("firefox")) {
            System.out.println("Executing on Firefox");
            String Hub = "http://localhost:4444/wd/hub";
            caps = DesiredCapabilities.firefox();
            caps.setBrowserName("firefox");
            System.setProperty("webdriver.gecko.driver", "/opt/geckodriver.exe");

            driver = new RemoteWebDriver(new URL(Hub), caps);
            driver.manage().window().maximize();
            driver.navigate().to(url);

        } else if (browser.equalsIgnoreCase("chrome")) {
            System.out.println("Executing on Chrome");
            String Hub = "http://localhost:4444/wd/hub";
            caps = DesiredCapabilities.chrome();
            caps.setBrowserName("chrome");
            ChromeOptions options = new ChromeOptions();
            System.setProperty("webdriver.chrome.driver", "/opt/chromedriver.exe");
            caps.setCapability(ChromeOptions.CAPABILITY, options);

            options.addArguments("--start-maximized");
            driver = new RemoteWebDriver(new URL(Hub), caps);
            driver.navigate().to(url);
        }
    }

感谢您的帮助。我很感激。

1 个答案:

答案 0 :(得分:0)

删除测试代码级别的并行属性,并将套件代码级别的主题计数重置为2。

testNG xml应如下所示:

<?xml version="1.0" encoding="UTF-8" ?>
<suite name="Parallel Tests" verbose="2" parallel="tests" thread-count="2">

        <!--Set test parameters to execute test in Mozilla Firefox browser on Windows platform. -->

        <test name="Linux+firefox Test1" >

                <parameter name="platform" value="LINUX"/>
                <parameter name="browser" value="firefox"/>
                <parameter name="url" value="http://hh.de/"/>
                <parameter name="version" value="58.0b7"/>

            <classes>
                <class name="suchen.Portalsuche"/>
                <class name="suchen.HVV"/>
            </classes>
        </test>

        <!-- Set test parameters to execute test in Google Chrome browser on Windows platform. -->
        <test name="Linux+chrome Test2" >

                <parameter name="platform" value="LINUX"/>
                <parameter name="browser" value="chrome"/>
                <parameter name="url" value="http://hh.de/"/>
                <parameter name="version" value="62.0.3202.62"/>

            <classes>
                <class name="suchen.Portalsuche"/>
                <class name="suchen.HVV"/>
            </classes>
        </test>

</suite>