My favorites | Sign in
Project Home Downloads Wiki Issues Source
Search
for
TelluriumCallForParticipation  
Tellurium Calls for Open Source Contributors.
Phase-Support, Featured
Updated Apr 16, 2010 by John.Jian.Fang@gmail.com

What is Tellurium

The Tellurium Automated Testing Framework (Tellurium) is an automated testing framework for web applications. Tellurium grew up from the Selenium framework, but with a different testing concept. Starting from Tellurium 0.7.0, Tellurium added Tellurium Engine to replace the Selenium Core to better support Tellurium.

Why Tellurium is Novel

For most existing web testing frameworks like Selenium, they mainly focus on individual UI elements as follows.

For example:

   selenium.click("//div[3]/input[@value='Create']");

For Tellurium, we treated the whole UI elements as a widget and we call it a UI module.

We define the UI module as follows.

    ui.Form(uid: "Form", clocator: [tag: "form"]){
        Div(uid: "User", clocator: [:]){
            Selector(uid: "Sex", clocator: [:])
            InputBox(uid: "Input", clocator: [tag: "input", type: "text", name: "j_username"])
        }
        Container(uid: "Finish", clocator: [tag: "tr"]){
            SubmitButton(uid: "Submit", clocator: [tag: "input", type: "submit", value: "Login", name: "submit"])
        }
    }

Advantages

If we think Selenium as the "C" language, Tellurium is like the "C++" language, which uses a different testing concept. There are couple advantages to describe the UI elements as a UI module.

Expressive

Expressive is obvious. For example, you can see clearly what the UI you are testing against. For the test code, you have DSL style test code such as:

   type "Form.User.Input", "John Fang"

Robust to Changes

Test robust is always a big issue for Selenium. To solve this problem is one of the main motivations that Tellurium was created for. Tellurium uses UI attributes to describe UI instead of fixed locators. If we change the attributes, new runtime locators will be generated by the framework so that Tellurium can self-adapt to UI changes to some degree. The Santa algorithm in Tellurium new engine further improves the test robust by using UI partial matching.

Represent Dynamic Web Content Easily

The Tellurium UI templates are used to represent dynamic web content very easily. For example, Tellurium issue search result widget can be easily represented as follows.

    ui.Table(uid: "issueResult", clocator: [id: "resultstable", class: "results"], group: "true") {
      //Define the header elements
      UrlLink(uid: "{header: any} as ID", clocator: [text: "*ID"])
      UrlLink(uid: "{header: any} as Type", clocator: [text: "*Type"])
      UrlLink(uid: "{header: any} as Status", clocator: [text: "*Status"])
      UrlLink(uid: "{header: any} as Priority", clocator: [text: "*Priority"])
      UrlLink(uid: "{header: any} as Milestone", clocator: [text: "*Milestone"])
      UrlLink(uid: "{header: any} as Owner", clocator: [text: "*Owner"])
      UrlLink(uid: "{header: any} as Summary", clocator: [text: "*Summary + Labels"])
      UrlLink(uid: "{header: any} as Extra", clocator: [text: "*..."])

      //Define table body elements
      //Column "Extra" are TextBoxs
      TextBox(uid: "{row: all, column -> Extra}", clocator: [:])
      //For the rest, they are UrlLinks
      UrlLink(uid: "{row: all, column: all}", clocator: [:])
    }

Easy to Maintain

Tellurium emphasizes the decoupling of UI from test code. The structured test code makes Tellurium easier to maintain and refactor.

Tellurium Project

We like to introduce the current status of the Tellurium project.

History

Tellurium was started in June 2007 as an internal project and became an open source project on Google Code in June 2008. We release on a regular basis and the latest release 0.7.0 will be out next month.

Team and Community

Tellurium Team consists of 4-5 active team members and couple more contributors. We have Tellurium user group and Tellurium developer group. Latest update information are available on http://twitter.com/TelluriumSource twitter. Tellurium also provides a community repository on GitHub so that anyone can fork Tellurium and contribute back to us. Tellurium wiki documents will be migrated to TelluriumSource.org, a domain owned by us.

Tellurium Sub-projects

Tellurium began as a small core project and quickly generated multiple sub-projects including: UDL, Core, Engine, Widget extensions, Maven Archetypes, and Trump sub-projects as shown in the following diagram.

  • Tellurium UDL: Tellurium UID Description Language (UDL) Parser.
  • Tellurium Engine: Based on Selenium Core with UI module, CSS selector, command bundle, and exception hierarchy support.
  • Tellurium Core: UI module, APIs, DSL, Object to Runtime Locator mapping (OLM), and test support.
  • Tellurium Extensions: Dojo Javascript widgets and ExtJS Javascript widgets.
  • Tellurium UI Module Plugin (Trump): A Firefox plugin to automatically generate the UI module after users select the UI elements from the web under testing.
  • Tellurium Maven Archetypes: Maven archetypes to generate skeleton Tellurium JUnit and Tellurium TestNG projects using one Maven command.
  • Tellurium Reference Projects: Use Tellurium project site as examples to illustrate how to use different features in Tellurium and how to create Tellurium test cases.

How Tellurium Works

Tellurium architecture is shown in the following diagram.

There are two major parts, i.e., the Tellurium Core, which does Java/Groovy object to runtime locator mapping, event handling, and command bundling. The Tellurium Engine is embedded inside the Selenium server and is a test driving engine for Tellurium. The two are connected by Selenium RC.

Tellurium works in two mode. The first one is to work as a wrap of the Selenium framework.

That is to say, Tellurium core generates the runtime locator based on the attributes in a UI module and then pass the selenium calls to Selenium core with Tellurium extensions.

Tellurium is evolving to its own test driving Engine and the work mode is different as shown in the following sequence diagram.

The Tellurium Core will convert the UI module into a JSON representation and pass it to Tellurium Engine for the first time when the UI module is used. The Tellurium Engine uses the Santa algorithm to locate the whole UI module and put it into a cache. For the sequent calls, the cached UI module will be used instead of locating them again. Another new features in Tellurium 0.7.0 is the Macro Command, which combine multiple commands into one batch and then send them to Tellurium engine in one call to reduce the round trip latency. For more new features in 0.7.0, please read What's New in Tellurium 0.7.0.

Call for Participation

Due to limited available resources in our Tellurium team, we need more people to join Tellurium community and more open source contributors to contribute to Tellurium to make it solid and a popular framework.

Why Tellurium is Worthy for Your Contributions

First, Tellurium tackles the right problem for web automated testing, i.e., improve test robust and expressive and make tests easy to write and maintenance. Many users will be benefited by capabilities the framework provides.

Second, Tellurium uses a set of very hot techniques such as Groovy for DSL, jQuery for Engine, Antlr 3 for UDL parser, and Maven for build.

Third, Tellurium provides many interesting future directions as discussed in the next subsection.

Tellurium Future Directions

There are couple very interesting future directions:

  • Use jQuery to re-implement Selenium APIs. 0.7.0 has implemented a set of Selenium APIs, but there are still a lot of remaining work.
  • Algorithm design, for example, automatically build UI module from HTML source. Reverse engineering to build UI templates from HTML source is very challenging.
  • Tellurium Widgets, create reusable Dojo, ExtJS widgets so that other people can reuse the widgets simply by including the jar files to their projects.
  • Tellurium UID Description Language improvement.
  • Improve Trump Firefox Plugin, for example, generate test script as well as UI modules so that Tellurium is not only good for developers, but also QA people.
  • Add Behavior Driven Testing support
  • Add testing flow support. Many unit testing and functional testing frameworks do not really have the testing flow/stage concept.
  • Tellurium as a cloud testing tool.
  • Tellurium as a web security testing tool.
  • IDE and other plugins.
  • Improve code quality.

How can You Help US

Tellurium is still young and he needs your love, tender, and care. We welcome contributions in many different ways, for example,

  1. Try out Tellurium
  2. Use Tellurium in your project and report bugs
  3. Ask questions and answer other users' questions
  4. Promote Tellurium and post your experience on Tellurium
  5. Fix bugs for Tellurium
  6. Improve Tellurium documents
  7. Bring in new ideas and suggestions

As an open source contributor, you can contribute to Tellurium in two ways. First, you can fork Tellurium repository on GitHub and contribute back your bug fixes and new features. Please also join Tellurium developer group to discussion about any code changes to Tellurium.

Alternatively, you can join Tellurium team and work as a core committer. To be a core committer, you must be active and have time to contribute to Tellurium on a regular basis. If you are interested, please contact Tellurium team (telluriumsource@gmail.com).

Resources


Sign in to add a comment
Powered by Google Project Hosting