Automated testing with Travis CI

Intermediate Perl shows the basics of Perl testing. We show you how to write test programs and how to run those from the command line. That’s the language-specific stuff and within the scope of the book. You can take it further though. You can set up your code in a “continuous integration” system that runs the tests whenever you commit change (most of these trigger on a source control commit). You commit your code and grab some more coffee while your tests trigger themselves. Martin Fowler has some interesting thoughts on CI and wikipedia has a comparison matrix of CI services.

Travis CI is such a system and it allows free accounts for open source work. It’s easy to login through GitHub and turn on automated testing for one of your GitHub repositories. You add a .travis.yml file to your project to control the testing. They have instructions for a very basic Perl setup

I do a little bit more. Here’s one that I took from test-file repo, but you should check it for the latest version of whatever I’m doing.

The perl key lets me specify which things I want to test. I leave off v5.8 because I also use Devel::Cover—that doesn’t work with v5.8. You can test with the versions that make sense for you (or leave this off and test with the latest version).

I install some helpers. The install phase happens before the tests start. All of these commands run in the top directory of the repository. I use cpanm to install the dependencies (while skipping tests). I install the stuff I need to run Devel::Cover and to report its results to Coveralls to collect historical test data.

Coveralls trends for Module::Release

The script section is the testing phase. The command comes from Devel::Cover. It deletes previous data (although this should be fresh) and then runs the tests.

sudo: false

language: perl
    - "5.10"
    - "5.12"
    - "5.14"
    - "5.16"
    - "5.18"
    - "5.20"
    - "5.22"

    - git clone git:// ~/travis-perl-helpers
    - source ~/travis-perl-helpers/init --auto

    - cpanm --quiet --installdeps --notest .
    - cpanm --quiet --notest Devel::Cover
    - cpanm --quiet --notest Devel::Cover::Report::Coveralls

    - cover -delete && cover -test

    - cover -report coveralls