You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by ca...@apache.org on 2009/07/16 02:56:02 UTC
svn commit: r794477 - in
/continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test:
./ listener/ parent/
Author: carlos
Date: Thu Jul 16 00:56:02 2009
New Revision: 794477
URL: http://svn.apache.org/viewvc?rev=794477&view=rev
Log:
Extract general selenium utils into their own classes
Added:
continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/SetupContinuum.java (contents, props changed)
- copied, changed from r794055, continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/SetupSelenium.java
continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/listener/SeleniumListener.java (with props)
continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/parent/ThreadSafeSeleniumSession.java (with props)
Removed:
continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/SetupSelenium.java
Modified:
continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/parent/AbstractSeleniumTest.java
Copied: continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/SetupContinuum.java (from r794055, continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/SetupSelenium.java)
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/SetupContinuum.java?p2=continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/SetupContinuum.java&p1=continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/SetupSelenium.java&r1=794055&r2=794477&rev=794477&view=diff
==============================================================================
--- continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/SetupSelenium.java (original)
+++ continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/SetupContinuum.java Thu Jul 16 00:56:02 2009
@@ -20,48 +20,20 @@
*/
import org.apache.continuum.web.test.parent.AbstractContinuumTest;
-import org.testng.Assert;
-import org.testng.annotations.AfterTest;
-import org.testng.annotations.BeforeSuite;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.Optional;
-import org.testng.annotations.Parameters;
-import org.testng.annotations.Test;
/**
- * Based on SetupSelenium of Wendy Smoak test.
+ * Based on SetupContinuum of Wendy Smoak test.
*
* @author José Morales MartÃnez
* @version $Id$
*/
-@Test( groups = { "setup" }, alwaysRun = true )
-public class SetupSelenium
+public class SetupContinuum
extends AbstractContinuumTest
{
- @Override
- @AfterTest
- public void close()
- throws Exception
- {
- super.close();
- }
-
- @Override
- @BeforeSuite
- public void open()
- throws Exception
- {
- super.open();
- }
- @BeforeTest
- @Parameters( { "baseUrl", "browser", "seleniumHost", "seleniumPort" } )
- public void initializeContinuum( String baseUrl, String browser, @Optional( "localhost" ) String seleniumHost,
- @Optional( "4444" ) int seleniumPort )
+ public void initializeContinuum()
throws Exception
{
- super.open( baseUrl, browser, seleniumHost, seleniumPort );
- Assert.assertNotNull( getSelenium(), "Selenium is not initialized" );
getSelenium().open( baseUrl );
String title = getSelenium().getTitle();
if ( title.equals( "Create Admin User" ) )
Propchange: continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/SetupContinuum.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/SetupContinuum.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/SetupContinuum.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/listener/SeleniumListener.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/listener/SeleniumListener.java?rev=794477&view=auto
==============================================================================
--- continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/listener/SeleniumListener.java (added)
+++ continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/listener/SeleniumListener.java Thu Jul 16 00:56:02 2009
@@ -0,0 +1,86 @@
+package org.apache.continuum.web.test.listener;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static org.apache.continuum.web.test.parent.ThreadSafeSeleniumSession.*;
+
+import org.testng.Assert;
+import org.testng.ITestContext;
+import org.testng.ITestResult;
+import org.testng.TestListenerAdapter;
+
+/**
+ * Configures Selenium before each test if needed.
+ *
+ * @author Carlos Sanchez <a href="mailto:carlos@apache.org">
+ */
+public class SeleniumListener
+ extends TestListenerAdapter
+{
+ @Override
+ public void onTestStart( ITestResult result )
+ {
+ if ( !isStarted() && !isInError() )
+ {
+ /* start selenium */
+ String browser = getProperty( "browser" );
+ String seleniumHost = getProperty( "seleniumHost" );
+ String seleniumPort = getProperty( "seleniumPort" );
+ String baseUrl = getProperty( "baseUrl" );
+ Assert.assertNotNull( browser, "browser parameter is not defined" );
+ Assert.assertNotNull( seleniumHost, "seleniumHost parameter is not defined" );
+ Assert.assertNotNull( seleniumPort, "seleniumPort parameter is not defined" );
+ Assert.assertNotNull( baseUrl, "baseUrl parameter is not defined" );
+ System.out.println( "Starting Selenium session: " + "[" + seleniumHost + ", " + seleniumPort + ", "
+ + baseUrl + ", " + browser + "]" );
+ start( seleniumHost, Integer.parseInt( seleniumPort ), browser, baseUrl );
+ System.out.println( "Started Selenium session: " + configurationString() );
+ }
+ super.onTestStart( result );
+ }
+
+ @Override
+ public void onTestSuccess( ITestResult tr )
+ {
+ stop();
+ super.onTestSuccess( tr );
+ }
+
+ @Override
+ public void onTestFailure( ITestResult tr )
+ {
+ stop();
+ System.out.println( "Test " + tr.getName() + configurationString() + " -> Failed" );
+ super.onTestFailure( tr );
+ }
+
+ private String getProperty( String name )
+ {
+ for ( ITestContext context : getTestContexts() )
+ {
+ String p = context.getSuite().getParameter( "browser" );
+ if ( p != null )
+ {
+ return p;
+ }
+ }
+ return System.getProperty( name );
+ }
+}
Propchange: continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/listener/SeleniumListener.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/listener/SeleniumListener.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/listener/SeleniumListener.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/parent/AbstractSeleniumTest.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/parent/AbstractSeleniumTest.java?rev=794477&r1=794476&r2=794477&view=diff
==============================================================================
--- continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/parent/AbstractSeleniumTest.java (original)
+++ continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/parent/AbstractSeleniumTest.java Thu Jul 16 00:56:02 2009
@@ -32,7 +32,6 @@
import org.apache.commons.io.IOUtils;
import org.testng.Assert;
-import com.thoughtworks.selenium.DefaultSelenium;
import com.thoughtworks.selenium.Selenium;
/**
@@ -47,52 +46,37 @@
public static String maxWaitTimeInMs;
- private static ThreadLocal<Selenium> selenium = new ThreadLocal<Selenium>();
-
- private static ThreadLocal<String> seleniumBrowser = new ThreadLocal<String>();
-
- private static Properties p;
+ private static Properties properties;
private final static String PROPERTIES_SEPARATOR = "=";
- /**
- * Initialize properties.
- */
- public void open()
- throws Exception
+ static
{
- InputStream input = this.getClass().getClassLoader().getResourceAsStream( "testng.properties" );
- p = new Properties();
- p.load( input );
-
- maxWaitTimeInMs = getProperty( "MAX_WAIT_TIME_IN_MS" );
+ initialize();
}
/**
- * Initialize selenium
+ * Initialize properties.
*/
- public void open( String baseUrl, String browser, String seleniumHost, int seleniumPort )
- throws Exception
+ private static void initialize()
{
- this.baseUrl = baseUrl;
-
- if ( getSelenium() == null )
+ InputStream input = AbstractSeleniumTest.class.getClassLoader().getResourceAsStream( "testng.properties" );
+ properties = new Properties();
+ try
{
- DefaultSelenium s = new DefaultSelenium( seleniumHost, seleniumPort, browser, baseUrl );
- s.start();
- selenium.set( s );
- seleniumBrowser.set( browser );
+ properties.load( input );
+ }
+ catch ( IOException e )
+ {
+ throw new RuntimeException( e );
}
- }
- public static Selenium getSelenium()
- {
- return selenium == null ? null : selenium.get();
+ maxWaitTimeInMs = properties.getProperty( "MAX_WAIT_TIME_IN_MS" );
}
- public static String getSeleniumBrowser()
+ public Selenium getSelenium()
{
- return seleniumBrowser == null ? null : seleniumBrowser.get();
+ return ThreadSafeSeleniumSession.getSelenium();
}
/**
@@ -108,7 +92,7 @@
protected String getProperty( String key )
{
- return p.getProperty( key );
+ return properties.getProperty( key );
}
protected String getEscapeProperty( String key )
@@ -142,11 +126,7 @@
public void close()
throws Exception
{
- if ( getSelenium() != null )
- {
- getSelenium().stop();
- selenium.set( null );
- }
+ ThreadSafeSeleniumSession.stop();
}
// *******************************************************
@@ -201,7 +181,7 @@
public void assertLinkNotPresent( String text )
{
- Assert.assertFalse( isElementPresent( "link=" + text ), "The link '" + text + "' is present." );
+ Assert.assertFalse( isElementPresent( "link=" + text ), "The link '" + text + "' is present." );
}
public void assertImgWithAlt( String alt )
Added: continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/parent/ThreadSafeSeleniumSession.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/parent/ThreadSafeSeleniumSession.java?rev=794477&view=auto
==============================================================================
--- continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/parent/ThreadSafeSeleniumSession.java (added)
+++ continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/parent/ThreadSafeSeleniumSession.java Thu Jul 16 00:56:02 2009
@@ -0,0 +1,156 @@
+package org.apache.continuum.web.test.parent;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.continuum.web.test.SetupContinuum;
+
+import com.thoughtworks.selenium.DefaultSelenium;
+import com.thoughtworks.selenium.Selenium;
+
+/**
+ * Storage for selenium related objects needed for each thread when running in parallel.
+ *
+ * @author Carlos Sanchez <a href="mailto:carlos@apache.org">
+ */
+public class ThreadSafeSeleniumSession
+{
+ private static ThreadLocal<ThreadSafeSeleniumSession> instance = new ThreadLocal<ThreadSafeSeleniumSession>();
+
+ private Selenium selenium;
+
+ private Exception error;
+
+ private String host, browser, baseUrl;
+
+ private int port;
+
+ private static ThreadSafeSeleniumSession getInstance()
+ {
+ ThreadSafeSeleniumSession session = instance.get();
+ if ( session == null )
+ {
+ session = new ThreadSafeSeleniumSession();
+ instance.set( session );
+ }
+ return session;
+ }
+
+ public static void start( String seleniumHost, int seleniumPort, String browser, String baseUrl )
+ {
+ try
+ {
+ DefaultSelenium s = new DefaultSelenium( seleniumHost, seleniumPort, browser, baseUrl );
+ s.start();
+ getInstance().selenium = s;
+ getInstance().host = seleniumHost;
+ getInstance().port = seleniumPort;
+ getInstance().browser = browser;
+ getInstance().baseUrl = baseUrl;
+ afterStart();
+ }
+ catch ( RuntimeException e )
+ {
+ getInstance().error = e;
+ throw e;
+ }
+ }
+
+ private static void afterStart()
+ {
+ AbstractSeleniumTest.baseUrl = getBaseUrl();
+ SetupContinuum setup = new SetupContinuum();
+ try
+ {
+ setup.initializeContinuum();
+ }
+ catch ( Exception e )
+ {
+ throw new RuntimeException( e );
+ }
+ }
+
+ public static void stop()
+ {
+ if ( getSelenium() != null )
+ {
+ getSelenium().stop();
+ }
+ getInstance().clear();
+ }
+
+ private void clear()
+ {
+ selenium = null;
+ error = null;
+ host = null;
+ port = 0;
+ browser = null;
+ baseUrl = null;
+ }
+
+ public static boolean isStarted()
+ {
+ return getInstance().selenium != null;
+ }
+
+ public static boolean isInError()
+ {
+ return getInstance().error != null;
+ }
+
+ public static Selenium getSelenium()
+ {
+ Selenium s = getInstance().selenium;
+ if ( s != null )
+ {
+ return s;
+ }
+ else
+ {
+ throw new RuntimeException( "Selenium session has not been started." );
+ }
+ }
+
+ public static String getHost()
+ {
+ return getInstance().host;
+ }
+
+ public static String getBrowser()
+ {
+ return getInstance().browser;
+ }
+
+ public static String getBaseUrl()
+ {
+ return getInstance().baseUrl;
+ }
+
+ public static int getPort()
+ {
+ return getInstance().port;
+ }
+
+ public static String configurationString()
+ {
+ return "[" + getHost() + ", " + getPort() + ", " + getBaseUrl() + ", " + getBrowser() + "]";
+ }
+
+}
Propchange: continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/parent/ThreadSafeSeleniumSession.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/parent/ThreadSafeSeleniumSession.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/parent/ThreadSafeSeleniumSession.java
------------------------------------------------------------------------------
svn:mime-type = text/plain