Search code examples
selenium-grid

Selenium Grid+TestNG run in parallel


I've got a problem with parallel starting tests, using Selenium RC+SeleniumGrid+TestNG. While I run the project, all browsers opens but tests runs in appropriate browser one by one. Could you help me, please?

P.S. Sorry for my english...

Here is my artifacts:

fotttest.java:

package ololo;
import org.testng.AssertJUnit;
import com.thoughtworks.selenium.*;    
import org.testng.annotations.*;
//import org.testng.Assert.*;
//import java.util.regex.Pattern;    
public class fotttest {
public Selenium selenium;
    //@BeforeMethod
    @BeforeTest()
    public void setUp() throws Exception {
        selenium = new DefaultSelenium("localhost", 4444, "*firefox", "http://www.google.com.ua/");
        selenium.start();
    }

    @AfterTest()
    public void tearDown() {
    selenium.stop();
    }

    @Test(description="FottballUATest")
    public void TestOne() throws Exception {
        selenium.open("/");
        Thread.sleep(3000);
        selenium.type("id=gbqfq", "football.ua");
        selenium.click("id=gbqfb");
        for (int second = 0;; second++) {
            if (second >= 60) AssertJUnit.fail("timeout");
            try { if (selenium.isElementPresent("link=Football.ua - все о футболе")) break; } catch (Exception e) {}
            Thread.sleep(1000);
        }

        selenium.click("css=em");
        selenium.waitForPageToLoad("30000");
        for (int second = 0;; second++) {
            if (second >= 60) AssertJUnit.fail("timeout");
            try { if (selenium.isElementPresent("link=Лига чемпионов")) break; } catch (Exception e) {}
            Thread.sleep(1000);
        }

        selenium.click("link=Лига чемпионов");
        selenium.waitForPageToLoad("30000");
        for (int second = 0;; second++) {
            if (second >= 60) AssertJUnit.fail("timeout");
            try { if (selenium.isElementPresent("link=календарь игр")) break; } catch (Exception e) {}
            Thread.sleep(1000);
        }

        selenium.click("link=календарь игр");
        selenium.waitForPageToLoad("30000");
        selenium.select("id=ctl00_ctl17_ddlTeam", "label=Барселона");
        selenium.click("css=#ctl00_ctl17_ddlTeam > option[value=\"51\"]");
        selenium.waitForPageToLoad("30000");
        for (int second = 0;; second++) {
            if (second >= 60) AssertJUnit.fail("timeout");
            try { if (selenium.isElementPresent("xpath=(//a[contains(text(),'2')])[9]")) break; } catch (Exception e) {}
            Thread.sleep(1000);
        }

        selenium.click("xpath=(//a[contains(text(),'2')])[8]");
        selenium.waitForPageToLoad("30000");
        for (int second = 0;; second++) {
            if (second >= 60) AssertJUnit.fail("timeout");
            try { if (selenium.isTextPresent("Матч завершен! Челси проходит Барселону!")) break; } catch (Exception e) {}
            Thread.sleep(1000);
        }       
    }   
}

NewTest:

package ololo;

import org.testng.AssertJUnit;
import com.thoughtworks.selenium.*;

import org.testng.annotations.*;

public class NewTest {
public Selenium selenium;

@BeforeTest()
public void setUp() throws Exception {
    selenium = new DefaultSelenium("localhost", 4444, "*firefox", "http://www.google.com.ua/");
    selenium.start();
}

@AfterTest()
public void tearDown() {
selenium.stop();
}


    @Test (description="IsportTest") 
    public void TestTwo() throws Exception {
        selenium.open("/");
        selenium.type("id=gbqfq", "isport.ua");
        selenium.click("id=gbqfb");
        for (int second = 0;; second++) {
            if (second >= 60) AssertJUnit.fail("timeout");
            try { if (selenium.isElementPresent("css=em")) break; } catch (Exception e) {}
            Thread.sleep(1000);
        }

        selenium.click("css=em");
        selenium.waitForPageToLoad("30000");
        for (int second = 0;; second++) {
            if (second >= 60) AssertJUnit.fail("timeout");
            try { if (selenium.isElementPresent("link=БОКС+ММА")) break; } catch (Exception e) {}
            Thread.sleep(1000);
        }

        selenium.click("link=БОКС+ММА");
        selenium.waitForPageToLoad("30000");
        for (int second = 0;; second++) {
            if (second >= 60) AssertJUnit.fail("timeout");
            try { if (selenium.isElementPresent("link=Котто: \"Все это время Мейвезер был джентльменом\"")) break; } catch (Exception e) {}
            Thread.sleep(1000);
        }

        selenium.click("link=Котто: \"Все это время Мейвезер был джентльменом\"");
        selenium.waitForPageToLoad("30000");
    }

}

testng.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite thread-count="2" name="Suite" parallel="tests">
  <test name="Test" preserve-order="true">
    <classes>
      <class name="ololo.NewTest"/>
      <class name="ololo.fotttest"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

Solution

  • parallel="tests" would mean <test> tags would run in parallel. i.e. if you have multiple test tags then they would run in parallel.

    <test name="Test1">
    <classes>...
    </test>
    <test name="test2">
    <classes>...
    </test>
    

    , then test1 and test2 would run in parallel. If you want each testcase to run in parallel, you should set parallel="methods". And similarly for class level parallelism, use classes.