|buildstatus|_

Installation
============

.. code-block:: python

    pip install systest

Description
===========

Execute a sequence of test cases in serial and/or parallel.

Test cases in a list are executed in serial and test cases in a tuple
are executed in parallel in separate Python threads.

This framework is created with production test in mind,
trying to make it possible to minimize the test
execution time by executing tests in parallel. The
framework is *not* indended as a replacement for
``unittest``, but rather to be a complement to it.

Example usage
=============

See the test suite: https://github.com/eerimoq/systest/blob/master/tests/test_systest.py

For example, the sequence below starts with test case
``MyTestCase("1")``. When ``MyTestCase("1")`` has been
executed, ``MyTestCase("2")`` and the list of
``MyTestCase("3")`` and ``MyTestCase("4")`` are executed
in parallel. When both ``MyTestCase("2")`` and the list
of ``MyTestCase("3")`` and ``MyTestCase("4")`` has been
executed, ``MyTestCase("5")`` is executed. Then the
sequence ends.

.. code-block:: python

   from systest import Sequence, TestCase

   class MyTestCase(TestCase):
       def __init__(self, name):
           super(MyTestCase, self).__init__()
           self.name = "my_testcase_" + name
       def run(self):
           self.log("Hello!")

   class MySequence(Sequence):
       def __init__(self):
           super(MySequence, self).__init__("my_sequence")
       def run(self):
           self.sequencer.run([
               MyTestCase("1"),
               (
                   MyTestCase("2"),
                   [
                       MyTestCase("3"),
                       MyTestCase("4")
                   ]
               ),
               MyTestCase("5")
           ])

   MySequence().execute()

The output is:

.. code-block:: text

   Name: my_sequence
   Date: 2016-02-02 18:42:40.446213
   Node: erik-VirtualBox
   User: erik
   ---------------------------------------------------------------
   Name: my_testcase_1
   Description:
   None
   2016-02-02 18:42:40.488127 my_testcase_1 Hello!
   
   my_testcase_1: PASSED in 0m 0s
   ---------------------------------------------------------------
   Name: my_testcase_2
   Description:
   None
   2016-02-02 18:42:40.490369 my_testcase_2 Hello!
   
   my_testcase_2: PASSED in 0m 0s
   ---------------------------------------------------------------
   Name: my_testcase_3
   Description:
   None
   2016-02-02 18:42:40.491976 my_testcase_3 Hello!
   
   my_testcase_3: PASSED in 0m 0s
   ---------------------------------------------------------------
   Name: my_testcase_4
   Description:
   None
   2016-02-02 18:42:40.494298 my_testcase_4 Hello!
   
   my_testcase_4: PASSED in 0m 0s
   ---------------------------------------------------------------
   Name: my_testcase_5
   Description:
   None
   2016-02-02 18:42:40.496103 my_testcase_5 Hello!
   
   my_testcase_5: PASSED in 0m 0s
   
   ---------------------- Test report begin ----------------------
   
   [
       [
           my_testcase_1: PASSED,
           (
               my_testcase_2: PASSED,
               [
                   my_testcase_3: PASSED,
                   my_testcase_4: PASSED
               ]
           ),
           my_testcase_5: PASSED
       ]
   ]
   
   Execution time: 0m 0s
   
   ----------------------- Test report end -----------------------

.. |buildstatus| image:: https://travis-ci.org/eerimoq/systest.svg
.. _buildstatus: https://travis-ci.org/eerimoq/systest
