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/17 00:40:21 UTC

svn commit: r794897 - in /continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test: listener/ parent/

Author: carlos
Date: Thu Jul 16 22:40:21 2009
New Revision: 794897

URL: http://svn.apache.org/viewvc?rev=794897&view=rev
Log:
Refactor the way the selenium session is stored

Added:
    continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/parent/SeleniumSession.java   (with props)
Modified:
    continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/listener/CaptureScreenShotsListener.java
    continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/listener/SeleniumListener.java
    continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/parent/AbstractSeleniumTest.java
    continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/parent/ThreadSafeSeleniumSession.java

Modified: continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/listener/CaptureScreenShotsListener.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/listener/CaptureScreenShotsListener.java?rev=794897&r1=794896&r2=794897&view=diff
==============================================================================
--- continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/listener/CaptureScreenShotsListener.java (original)
+++ continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/listener/CaptureScreenShotsListener.java Thu Jul 16 22:40:21 2009
@@ -19,8 +19,7 @@
  * under the License.
  */
 
-import static org.apache.continuum.web.test.parent.ThreadSafeSeleniumSession.getBrowser;
-import static org.apache.continuum.web.test.parent.ThreadSafeSeleniumSession.getSelenium;
+import static org.apache.continuum.web.test.parent.ThreadSafeSeleniumSession.getSession;
 
 import java.io.File;
 import java.text.SimpleDateFormat;
@@ -51,7 +50,8 @@
             /* ignore errors related to captureEntirePageScreenshot not implemented in some browsers */
             if ( !e.getMessage().contains( "captureEntirePageScreenshot is only implemented for Firefox" ) )
             {
-                System.out.println( "Error when taking screenshot for test " + tr.getName() + " [" + getBrowser() + "]" );
+                System.out.println( "Error when taking screenshot for test " + tr.getName() + " ["
+                    + getSession().getBrowser() + "]" );
                 e.printStackTrace();
             }
         }
@@ -78,8 +78,8 @@
         String className = cName.substring( cName.lastIndexOf( '.' ) + 1 );
         String fileName =
             targetPath.toString() + fs + methodName + "(" + className + ".java_" + lineNumber + ")-" + time + ".png";
-        getSelenium().windowMaximize();
-        getSelenium().captureEntirePageScreenshot( fileName, "" );
+        getSession().getSelenium().windowMaximize();
+        getSession().getSelenium().captureEntirePageScreenshot( fileName, "" );
     }
 
     private int getStackTraceIndexOfCallingClass( String nameOfClass, StackTraceElement stackTrace[] )

Modified: 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=794897&r1=794896&r2=794897&view=diff
==============================================================================
--- continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/listener/SeleniumListener.java (original)
+++ continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/listener/SeleniumListener.java Thu Jul 16 22:40:21 2009
@@ -19,8 +19,13 @@
  * under the License.
  */
 
-import static org.apache.continuum.web.test.parent.ThreadSafeSeleniumSession.*;
+import static org.apache.continuum.web.test.parent.ThreadSafeSeleniumSession.getSession;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+
+import org.apache.continuum.web.test.parent.SeleniumSession;
 import org.testng.Assert;
 import org.testng.ITestContext;
 import org.testng.ITestResult;
@@ -34,10 +39,15 @@
 public class SeleniumListener
     extends TestListenerAdapter
 {
+    private static final boolean ONE_BROWSER_PER_TEST = false;
+
+    private static final Collection<SeleniumSession> SELENIUM_SESSIONS =
+        Collections.synchronizedCollection( new ArrayList<SeleniumSession>() );
+
     @Override
     public void onTestStart( ITestResult result )
     {
-        if ( !isStarted() && !isInError() )
+        if ( !getSession().isStarted() && !getSession().isInError() )
         {
             /* start selenium */
             String browser = getProperty( "browser" );
@@ -50,24 +60,53 @@
             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() );
+            getSession().start( seleniumHost, Integer.parseInt( seleniumPort ), browser, baseUrl );
+            SELENIUM_SESSIONS.add( getSession() );
+            System.out.println( "Started Selenium session: " + getSession().configurationString() );
         }
         super.onTestStart( result );
     }
 
     @Override
+    public void onFinish( ITestContext testContext )
+    {
+        /* ensure all browsers are killed */
+        for ( SeleniumSession session : SELENIUM_SESSIONS )
+        {
+            try
+            {
+                if ( session.isStarted() )
+                {
+                    session.stop();
+                }
+            }
+            catch ( RuntimeException e )
+            {
+                System.err.println( "Error stoping selenium server: " + session.configurationString() );
+                e.printStackTrace();
+            }
+        }
+        super.onFinish( testContext );
+    }
+
+    @Override
     public void onTestSuccess( ITestResult tr )
     {
-        stop();
+        if ( ONE_BROWSER_PER_TEST )
+        {
+            getSession().stop();
+        }
         super.onTestSuccess( tr );
     }
 
     @Override
     public void onTestFailure( ITestResult tr )
     {
-        stop();
-        System.out.println( "Test " + tr.getName() + configurationString() + " -> Failed" );
+        if ( ONE_BROWSER_PER_TEST )
+        {
+            getSession().stop();
+        }
+        System.out.println( "Test " + tr.getName() + " " + getSession().configurationString() + " -> Failed" );
         super.onTestFailure( tr );
     }
 

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=794897&r1=794896&r2=794897&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 22:40:21 2009
@@ -76,7 +76,7 @@
 
     public Selenium getSelenium()
     {
-        return ThreadSafeSeleniumSession.getSelenium();
+        return ThreadSafeSeleniumSession.getSession().getSelenium();
     }
 
     /**
@@ -126,7 +126,7 @@
     public void close()
         throws Exception
     {
-        ThreadSafeSeleniumSession.stop();
+        ThreadSafeSeleniumSession.getSession().stop();
     }
 
     // *******************************************************

Added: continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/parent/SeleniumSession.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/parent/SeleniumSession.java?rev=794897&view=auto
==============================================================================
--- continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/parent/SeleniumSession.java (added)
+++ continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/parent/SeleniumSession.java Thu Jul 16 22:40:21 2009
@@ -0,0 +1,143 @@
+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;
+
+/**
+ * Selenium configuration.
+ * 
+ * @author Carlos Sanchez <a href="mailto:carlos@apache.org">
+ */
+public class SeleniumSession
+{
+    private Selenium selenium;
+
+    private Exception error;
+
+    private String host, browser, baseUrl;
+
+    private int port;
+
+    public void start( String seleniumHost, int seleniumPort, String browser, String baseUrl )
+    {
+        try
+        {
+            DefaultSelenium s = new DefaultSelenium( seleniumHost, seleniumPort, browser, baseUrl );
+            s.start();
+            this.selenium = s;
+            this.host = seleniumHost;
+            this.port = seleniumPort;
+            this.browser = browser;
+            this.baseUrl = baseUrl;
+            afterStart();
+        }
+        catch ( RuntimeException e )
+        {
+            error = e;
+            throw e;
+        }
+    }
+
+    private void afterStart()
+    {
+        AbstractSeleniumTest.baseUrl = getBaseUrl();
+        SetupContinuum setup = new SetupContinuum();
+        try
+        {
+            setup.initializeContinuumIfNeeded();
+        }
+        catch ( Exception e )
+        {
+            throw new RuntimeException( e );
+        }
+    }
+
+    public void stop()
+    {
+        if ( getSelenium() != null )
+        {
+            getSelenium().stop();
+        }
+        clear();
+    }
+
+    private void clear()
+    {
+        selenium = null;
+        error = null;
+        host = null;
+        port = 0;
+        browser = null;
+        baseUrl = null;
+    }
+
+    public boolean isStarted()
+    {
+        return selenium != null;
+    }
+
+    public boolean isInError()
+    {
+        return error != null;
+    }
+
+    public Selenium getSelenium()
+    {
+        Selenium s = selenium;
+        if ( s != null )
+        {
+            return s;
+        }
+        else
+        {
+            throw new RuntimeException( "Selenium session has not been started." );
+        }
+    }
+
+    public String getHost()
+    {
+        return host;
+    }
+
+    public String getBrowser()
+    {
+        return browser;
+    }
+
+    public String getBaseUrl()
+    {
+        return baseUrl;
+    }
+
+    public int getPort()
+    {
+        return port;
+    }
+
+    public String configurationString()
+    {
+        return "[" + getHost() + ", " + getPort() + ", " + getBaseUrl() + ", " + getBrowser() + "]";
+    }
+
+}

Propchange: continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/parent/SeleniumSession.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/parent/SeleniumSession.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/parent/SeleniumSession.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 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=794897&r1=794896&r2=794897&view=diff
==============================================================================
--- continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/parent/ThreadSafeSeleniumSession.java (original)
+++ continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/parent/ThreadSafeSeleniumSession.java Thu Jul 16 22:40:21 2009
@@ -19,11 +19,6 @@
  * 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.
  * 
@@ -31,126 +26,17 @@
  */
 public class ThreadSafeSeleniumSession
 {
-    private static ThreadLocal<ThreadSafeSeleniumSession> instance = new ThreadLocal<ThreadSafeSeleniumSession>();
-
-    private Selenium selenium;
-
-    private Exception error;
+    private static ThreadLocal<SeleniumSession> instance = new ThreadLocal<SeleniumSession>();
 
-    private String host, browser, baseUrl;
-
-    private int port;
-
-    private static ThreadSafeSeleniumSession getInstance()
+    public static SeleniumSession getSession()
     {
-        ThreadSafeSeleniumSession session = instance.get();
+        SeleniumSession session = instance.get();
         if ( session == null )
         {
-            session = new ThreadSafeSeleniumSession();
+            session = new SeleniumSession();
             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.initializeContinuumIfNeeded();
-        }
-        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() + "]";
-    }
-
 }