Skip to main content

A simple testing framework for command line applications

Project description

Cram is a functional testing framework for command line applications based on Mercurial’s unified test format.

Here’s a snippet from cram.t in Cram’s own test suite:

The $PYTHON environment variable should be set when running this
test from Python.

  $ [ -n "$PYTHON" ] || PYTHON=python
  $ if [ -n "$COVERAGE" ]; then
  >   coverage erase
  >   alias cram='coverage run -a cram.py'
  > else
  >   alias cram="$PYTHON cram.py"
  > fi

Usage:

  $ cram -h
  [Uu]sage: cram \[OPTIONS\] TESTS\.\.\.

  [Oo]ptions:
    -h, --help     show this help message and exit
    -v, --verbose  Show filenames and test status
  $ cram
  [Uu]sage: cram \[OPTIONS\] TESTS\.\.\.
  [1]

The format in a nutshell:

  • Cram tests use the .t file extension.

  • Lines beginning with two spaces, a dollar sign, and a space are run in the shell.

  • Lines beginning with two spaces, a greater than sign, and a space allow multi-line commands.

  • All other lines beginning with two spaces are considered command output.

  • Command output in the test is first matched literally with the actual output. If it doesn’t match, it’s then compiled and matched as a Perl-compatible regular expression.

  • Anything else is a comment.

Download

Installation

You can use pip to install Cram:

$ sudo pip install cram

Or you can install Cram the old fashioned way:

$ wget http://bitheap.org/cram/cram-0.2.tar.gz
$ tar zxvf cram-0.1.tar.gz
$ cd cram-0.1.tar.gz
$ sudo python setup.py install

Usage

Cram will print a dot for each passing test. If a test fails, a unified context diff is printed showing the test’s expected output and the actual output.

For example, if we run cram on its own example tests:

$ cram examples
..
--- examples/fail.t
+++ examples/fail.t.out
@@ -3,11 +3,11 @@
   $ echo 1
   1
   $ echo 1
-  2
+  1
   $ echo 1
   1

 Invalid regex:

   $ echo 1
-  +++
+  1
..

Cram will also write the test with its actual output to examples/fail.t.err. This makes it easy to merge output back into the test file using when writing a test for the first time. You can run diff examples/fail.t{,.err} and use patch -p0 to apply the patch.

Development

Download the official development repository using Mercurial:

hg clone http://bitbucket.org/brodie/cram

Test Cram using Cram:

make tests

Get a test coverage report using coverage.py:

make coverage

Visit Bitbucket if you’d like to fork the project, watch for new changes, or report issues.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cram-0.2.tar.gz (13.2 kB view details)

Uploaded Source

File details

Details for the file cram-0.2.tar.gz.

File metadata

  • Download URL: cram-0.2.tar.gz
  • Upload date:
  • Size: 13.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for cram-0.2.tar.gz
Algorithm Hash digest
SHA256 0000caf8511ef5589dccd9e60e1f083243972c6e2d779eaa98fb376c1690a121
MD5 d135001d26b66575497100972a9e589e
BLAKE2b-256 1977623a1221a7997d50b50fa8a89ddfcb52d4dfe99f3400f9567d499d46f75a

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page