Test Authoring Made Easy

Create entire suites of tests from a single simple table.

Instead of building tests one at a time, fill out a simple table and let tame build the test cases by forming combinations of inputs and environment conditions then matching those inputs to expected results.

1. Select a function to test

While we might analyze and design top-down, it makes most sense to build and test bottom-up. So we’ll start with a single login page.

Later, of course, we'll combine this single page with others to create a more complete sequence for a whole activity.

2. Partition the inputs

Now what are some different kinds of inputs that will lead to different results?

Partition the two inputs into distinct choices where each choice represents a different kind of value that will lead to a different result.

Note that without any defined results (checks), tame generates all combinations of inputs. For two inputs that’s probably not so bad, but a function with many inputs could lead to thousands of tests—so-called “combinatorial explosion.”

3. Identify the results and triggering events

What are some different expected results? List the results across the top.

Then mark which choices lead to which results. We call this, "X marks the spot."

Results are triggered by events on the page, such as clicking a button. Define the events and mark the results they trigger.

Once you have inputs and results you're ready to start generating test cases.

4. Consider environment conditions

Are there certain properties of the environment or the objects within it that contribute to different outcomes? For example, it's not just enough to have a user ID in the form of an email address: it must also be the user ID of a real known user.

Likewise, the it's not enough to have a nonblank password: it has to be the right password for the user.

While we could have just made these into additional choices of the inputs, defining these distinct environment conditions also signals what needs to be true and what needs to be set up before the tests run.

5. Define actual values

Real scenarios are specific. It's not enough just to say, "enter a good email address that names a real user." Specify an actual value.

Define values based upon input and environment condition choices.

In many cases it's also useful to define a default value for each input.

6. Write detailed directions

To make the tests even more readable, write detailed directions for each input, event, and result. By doing this you can create a test protocol that's as readable as something written by hand.

The result is a series of scenarios produced quickly and easily, ready for review and testing.

Bonus! You can generate Cucumber (Gherkin) feature files.
Get the Gherkin

7. Combine steps into complete activities

Start by testing individual functions such as the Login page. Then combine these single functions into sequences.

Bonus! You can generate Cucumber (Gherkin) feature files.
Get the Gherkin