I think i found out why, and 'fixed' it by modifying the
TelluriumTestNGTestCase class.  But, i'm not sure if this is the
proper place to fix it.  The problem was the @BeforeClass was called
multiple times.  And, since it's a static object, it was shared by all
my test classes that extended it.  So, i 'fixed' it by adding a check
for null like so,

    @BeforeClass
    public static void setUpForTest() {
        if (tellurium == null) {
           tellurium = TelluriumSupport.addSupport();
           tellurium.start(customConfig);
           connector = (SeleniumConnector) tellurium.getConnector();
        }
    }

So, my guess is that if you use ant task to start your tests, it will
fire off your tests in non-sequential order?  Basically, test 2 is not
going to wait until test 1 completes before starting?  And, because
'tellurium' is static, all my tests tried to start a selenium server.




On Jun 10, 2:46 pm, super fan 911 <[email protected]> wrote:
> This won't work because the "tellurium" object is protected and on a
> different package. My "YourTestNGTestCase" will be on its own
> package.  Unless you're asking me to put my "YourTestNGTestCase" in
> the same package as "BaseTelluriumJavaTestCase" which I'll need to
> rebuild the tellurium source.  The tests passed using JUnit w/o the
> error.  The tests also passed with the error using TestNG.  The
> problem is the error.
>
> public class YourTestNGTestCase extends BaseTelluriumJavaTestCase {
>
>     @BeforeClass
>     public static void setUpForTest() {
>         tellurium = TelluriumSupport.addSupport();
>         tellurium.start(customConfig);
>         connector = (SeleniumConnector) tellurium.getConnector();
>     }
>
>     @AfterClass
>     public static void tearDownForTest() {
>         if(tellurium != null)
>             tellurium.stop();
>     }
>
> }
>
> won't work because
>
> On Jun 10, 2:09 pm, Jian Fang <[email protected]> wrote:
>
> > I mean you can extend your class in the follow way.
>
> > public class YourTestNGTestCase extends BaseTelluriumJavaTestCase {
>
> >     @BeforeClass
> >     public static void setUpForTest() {
> >         tellurium = TelluriumSupport.addSupport();
> >         tellurium.start(customConfig);
> >         connector = (SeleniumConnector) tellurium.getConnector();
> >     }
>
> >     @AfterClass
> >     public static void tearDownForTest() {
> >         if(tellurium != null)
> >             tellurium.stop();
> >     }
>
> > }
>
> > Perhaps it took some time for the embedded selenium server to shutdown for
> > the first test. But after some time, the embedded server
> > started up successfully and the second test went through?
>
> > BTW, are the tests failed or succeeded?
>
> > Thanks,
>
> > Jian
>
> > On Thu, Jun 10, 2010 at 4:56 PM, super fan 911 <[email protected]>wrote:
>
> > > If my test cases extends BaseTelluriumJavaTestCase, it will fail
> > > because the selenium server hasn't been initialized and started.  I
> > > can add the @BeforeTest and @AfterTest methods,
> > > but they won't be able to access the "tellurium" and "connector"
> > > objects because they are protected.
>
> > > I tried running multiple tests in Eclipse with the TestNG plug-in, i
> > > get the same result.
>
> > > If we look at the stack trace below, it looks like it's trying to
> > > configure the embedded selenium server 2x before starting the
> > > client...why?  Is it trying to run the tests in parallel?
>
> > >  [testng] Parse configuration file: TelluriumConfig.groovy from
> > > project root directory
> > >   [testng] Configure UI Object Builders using configuration
> > >   [testng] Configure widget modules using configuration
> > >   [testng] Configure event handler using configuration
> > >   [testng] Configure data accessor using configuration
> > >   [testng] Configure dispatcher using configuration
> > >   [testng] Configure Embedded Selenium Server using configuration
> > >   [testng] Warning: No user-extensions.js
> > >   [testng] Configure Selenium Client using configuration
> > >   [testng] Configure Embedded Selenium Server using configuration
> > >   [testng] Warning: No user-extensions.js
> > >   [testng] java.net.BindException: Selenium is already running on
> > > port 4444. Or some other service is.
> > >   [testng]     at
> > > org.openqa.selenium.server.SeleniumServer.start(SeleniumServer.java:
> > > 378)
> > >   [testng]     at
> > > org.openqa.selenium.server.SeleniumServer.boot(SeleniumServer.java:
> > > 224)
> > >   [testng]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> > > Method)
> > >   [testng]     at
> > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
> > > 39)
> > >   [testng]     at
>
> > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
> > > 25)
> > >   [testng]     at java.lang.reflect.Method.invoke(Method.java:597)
> > >   [testng]     at
> > > org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite
> > > $PojoCachedMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:
> > > 229)
> > >   [testng]     at
>
> > > org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:
> > > 52)
> > >   [testng]     at
>
> > > org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:
> > > 121)
> > >   [testng]     at
>
> > > org.telluriumsource.server.SeleniumServerDaemon.run(SeleniumServerDaemon.groovy:
> > > 142)
> > >   [testng]     at org.telluriumsource.server.SeleniumServerDaemon
> > > $run.call(Unknown Source)
> > >   [testng]     at
>
> > > org.telluriumsource.server.EmbeddedSeleniumServer.setUpSeleniumServer(EmbeddedSeleniumServer.groovy:
> > > 63)
> > >   [testng]     at org.telluriumsource.server.EmbeddedSeleniumServer
> > > $setUpSeleniumServer.callCurrent(Unknown Source)
> > >   [testng]     at
>
> > > org.telluriumsource.server.EmbeddedSeleniumServer.runSeleniumServer(EmbeddedSeleniumServer.groovy:
> > > 74)
> > >   [testng]     at org.telluriumsource.server.EmbeddedSeleniumServer
> > > $runSeleniumServer.call(Unknown Source)
> > >   [testng]     at
>
> > > org.telluriumsource.framework.TelluriumFramework.start(TelluriumFramework.groovy:
> > > 145)
> > >   [testng]     at org.telluriumsource.framework.TelluriumFramework
> > > $start.callCurrent(Unknown Source)
> > >   [testng]     at
>
> > > org.telluriumsource.framework.TelluriumFramework.start(TelluriumFramework.groovy:
> > > 154)
> > >   [testng]     at
>
> > > org.telluriumsource.test.java.TelluriumTestNGTestCase.setUpForTest(TelluriumTestNGTestCase.java:
> > > 23)
> > >   [testng]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> > > Method)
> > >   [testng]     at
> > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
> > > 39)
> > >   [testng]     at
>
> > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
> > > 25)
> > >   [testng]     at java.lang.reflect.Method.invoke(Method.java:597)
> > >   [testng]     at
> > > org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:644)
> > >   [testng]     at
> > > org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:
> > > 443)
> > >   [testng]     at
> > > org.testng.internal.Invoker.invokeConfigurations(Invoker.java:160)
> > >   [testng]     at
> > > org.testng.internal.Invoker.invokeConfigurations(Invoker.java:90)
> > >   [testng]     at org.testng.TestRunner.beforeRun(TestRunner.java:
> > > 522)
> > >   [testng]     at org.testng.TestRunner.run(TestRunner.java:490)
> > >   [testng]     at org.testng.SuiteRunner.runTest(SuiteRunner.java:
> > > 329)
> > >   [testng]     at
> > > org.testng.SuiteRunner.runSequentially(SuiteRunner.java:324)
> > >   [testng]     at org.testng.SuiteRunner.privateRun(SuiteRunner.java:
> > > 296)
> > >   [testng]     at org.testng.SuiteRunner.run(SuiteRunner.java:201)
> > >   [testng]     at
> > > org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:915)
> > >   [testng]     at org.testng.TestNG.runSuitesLocally(TestNG.java:879)
> > >   [testng]     at org.testng.TestNG.run(TestNG.java:787)
> > >   [testng]     at org.testng.TestNG.privateMain(TestNG.java:952)
> > >   [testng]     at org.testng.TestNG.main(TestNG.java:925)
> > >   [testng] Configure Selenium Client using configuration
> > >   [testng] hello world 2
> > >    [testng] test passed.
> > >   [testng]
> > >   [testng] hello world
> > >   [testng] test passed.
> > >    [testng] PASSED: testXYZ
> > >   [testng] PASSED: testXYZ
> > >   [testng]
> > >   [testng] ===============================================
> > >   [testng]     Functional
> > >   [testng]     Tests run: 2, Failures: 0, Skips: 0
> > >   [testng] ===============================================
>
> > > On Jun 10, 1:15 pm, Jian Fang <[email protected]> wrote:
> > > > FYI:  comparison of JUnit and TestNG annotations.
>
> > > >http://www.mkyong.com/unittest/junit-4-vs-testng-comparison/
>
> > > > On Thu, Jun 10, 2010 at 4:06 PM, Jian Fang <[email protected]>
> > > wrote:
> > > > > Here is the code.
>
> > > > > public abstract class TelluriumTestNGTestCase extends
> > > > > BaseTelluriumJavaTestCase {
>
> > > > >     @BeforeTest(alwaysRun = true)
> > > > >     public static void setUpForTest() {
> > > > >         tellurium = TelluriumSupport.addSupport();
> > > > >         tellurium.start(customConfig);
> > > > >         connector = (SeleniumConnector) tellurium.getConnector();
> > > > >     }
>
> > > > >     @AfterTest(alwaysRun = true)
> > > > >     public static void tearDownForTest() {
> > > > >         if(tellurium != null)
> > > > >             tellurium.stop();
> > > > >     }
> > > > > }
>
> > > > > You can create a test case that extends BaseTelluriumJavaTestCase. 
> > > > > Then
> > > you
> > > > > use @BeforeClass and @AfterClass
> > > > > annotations to do setup and teardown in your test case. Let us know if
> > > this
> > > > > works.
>
> > > > > BTW, Have you tried to run multiple Tellurium TestNG test cases in an
> > > IDE?
> > > > > Just wonder if this problem is only ant related.
>
> > > > > Thanks,
>
> > > > > Jian
>
> > > > > On Thu, Jun 10, 2010 at 3:56 PM, Jian Fang <[email protected]
> > > >wrote:
>
> > > > >> I am not sure if this is related to our changes in 0.7.0. We have
> > > changed
> > > > >> the setup and teardown methods to use
> > > > >> @BeforeTest and @AfterTest annotations for TelluriumTestNGTestCase so
> > > that
> > > > >> the embedded selenium server
> > > > >> will only be started once for multiple tests. Maybe the TestNG ant
> > > task
> > > > >> does not handle that correctly?
>
> > > > >> If you change your file to use TelluriumJUnitTestCase, do you have 
> > > > >> the
> > > > >> same problem?
>
> > > > >> The thread you mentioned was resolved because the ip in the
> > > configuration
> > > > >> file was not correct.
>
> > > > >> Thanks,
>
> > > > >> Jian
>
> > > > >> On Thu, Jun 10, 2010
>
> ...
>
> read more »

-- 
You received this message because you are subscribed to the Google Groups 
"tellurium-users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/tellurium-users?hl=en.

Reply via email to