Programming Your Test
Now we’ll illustrate how to program your own tests using examples
in each of the supported programming languages. There are essentially two
tasks:
- Generate
your script into a programming language from Selenium-IDE, optionally
modifying the result.
- Write
a very simple main program that executes the generated code.
Optionally, you can adopt a test engine platform like JUnit or
TestNG for Java, or NUnit for .NET if you are using one of those languages.
Here, we show language-specific examples. The language-specific
APIs tend to differ from one to another, so you’ll find a separate explanation
for each.
Java
For Java, people use either JUnit or TestNG as the test engine.
Some development environments like Eclipse have direct support for these via
plug-ins. This makes it even easier. Teaching JUnit or TestNG is beyond the
scope of this document however materials may be found online and there are
publications available. If you are already a “java-shop” chances are your
developers will already have some experience with one of these test frameworks.
You will probably want to rename the test class from “NewTest” to
something of your own choosing. Also, you will need to change the browser-open
parameters in the statement:
selenium = new DefaultSelenium("localhost", 4444, "*iehta",
"http://www.google.com/");
The Selenium-IDE generated code will look like this. This example
has comments added manually for additional clarity.
package com.example.tests;
// We specify the
package of our tests
import com.thoughtworks.selenium.*;
// This is the
driver's import. You'll use this for instantiating a
// browser and making
it do what you need.
import java.util.regex.Pattern;
// Selenium-IDE add
the Pattern module because it's sometimes used for
// regex validations.
You can remove the module if it's not used in your
// script.
public class NewTest extends SeleneseTestCase {
// We create our
Selenium test case
public void setUp() throws Exception {
setUp("http://www.google.com/", "*firefox");
// We instantiate and
start the browser
}
public void testNew() throws Exception {
selenium.open("/");
selenium.type("q", "selenium
rc");
selenium.click("btnG");
selenium.waitForPageToLoad("30000");
assertTrue(selenium.isTextPresent("Results * for
selenium rc"));
// These are the real
test steps
}
}
C#
The .NET Client Driver works with Microsoft.NET. It can be used
with any .NET testing framework like NUnit or the Visual Studio 2005 Team
System.
Selenium-IDE assumes you will use NUnit as your testing framework.
You can see this in the generated code below. It includes the using statement
for NUnit along with corresponding NUnit attributes identifying the role for
each member function of the test class.
You will probably have to rename the test class from “NewTest” to
something of your own choosing. Also, you will need to change the browser-open
parameters in the statement:
selenium = new DefaultSelenium("localhost", 4444, "*iehta",
"http://www.google.com/");
The generated code will look similar to this.
You can allow NUnit to manage the execution of your tests. Or
alternatively, you can write a simple main() program that instantiates the test
object and runs each of the three methods, SetupTest(), TheNewTest(), and
TeardownTest() in turn.
Python
Pyunit is the test framework to use for Python.
Ruby
Selenium-IDE generates reasonable Ruby, but requires the old
Selenium gem. This is a problem because the official Ruby driver for Selenium
is the Selenium-Client gem, not the old Selenium gem. In fact, the Selenium gem
is no longer even under active development.
Therefore, it is advisable to update any Ruby scripts generated by
the IDE as follows:
1. On line 1, change require "selenium" to require "selenium/client"
2. On line 11, change Selenium::SeleniumDriver.new to Selenium::Client::Driver.new
You probably also want to change the class name to something more
informative than “Untitled,” and change the test method’s name to something
other than “test_untitled.”
Here is a simple example created by modifying the Ruby code
generated by Selenium IDE, as described above.
Perl, PHP
The members of the documentation team have not used Selenium RC
with Perl or PHP. If you are using Selenium RC with either of these two
languages please contact the Documentation Team (see the chapter on
contributing). We would love to include some examples from you and your
experiences, to support Perl and PHP users.
Learning the API
The Selenium RC API uses naming conventions that, assuming you
understand Selenese, much of the interface will be self-explanatory. Here,
however, we explain the most critical and possibly less obvious aspects.
Starting the Browser
setUp("http://www.google.com/", "*firefox");
Each of these examples opens the browser and represents that
browser by assigning a “browser instance” to a program variable. This program
variable is then used to call methods from the browser. These methods execute
the Selenium commands, i.e. like open or type or
the verify commands.
The parameters required when creating the browser instance are:
host
Specifies the IP address of
the computer where the server is located. Usually, this is the same machine as
where the client is running, so in this case localhost is
passed. In some clients this is an optional parameter.
port
Specifies the TCP/IP socket
where the server is listening waiting for the client to establish a connection.
This also is optional in some client drivers.
browser
The browser in which you
want to run the tests. This is a required parameter.
url
The base url of the
application under test. This is required by all the client libs and is integral
information for starting up the browser-proxy-AUT communication.
Note that some of the client libraries require
the browser to be started explicitly by calling itsstart() method.
Running Commands
Once you have the browser initialized and
assigned to a variable (generally named “selenium”) you can make it run
Selenese commands by calling the respective methods from the browser variable.
For example, to call the type method of the selenium object:
selenium.type(“field-id”,”string
to type”)
In the background the browser will actually
perform a type operation, essentially identical to a user
typing input into the browser, by using the locator and the string you
specified during the method call.
Reporting Results
Selenium RC does not have its own mechanism for
reporting results. Rather, it allows you to build your reporting customized to
your needs using features of your chosen programming language. That’s great,
but what if you simply want something quick that’s already done for you? Often
an existing library or test framework can meet your needs faster than
developing your own test reporting code.
Test Framework Reporting
Tools
Test frameworks are available for many
programming languages. These, along with their primary function of providing a
flexible test engine for executing your tests, include library code for
reporting results. For example, Java has two commonly used test frameworks,
JUnit and TestNG. .NET also has its own, NUnit.
We won’t teach the frameworks themselves here;
that’s beyond the scope of this user guide. We will simply introduce the
framework features that relate to Selenium along with some techniques you can
apply. There are good books available on these test frameworks however along
with information on the internet.
Test Report Libraries
Also available are third-party libraries
specifically created for reporting test results in your chosen programming
language. These often support a variety of formats such as HTML or PDF.
What’s The Best
Approach?
Most people new to the testing frameworks will
begin with the framework’s built-in reporting features. From there most will
examine any available libraries as that’s less time consuming than developing
your own. As you begin to use Selenium no doubt you will start putting in your
own “print statements” for reporting progress. That may gradually lead to you
developing your own reporting, possibly in parallel to using a library or test
framework. Regardless, after the initial, but short, learning curve you will
naturally develop what works best for your own situation.
Test Reporting Examples
To illustrate, we’ll direct you to some specific
tools in some of the other languages supported by Selenium. The ones listed
here are commonly used and have been used extensively (and therefore
recommended) by the authors of this guide.
Test Reports in Java
·
If Selenium Test cases are developed using JUnit then JUnit Report
can be used to generate test reports. Refer to JUnit Report for specifics.
·
If Selenium Test cases are developed using TestNG then no external
task is required to generate test reports. The TestNG framework generates an
HTML report which list details of tests. See TestNG Report for more.
·
ReportNG is a HTML reporting plug-in for the TestNG framework. It
is intended as a replacement for the default TestNG HTML report. ReportNG
provides a simple, colour-coded view of the test results. See ReportNG for
more.
·
Also, for a very nice summary report try using TestNG-xslt. A
TestNG-xslt Report looks like this.
No comments:
Post a Comment