Pages

2013-10-02

prove imProveD

Instead of using a bare prove command to launch your Perl tests, I think it is really useful using

prove --state=save

that will run your tests, remembering which ones are failing, and

prove --state=failed,save

that will run only those that failed.

You can use this feature when you are writing a Perl module, but, I found another interesting use case: read above.




What you get

Follow this article instructions to get a Perl test suite that checks everything is ok in your $HOME dir. Yes, you should check everything you need to be up and running: database connections, ssh connections, software dependencies, scripts compilation,  anything you want to rely on.

When I login, I want to know that everything is ok!

Don't worry, at login only failed tests will run so you don't have to wait till all your test suite will finish.

How to setup

Requirements

A Unix account and Perl, of course.

I assume that you have the following folders in your $HOME dir


  • bin/ : contains all your scripts.
  • log/ : contains .log files, I also use to put here .err files that contains my scripts STDERR redirection.
  • t/ : contains your .t files, tests that will run every hour and at login time.

Make sure you have App::Prove installed, just type this in your prompt

$ cpan App::Prove

In your home dir

Create a .proverc file with the following content.

# see prove -H for full options list
# Run N test jobs in parallel.
-j4
# Print elapsed time after each test.
--timer
# Trap Ctrl-C and print summary on interrupt.
--trap

Add this line at the end of your .bash_profile

prove --state=failed,save

In your crontab

Add this line to your crontab

00 * * * * prove --state=save 1> /dev/null 2> log/tests.err

Create some tests


Now it's time to fill your t/ folder with tests, you can start with a simple one: t/01_compile_scripts.t, it checks that every Perl script in the bin/ folder compiles. It has the following content.

use strict;
use warnings;
use Test::More;
use Test::Compile;
all_pl_files_ok();

Of course you should install that required module.

$ cpan Test::Compile

And, yes you should add also another test: t/00_deps.t

use strict;
use warnings;
use Test::More;
use_ok($_)
  or BAIL_OUT(" missing dependency $_")
  for qw(
  Test::Compile
);
done_testing;

Here we go ... we started writing tests for every feature we add. Please don't get addicted :)

Conclusion

Every test you will add in your ~/t folder will run every hour. App::Prove remembers failed tests, using ~/.prove file, and after login you will run only failed tests, so you will know which problems are going on.

No comments:

Post a Comment