| Path: | README |
| Last Update: | Thu Dec 29 13:48:43 CST 2005 |
Rubinium is a tool that makes writing Selenium tests easier. Here’s a quick comparison:
A Selenium test:
<html><head><title>HelloWorld</title><head>
<body>
<table border="1">
<tr><td colspan="3">HelloWorld Test</td></tr>
<tr><td>open</td><td>/index.php</td><td> </td></tr>
<tr><td>assertTitle</td><td>Hello World</td><td> </td></tr>
<tr><td>assertLocation</td><td>/index.php</td><td> </td></tr>
<tr><td>assertTextPresent</td><td>Hello World</td><td> </td></tr>
</table>
</body>
</html>
And here’s the corresponding Rubinium test:
class HelloWorld < Rubinium::TestBase
open "/index.php"
assertTitle "Hello World"
assertLocation "/index.php"
assertTextPresent "Hello World"
end
The added immediate benefit is that the Rubinium test can be executed and if the actions/assertions aren’t valid the test will raise an exception. If the actions/assertions are valid, the test will exit without generating any output.
The latest version of Rubinium can be found at
Download and install rubinium with the following.
gem install --remote rubinium
Here’s a simple example that shows a mixture of Selenium and ruby:
require 'rubygems'
require_gem 'rubinium'
class SiteLive < Rubinium::TestBase
HOST = "http://localhost:8080"
MAIN_PAGE = "/index.html"
open HOST
assertLocation MAIN_PAGE
end
Notice that the host and main page are represented as ruby constants and the constants are used in the test, rather than storing the value directly in the test. This helps keep your tests DRY.
Here’s the Selenium test that gets generated:
<html><head><title>SiteLive</title></head>
<body>
<table border="1">
<tbody>
<tr><td colspan="3">SiteLive Test</td></tr>
<tr><td>open</td><td>http://localhost:8080</td><td> </td></tr>
<tr><td>assertLocation</td><td>/index.html</td><td> </td></tr>
</tbody>
</table>
</body>
</html>
Test cases get aggregated into test suites. Here’s a simple test suite that contains the test case from above:
require 'rubygems'
require_gem 'rubinium'
Rubinium::TestSuite.new do |suite|
suite.name = "MainSuite"
suite.filename = "main-suite.html"
suite.basedir = File.dirname(__FILE__)
suite << SiteLive
end.generate
The easiest way to create a test suite is to use the (probably familiar) block syntax. Individual tests are appended to the suite using the << operator. After the suite has been initialized, you should invoke the generate method to generate the actual Selenium tests.
A test suite has three attributes, all optional: name, filename, and basedir. The first two allow you to set the name that will be displayed in the Selenium test and the filename of the generated Selenium suite. The basedir attribute is the directory where the files will be generated. While you can set the basedir directly in the suite, a more common way of setting it is by passing it as a command line parameter. E.g.,
ruby rts_main.rb tests/generated-tests
This usage is particularly amenable to Rake tasks:
TEST_PATH = "test/tests"
GENERATED_TEST_PATH = "test/generated-tests"
ACCEPTANCE_TESTS = %w(
rts_main.rb
).map {|test| File.join(TEST_PATH, test)}
desc "Generate selenium tests from rubinium tests"
task :rubinium => [:clean, :environment] do
ACCEPTANCE_TESTS.each do |test|
ruby "#{test} #{GENERATED_TEST_PATH}"
end
end
NB: If basedir is supplied both as a command line parameter and as an explicit attribute in the suite, the command line parameter will be ignored.
More examples of Rubinium tests and suites are provided in the doc/examples directory.
Rubinium is available under an MIT-style license.
Copyright © 2005, 2006 Alex Garrett
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
The Rubinium homepage is rubinium.thinkpig.org. You can find the Rubinium RubyForge page at rubyforge.org/projects/rubinium.
Feel free to submit commits or feature requests. If you send a patch, remember to update the corresponding unit tests. Patches are much less likely to be adopted if I have to write the tests.
For other information, feel free to contact ljagged@thinkpig.org.