Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
Test::Timer(3)	      User Contributed Perl Documentation	Test::Timer(3)

NAME
       Test::Timer - test module to test/assert	response times

VERSION
       The documentation describes version 2.10	of Test::Timer

FEATURES
       o   Test	subroutines to implement unit-tests to time that your code
	   executes before a specified threshold

       o   Test	subroutines to implement unit-tests to time that your code
	   execution exceeds a specified threshold

       o   Test	subroutine to implement	unit-tests to time that	your code
	   executes within a specified time frame

       o   Supports measurements in seconds

       o   Implements configurable alarm signal	handler	to make	sure that your
	   tests do not	execute	forever

SYNOPSIS
	   use Test::Timer;

	   time_ok( sub	{ doYourStuffButBeQuickAboutIt(); }, 1,	'threshold of one second');

	   time_atmost(	sub { doYourStuffYouHave10Seconds(); },	10, 'threshold of 10 seconds');

	   time_between( sub { doYourStuffYouHave5-10Seconds();	}, 5, 10,
	       'lower threshold	of 5 seconds and upper threshold of 10 seconds');

	   # Will succeed
	   time_nok( sub { sleep(2); },	1, 'threshold of one second');

	   time_atleast( sub { sleep(2); }, 2, 'threshold of one second');

	   # Will fail after 5 (threshold) + 2 seconds (default	alarm)
	   time_ok( sub	{ while(1) { sleep(1); } }, 5, 'threshold of one second');

	   $test::Timer::alarm = 6 #default 2 seconds

	   # Will fail after 5 (threshold) + 6 seconds (specified alarm)
	   time_ok( sub	{ while(1) { sleep(1); } }, 5, 'threshold of one second');

DESCRIPTION
       Test::Timer implements a	set of test primitives to test and assert test
       times from bodies of code.

       The key features	are subroutines	to assert or test the following:

       o   that	a given	piece of code does not exceed a	specified time limit

       o   that	a given	piece of code takes longer than	a specified time limit
	   and does not	exceed another

EXPORT
       Test::Timer exports:

       o   time_ok

       o   time_nok

       o   time_atleast

       o   time_atmost

       o   time_between

SUBROUTINES/METHODS
   time_ok
       Takes the following parameters:

       o   a reference to a block of code (anonymous sub)

       o   a threshold specified as a integer indicating a number of seconds

       o   a string specifying a test name

	   time_nok( sub { sleep(2); },	1, 'threshold of one second');

       If the execution	of the code exceeds the	threshold specified the	test
       fail with the following diagnostic message

	   Test	ran 2 seconds and exceeded specified threshold of 1 seconds

   time_nok
       The is the inverted variant of time_ok, it passes if the	threshold is
       exceeded	and fails if the benchmark of the code is within the specified
       timing threshold.

       The API is the same as for time_ok.

	   time_nok( sub { sleep(1); },	2, 'threshold of two seconds');

       If the execution	of the code executes below the threshold specified the
       test fail with the following diagnostic message

	   Test	ran 1 seconds and did not exceed specified threshold of	2 seconds

   time_atmost
       This is syntactic sugar for time_ok

	   time_atmost(	sub { doYourStuffButBeQuickAboutIt(); }, 1, 'threshold of one second');

       If the execution	of the code exceeds the	threshold specified the	test
       fail with the following diagnostic message

	   Test	ran N seconds and exceeded specified threshold of 1 seconds

       N will be the actual measured execution time of the specified code

   time_atleast
	   time_atleast( sub { doYourStuffAndTakeYourTimeAboutIt(); }, 1, 'threshold of	1 second');

       The test	succeeds if the	code takes at least the	number of seconds
       specified by the	timing threshold.

       If the code executes faster, the	test fails with	the following
       diagnostic message

	   Test	ran 1 seconds and did not exceed specified threshold of	2 seconds

       Please be aware that Test::Timer, breaks	the execution with an alarm
       specified to trigger after the specified	threshold + 2 seconds
       (default), so if	you expect your	execution to run longer, set the alarm
       accordingly.

	   $Test::Timer::alarm = $my_alarm_in_seconds;

       See also	diagnostics.

   time_between
       This method is a	more extensive variant of time_atmost and time_ok, you
       can specify a lower and upper threshold,	the code has to	execute	within
       this interval in	order for the test to succeed

	   time_between( sub { sleep(2); }, 5, 10,
	       'lower threshold	of 5 seconds and upper threshold of 10 seconds');

       If the code executes faster than	the lower threshold or exceeds the
       upper threshold,	the test fails with the	following diagnostic message

	   Test	ran 2 seconds and did not execute within specified interval 5 -	10 seconds

       Or

	   Test	ran 12 seconds and did not execute within specified interval 5 - 10 seconds

PRIVATE	FUNCTIONS
   _runtest
       This is a method	to handle the result from _benchmark is	initiates the
       benchmark calling benchmark and based on	whether	it is within the
       provided	interval true (1) is returned and if not false (0).

   _benchmark
       This is the method doing	the actual benchmark, if a better method is
       located this is the place to do the handy work.

       Currently Benchmark is used. An alternative could be Devel::Timer, but
       I do not	know this module very well and Benchmark is core, so this is
       used for	now.

       The method takes	two parameters:

       o   a code block	via a code reference

       o   a threshold (the upper threshold, since this	is added to the
	   default alarm

   import
       Test::Builder required import to	do some	import hokus-pokus for the
       test methods exported from Test::Timer. Please refer to the
       documentation in	Test::Builder

DIAGNOSTICS
       All tests either	fail or	succeed, but a few exceptions are implemented,
       these are listed	below.

       o   Test	did not	exceed specified threshold, this message is diagnosis
	   for time_atleast and	time_nok tests,	which do not exceed their
	   specified threshold

       o   Test	exceeded specified threshold, this message is a	diagnostic for
	   time_atmost and time_ok, if the specified threshold is surpassed.

	   This	is the key point of the	module,	either your code is too	slow
	   and you should address this or your threshold is too	low, in	which
	   case	you can	set it a bit higher and	run the	test again.

       o   Test	did not	execute	within specified interval, this	is the
	   diagnostic from time_between, it is the diagnosis if	the execution
	   of the code is not between the specified lower and upper thresholds

       o   Insufficient	parameters, this is the	message	if a specified test is
	   not provided	with the sufficient number of parameters, consult this
	   documentation and correct accordingly

       o   Execution exceeded threshold	and timed out, the exception is	thrown
	   if the execution of tested code exceeds even	the alarm, which is
	   default 2 seconds, but can be set by	the user or is equal to	the
	   upper threshold + 2 seconds

	   The exception results in a diagnostic for the failing test. This is
	   a failsafe to avoid that code runs forever. If you get this
	   diagnose either your	code is	too slow and you should	address	this
	   or it might be error	prone. If this is not the case adjust the
	   alarm setting to suit your situation.

CONFIGURATION AND ENVIRONMENT
       This module requires no special configuration or	environment.

       Tests are sensitive and be configured using environment and
       configuration files, please see the section on test and quality.

DEPENDENCIES
       o   Carp

       o   Benchmark

       o   Error

       o   Test::Builder

       o   Test::Builder::Module

INCOMPATIBILITIES
       This module holds no known incompatibilities.

BUGS AND LIMITATIONS
       This module holds no known bugs.

       The current implementations only	use seconds and	resolutions should be
       higher, so the current implementation is	limited	to seconds as the
       highest resolution.

       On occasion failing tests with CPAN-testers have	been observed. This
       seem to be related to the test-suite being not taking into account that
       some smoke-testers do not prioritize resources for the test run and
       that additional processes/jobs are running. The test-suite have been
       adjusted	to accommodate this but	these issues might reoccur.

TEST AND QUALITY
       Coverage	report for the release described in this documentation (see
       VERSION).

	   ----------------------------	------ ------ ------ ------ ------ ------ ------
	   File				  stmt	 bran	cond	sub    pod   time  total
	   ----------------------------	------ ------ ------ ------ ------ ------ ------
	   blib/lib/Test/Timer.pm	 100.0	 95.0	66.6  100.0  100.0   99.9   98.0
	   ...Timer/TimeoutException.pm	 100.0	  n/a	 n/a  100.0  100.0    0.0  100.0
	   Total			 100.0	 95.0	66.6  100.0  100.0  100.0   98.4
	   ----------------------------	------ ------ ------ ------ ------ ------ ------

       The Test::Perl::Critic test runs	with severity 5	(gentle) for now,
       please refer to t/critic.t and t/perlcriticrc.

       Set TEST_POD to enable Test::Pod	test in	t/pod.t	and
       Test::Pod::Coverage test	in t/pod-coverage.t.

       Set TEST_CRITIC to enable Test::Perl::Critic test in t/critic.t

   CONTINUOUS INTEGRATION
       This distribution uses Travis for continuous integration	testing, the
       Travis reports are public available.

SEE ALSO
       o   Test::Benchmark

ISSUE REPORTING
       Please report any bugs or feature requests using	Github

       o   Github Issues <https://github.com/jonasbn/perl-test-timer/issues>

SUPPORT
       You can find (this) documentation for this module with the "perldoc"
       command.

	   perldoc Test::Timer

       You can also look for information at:

       o   Homepage <https://jonasbn.github.io/perl-test-timer/>

       o   MetaCPAN <https://metacpan.org/pod/Test-Timer>

       o   AnnoCPAN: Annotated CPAN documentation
	   <http://annocpan.org/dist/Test-Timer>

       o   CPAN	Ratings	<http://cpanratings.perl.org/d/Test-Timer>

DEVELOPMENT
       o   Github Repository <https://github.com/jonasbn/perl-test-timer>,
	   please see the guidelines for contributing
	   <https://github.com/jonasbn/perl-test-
	   timer/blob/master/CONTRIBUTING.md>.

AUTHOR
       o   Jonas B. Nielsen (jonasbn) "<jonasbn	at cpan.org>"

ACKNOWLEDGEMENTS
       o   Mohammad S Anwar, POD corrections PRs #23

       o   Erik	Johansen, suggestion for clearing alarm

       o   Gregor Herrmann from	the Debian Perl	Group, PR #16 fixes to
	   spelling mistakes

       o   Nigel Horne,	issue #15 suggestion for better	assertion in
	   time_atleast

       o   Nigel Horne,	issue #10/#12 suggestion for improvement to
	   diagnostics

       o   p-alik, PR #4 eliminating warnings during test

       o   Kent	Fredric, PR #7 addressing file permissions

       o   Nick	Morrott, PR #5 corrections to POD

       o   Bartosz Jakubski, reporting issue #3

       o   Gabor Szabo (GZABO),	suggestion for specification of	interval
	   thresholds even though this was obsoleted by	the later introduced
	   time_between

       o   Paul	Leonerd	Evans (PEVANS),	suggestions for	time_atleast and
	   time_atmost and the handling	of $SIG{ALRM}. Also bug	report for
	   addressing issue with Debian	packaging resulting in release 0.10

       o   brian d foy (BDFOY),	for patch to _runtest

LICENSE	AND COPYRIGHT
       Test::Timer and related modules are (C) by Jonas	B. Nielsen, (jonasbn)
       2007-2019

       Test::Timer and related modules are released under the Artistic License
       2.0

       Used distributions are under copyright of there respective authors and
       designated licenses

       Image used on website <https://jonasbn.github.io/perl-test-timer/> is
       under copyright by Veri Ivanova
       <https://unsplash.com/photos/p3Pj7jOYvnM>

perl v5.32.1			  2019-09-06			Test::Timer(3)

NAME | VERSION | FEATURES | SYNOPSIS | DESCRIPTION | EXPORT | SUBROUTINES/METHODS | PRIVATE FUNCTIONS | DIAGNOSTICS | CONFIGURATION AND ENVIRONMENT | DEPENDENCIES | INCOMPATIBILITIES | BUGS AND LIMITATIONS | TEST AND QUALITY | SEE ALSO | ISSUE REPORTING | SUPPORT | DEVELOPMENT | AUTHOR | ACKNOWLEDGEMENTS | LICENSE AND COPYRIGHT

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=Test::Timer&sektion=3&manpath=FreeBSD+13.0-RELEASE+and+Ports>

home | help