BeforeMethod / BeforeTest issue for parallel execution

409 views
Skip to first unread message

Sergey Kuts

unread,
Nov 12, 2013, 8:53:33 AM11/12/13
to testng...@googlegroups.com
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

Sergey Kuts

unread,
Nov 12, 2013, 11:54:06 AM11/12/13
to testng...@googlegroups.com
Sorry, there should be:

    @BeforeTest
    public void createConnection(ITestContext context) {}

not @BeforeMethod

вторник, 12 ноября 2013 г., 15:53:33 UTC+2 пользователь Sergey Kuts написал:
Reply all
Reply to author
Forward
0 new messages