Using Cucumber and Perl to define test cases in natural language

Expandable Scenarios

Using the step definitions from Listing 3, all of the previously defined scenarios work perfectly – as you can see from Figure 4. Because Cucumber separates the feature description from the step definition, the latter is also suitable for other scenarios. To retrieve additional securities, besides the price of Facebook shares for the test, Listing 4 introduces another feature file, also located in the features directory.

Listing 4



Figure 4: Now – after completing the step definitions – all the steps in the scenario run successfully.

The listing shows how the rows of an ASCII table written with pipe symbols following the Examples: keyword each define a new test case. Thus, the Facebook share price must be greater than US$ 10 and the Amazon security greater than US$ 400. A glance at the stock market pages shows that the Internet retailer just missed this target when this issue went to press with a price of around US$  397. The test case is obviously incorrectly defined; a more generous margin – for example, "greater than 1" – would be useful to increase the likelihood that the script still works in a couple of years.

In Figure 5, the failed scenario is highlighted in red. As you can tell from the grayed subsequent scenario, cucumber stops testing a feature if a single part fails. If the reviewer corrects the expected Amazon price from US$  400 to 300, all the tests run perfectly, as the green output in Figure 6 reveals.

Figure 5: One scenario fails and stops the execution of the feature tests prematurely.
Figure 6: Happy ending with Cucumber: All tests are now error-free.

When defining tables, the CPAN module, incidentally, differs from the original Cucumber tool – probably unintentionally: cucumber rejects Examples: in a Scenario: and only accepts them in a section that starts with Scenario Outline:.


You can install the Cucumber CPAN module presented here by typing:

cpan Test::BDD::Cucumber

Additionally, Test::BDD::Cucumber::Manual::Tutorial provides a short tutorial. The module runs independently of the original code by the Cucumber project, which is available as a Ruby gem. To load the latter onto a system with an installed Ruby interpreter, including the ruby-dev package installed, just run two commands:

gem install gherkin
gem install cucumber

In contrast to the Perl module, the original Cucumber Code also allows describing the features in languages other than English. Typing cucumber --language reveals support for more than 40 languages.

As stated on the website, the Cucumber advantage is not primarily in writing test cases in a natural language. Instead, it opens the opportunity for developers and product management to collaborate on the feature document and test the results at the same time. The Cucumber framework promotes a dialog between the two parties during development, helping avoid expensive product defects caused by misunderstandings.


  1. Cucumber:
  2. Ian Dees, Matt Wynne, and Aslak Hellesoy, The Cucumber Book: Behaviour-Driven Development for Testers and Developers. Pragmatic Programmers, 2012.
  3. Listings for this article:
  4. Test::BDD::Cucumber:

The Author

Mike Schilli works as a software engineer with Yahoo! in Sunnyvale, California. He can be contacted at Mike's homepage can be found at

Buy this article as PDF

Express-Checkout as PDF
Price $2.95
(incl. VAT)

Buy Linux Magazine

Get it on Google Play

US / Canada

Get it on Google Play

UK / Australia

Related content

  • Perl: Regression Tests

    With a test suite, you can fix bugs and add new features without ruining the existing codebase.

  • Perl: Vim

    The Vim editor supports Perl plugins that let users manipulate the text they have just edited. Complex functions can be developed far faster than with Vim’s integrated scripting language.

  • Perl: Personal Finances

    A helpful Perl script gives you an immediate overview of your financial status, adding the balances of multiple accounts and share depots. It even allows users to add their own plugins.

  • Perl: Yahoo API Scripting

    Following in the footsteps of Google, Amazon, and eBay, Yahoo recently introduced a web service API to its search engine. In this month’s column, we look at three Perl scripts that can help you correct typos, view other people’s vacation pictures, and track those long lost pals from school.

  • Perl: Test-Driven Development

    Test-driven development with a full-coverage regression test suite as a useful side effect promises code with fewer errors. Mike "Perlmeister" Schilli enters the same path of agility and encounters a really useful new CPAN module.

comments powered by Disqus

Direct Download

Read full article as PDF:

Price $2.95