Hi all,
I have a problem with executing tests in parallel using BeforeMethod and BeforeTest annotations.
Here's my XML example:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "
http://testng.org/testng-1.0.dtd" >
<suite name="s" parallel="tests" thread-count="2">
<parameter name="p" value="v"/>
<test name="TEST SET FF24 - 1">
<parameter name="p1" value="v1"/>
<parameter name="p2" value="v2"/>
<classes>
<class name="c1">
<methods>
<include name="m1"/>
<include name="m2"/>
</methods>
</class>
<class name="c2">
<methods>
<include name="m3"/>
<include name="m4">
<parameter name="p3" value="v3"/>
</include>
</methods>
</class>
</classes>
</test>
<test name="TEST SET FF24 - 2">
<parameter name="p1" value="v1"/>
<parameter name="p2" value="v2"/>
<classes>
<class name="c1">
<methods>
<include name="m1"/>
<include name="m2"/>
</methods>
</class>
<class name="c2">
<methods>
<include name="m3"/>
<include name="m4">
<parameter name="p3" value="v3"/>
</include>
</methods>
</class>
</classes>
</test>
<test name="TEST SET IE10">
<parameter name="p1" value="v1"/>
<parameter name="p2" value="v2"/>
<classes>
<class name="c1">
<methods>
<include name="m1"/>
<include name="m2"/>
</methods>
</class>
<class name="c2">
<methods>
<include name="m3"/>
<include name="m4">
<parameter name="p3" value="v3"/>
</include>
</methods>
</class>
</classes>
</test>
<test name="TEST SET IE9">
<parameter name="p1" value="v1"/>
<parameter name="p2" value="v2"/>
<classes>
<class name="c1">
<methods>
<include name="m1"/>
<include name="m2"/>
</methods>
</class>
<class name="c2">
<methods>
<include name="m3"/>
<include name="m4">
<parameter name="p3" value="v3"/>
</include>
</methods>
</class>
</classes>
</test>
</suite>
Here's my code:
public class c1 extends BaseTest {
@Test
public void m1() {}
@Test
public void m2() {}
}
public class c2 extends BaseTest {
@Test
public void m3() {}
@Test
public void m4() {}
}
public class BaseTest extends RemoteDriverRunner {
@BeforeMethod
public void initPageObjects(ITestContext context, Method method) {}
}
public class RemoteDriverRunner {
@BeforeMethod
public void createDriver(ITestContext context, Method method) {}
@AfterMethod
public void disposeDriver() {}
@AfterTest
public void disposeConnection() {}
}
Couple of words about process. I have 2 VMs with FF 24 and IE9 / 10 browsers. My tests are executing in 2 parallel threads between these 2 VMs: first, 2 FFs started, then (after FFs execution finished) 2 IEs started. Each method in test tag creates selenium webriver instance and opens db connection (if it's a new test) in BeforeMethod and kills it (webdriver) in AfterMethod. AfterTest annotation is used for closing db connection. Everything works fine, but if I add:
@BeforeMethod
public void createConnection(ITestContext context) {}
for moving db connection opening process from BeforeMethod to BeforeTest, smth goes wrong: AfterMethod is ignored and as a result all the test groups are executed at the same time: 2 FFs started and after couple of seconds 2 IEs started before closing FFs. Do you have any idea, why could it happen? Why when I use BeforeTest, AfterMethod is ignored?
Thanks,
Sergey