Hi,
I am trying to execute a selenium test in parallel.I am passing parameters for the testcase from a dataprovider(excel sheet) provided by testNG.Currently my test executes sequentially taking one row of data for each iteration.Is it possible to parallalize it i.e)if there are 3 testcases,the 3 must start its execution same time.I tried the parallel execution of tests in testng but can't achieve it.Here is my code pls tell is there is any possiblity of achieving parallelism.

<font class="small">Code:</font><hr /><pre>
package quicksetup;

import com.thoughtworks.selenium.*;
import org.testng.annotations.*;
import static org.testng.Assert.*;
import org.openqa.selenium.server.SeleniumServer;
import org.junit.AfterClass;
import java.util.regex.Pattern;
import org.openqa.selenium.server.RemoteControlConfigurat ion;

import java.io.File;
import jxl.*;

public class new2TestNG2mod extends SeleneseTestCase {

RemoteControlConfiguration rc;

public new2TestNG2mod()
{
rc = new RemoteControlConfiguration();
}

@DataProvider(name = "DP1")
public Object[][] createData1() {
Object[][] retObjArr = getTableArray(
"testCases\\Resources\\Data\\data1.xls", "DataPool",
"TestData1");
return (retObjArr);
}

/* @Test (dataProvider = "DP1")
public void setUp(String port) throws Exception {
//RemoteControlConfiguration rc = new RemoteControlConfiguration();
rc.setPort(Integer.parseInt(port));
//rc.setPort(4478);
SeleniumServer seleniumserver = new SeleniumServer(rc);
seleniumserver.boot();
seleniumserver.start();
// setUp(baseUrl, "*firefox");
// setUp("https://new2.app.com/", "*firefox");

}*/

@Test (dataProvider = "DP1", threadPoolSize = 1, invocationCount = 2)
public void testNew2TestNG(String baseUrl,String hostName,String port)
throws Exception {
rc.setPort(Integer.parseInt(port));
SeleniumServer seleniumserver = new SeleniumServer(rc);
seleniumserver.boot();
seleniumserver.start();
Selenium selenium = new DefaultSelenium("localhost", Integer.parseInt(port), "*firefox", "https://new2.app.com/");
selenium.start();
selenium.setSpeed("1000");
selenium
.open("/appliance-console/quicksetup.do?action=prepareStepProductLogo");
selenium
.click("//div[@id='content']/table/tbody/tr[6]/td[2]/ul/li/a/span");
selenium.waitForPageToLoad("30000");
selenium.click("link=Continue");
selenium.waitForPageToLoad("30000");
selenium.click("licenseAgreement");
selenium.click("link=Next");
selenium.waitForPageToLoad("30000");
selenium.type("TextFieldTag_QuickSetup.GroupHead1. Field1.Step2",
"new2.app.com");
selenium.type("hostIpAddr", "10.31.248.245");
selenium.type("subnetMaskIpAddr", "255.255.255.0");
selenium.type("gatewayIpAddr", "10.31.248.1");
selenium.type("primaryDnsIpAddr", "10.100.8.203");
selenium.type("TextFieldTag_QuickSetup.GroupHead1. Field6.Step2",
"10.100.8.204");
selenium.select("SelectOptionsTag_QuickSetup.Group Head2.Field1.Step2",
"label=Asia/Calcutta");
selenium.type("ntpServerAddr", "3.rpath.pool.ntp.org");
selenium.click("link=Next");
selenium.waitForPageToLoad("30000");
selenium.type("PasswordTag_QuickSetup.GroupHead1.F ield1.Step3",
"Mypwd#123");
selenium.type("lockboxPwdCnfrm", "Mypwd#123");
selenium.type("masterPwd", "Mypwd#123");
selenium.type("masterPwdCnfrm", "Mypwd#123");
selenium.type("kmsAdminPwd", "Mypwd123");
selenium.type("kmsAdminPwdCnfrm", "Mypwd123");
selenium.type("applAdminPwd", "Mypwd#123");
selenium.type("applAdminPwdCnfrm", "Mypwd#123");
selenium.type("kmsAdminPwd", "Mypwd#123");
selenium.type("kmsAdminPwdCnfrm", "Mypwd#123");
selenium.type("axmAdminPwd", "Mypwd123");
selenium.type("axmAdminPwdCnfrm", "Mypwd123");
selenium.type("osPwd", "Mypwd#123");
selenium.type("osPwdCnfrm", "Mypwd#123");
selenium.click("link=Next");
selenium.waitForPageToLoad("30000");
selenium.setTimeout("24000000");
selenium.click("link=Finish");
selenium.waitForPageToLoad("30000");
selenium.click("btn3");
for (int second = 0;; second++) {
if (second &gt;= 60)
fail("timeout");
try {
if (selenium.isTextPresent("SUCCESS"))
break;
} catch (Exception e) {
}
Thread.sleep(1000);
}

verifyTrue(selenium.isTextPresent("SUCCESS"));
selenium.click("btn3");
}

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

public String[][] getTableArray(String xlFilePath, String sheetName,
String tableName) {
String[][] tabArray = null;
try {
Workbook workbook = Workbook.getWorkbook(new File(xlFilePath));
Sheet sheet = workbook.getSheet(sheetName);
int startRow, startCol, endRow, endCol, ci, cj;
Cell tableStart = sheet.findCell(tableName);
startRow = tableStart.getRow();
startCol = tableStart.getColumn();

Cell tableEnd = sheet.findCell(tableName, startCol + 1,
startRow + 1, 100, 64000, false);

endRow = tableEnd.getRow();
endCol = tableEnd.getColumn();
System.out.println("startRow=" + startRow + ", endRow=" + endRow
+ ", " + "startCol=" + startCol + ", endCol=" + endCol);
tabArray = new String[endRow - startRow - 1][endCol - startCol - 1];
ci = 0;

for (int i = startRow + 1; i &lt; endRow; i++, ci++) {
cj = 0;
for (int j = startCol + 1; j &lt; endCol; j++, cj++) {
tabArray[ci][cj] = sheet.getCell(j, i).getContents();
}
}
} catch (Exception e) {
System.out.println("error in getTableArray()");
}
return (tabArray);
}

}
</pre><hr />