[Checkins] SVN: zc.selenium/trunk/src/zc/selenium/selenium.txt Added missing documentation based on my recent fun trying to make a

Jim Fulton jim at zope.com
Fri Mar 28 17:57:43 EDT 2008


Log message for revision 85005:
  Added missing documentation based on my recent fun trying to make a
  selenium test runner work.
  

Changed:
  A   zc.selenium/trunk/src/zc/selenium/selenium.txt

-=-
Added: zc.selenium/trunk/src/zc/selenium/selenium.txt
===================================================================
--- zc.selenium/trunk/src/zc/selenium/selenium.txt	                        (rev 0)
+++ zc.selenium/trunk/src/zc/selenium/selenium.txt	2008-03-28 21:57:43 UTC (rev 85005)
@@ -0,0 +1,135 @@
+Selenium test runner for Zope 3
+===============================
+
+The selenium test runner makes it a bit easier to run selenium tests
+by automatically running a Zope server and causing a browser to load
+and run the test.
+
+That's the good news. :)  There are, unfortunately, a number of
+steps/tricks required to make this work.
+
+Zope 3 configuration
+--------------------
+
+You need to create a Zope server that uses the zc.selenium package and
+a demo-storage database.  Here's an example buildout::
+
+  [buildout]
+  develop = .
+  parts = test py demo selenium
+
+  [test]
+  recipe = zc.recipe.testrunner
+  eggs = zc.extjs [test]
+
+  [application]
+  recipe = zc.zope3recipes:application
+  servers = zserver
+  eggs =
+       ${test:eggs}
+       zope.app.server
+       zc.selenium
+  site.zcml = <include package="zc.extjs" file="selenium.zcml" />
+
+  [demo]
+  recipe = zc.zope3recipes:instance
+  application = application
+  zope.conf =
+    devmode on 
+    <zodb>
+      <demostorage>
+      </demostorage>
+    </zodb>
+    <server http0>
+      address 39857
+      type WSGI-HTTP
+    </server>
+
+  [selenium]
+  recipe = zc.recipe.egg:scripts
+  eggs = ${application:eggs}
+  script = selenium
+  entry-points = selenium=zc.selenium.selenium:main
+  initialization =
+    sys.argv[1:1] = ['${demo:run-directory}/zope.conf', '-r']
+
+This is for a demo application for a package named zc.extjs.  Note
+that we have an application definition that uses zope.app.server and
+zc.selenium. The selenium.zcml used in this example look like this::
+
+  <configure xmlns="http://namespaces.zope.org/zope" package="zc.extjs">
+
+    <include file="tests.zcml" />
+
+    <include package="zope.app.server" />
+    <include package="zc.selenium" />
+
+    <adapter 
+       factory="zc.extjs.selenium.SeleniumTests" 
+       name="zc.extjs.tests.SeleniumTests.html"
+       permission="zope.Public"
+       />
+
+  </configure>
+
+Note that it included zope.app.server and zc.selenium.  This example
+also shows an adapter  registration for a Python-based test. Note that
+the test runner currently requires that the zope.server server is used!
+
+The buildout defines an instance with the demo part.  Two things to
+note about this:
+
+1. A demo storage is used.  This is important because it guarentees we
+   have the same baseline for each test.
+
+2. We have the name "http0" for the server.  This name is used by the
+   startup program to specify the port to use when the server is
+   started to run the tests.  Without this, you'll an odd error when
+   you try to run the tests.
+
+The use of http0 is not ideal.  In the future, when we have time,
+we'll want to do something better.
+
+The selenium script
+-------------------
+
+The selenium script needs to be defined.  It runs the server as a
+thread, rather than as a sub-process.  For this reason, it needs to
+have the same packages as the application.  In the buildout above,
+we've defined the selenium script using the zc.recipe.egg:scripts
+recipe.  We specified the same eggs as the application part.  We also
+supply the demo-instance configuration file as the implicit first
+argument to the script and the "-r" as the second argument.
+
+Once the script is installed, just run it to run the test.
+
+You can run the script with the -h option to find out about other
+options. Note, however, that if you bake the -r option into the
+script, as I have, you won't be able to override it with the -p
+option. (This is possibly a bug.)
+
+Oddities
+--------
+
+The selenium script automatically selects the browser to use. If you're
+lucky, this will turn out well. :)  You can control the browser
+used. The most reliable way to do this is with the BROWSER environment
+variable::
+
+   BROWSER=firefox bin/selenium
+
+There's also a -b option to the script that could theoretically work.
+This to requires some luck as it depends on Python sniffing out
+available browsers correctly.  I recommend using the environment
+variable.
+
+
+Future work
+-----------
+
+I think this could and should be cleaned up a bit in the future:
+
+- Have the test runner be a control script that simply starts the
+  instance as a sub-process, rather than a thread.
+
+- Find a better way to control the port used.  


Property changes on: zc.selenium/trunk/src/zc/selenium/selenium.txt
___________________________________________________________________
Name: svn:eol-style
   + native



More information about the Checkins mailing list