Package: simple-system-tests
simple-system-testsSimple Python library for writing test cases for System and components tests including automatic reports via html. The intention is to have an easy framework for developers without the need to learn a separate coding language. Check out the repository via:git clone https://github.com/chrisKoeh/simple-system-tests.gitMain advantages using this framework:separate command line option for each testcase allows faster debuggingparameterized subtests require only one test function but allows multiple tests of one part with different valuespython only with just 3 decorator functions being necessary to learn(Optional) Build package locallypip3 install setuptools wheel
python3 setup.py sdist bdist_wheel
(sudo) python3 setup.py installInstallationpip3 install simple-system-testsQuick-StartAfter installation create a script with the following content:import simple_system_tests as sst

@sst.testcase()
def my_testcase():
    sst.logger().info("this is a PASS")

sst.run_tests()Upon execution an error message will be printed, that thesystem_params.jsonwas not found
which can be ignored for now. After that open the createdindex.htmlfor an overview
of the results in a web browser. For a more detailed example take a look atexamplesfolder.TestsuiteThe Testsuite is defined undersimple_system_tests/TestSuite.py:holds and executes testcasesprepare and teardown of Testsuite, which can be implemented by using decorators(optional):import simple_system_tests as sst
@sst.prepare_suite
def s_prepare():
    sst.logger().info("preparing the suite")
@sst.teardown_suite
def s_teardown():
    sst.logger().info("tearing the suite down")reporting of test results stored inindex.html(can be configured via command line)providing command line options for configurations and all testcases allowing them to be called
separatelyCommand line optionsAuto createdWhen using a Testsuite command line options for all testcases added to the suite will be
automatically created. Command line option shortcut will be
derived from the beginning characters of the decorated function name.
Make sure to have varying descriptions for your testcases. Having a look at the help ofexamples/main.pywill give the following output:shell: python3 main.py -h
usage: main.py [-h] [-no] [-p JSON_SYSTEM_PARAMS] [-o REPORT_OUTPUT] [-e] [-s]
               [-m] [-j] [-r] [-t] [-pr] [-te]

optional arguments:
  -h, --help            show this help message and exit
  -no, --no-suite-setup
                        No Suite Prepare and Teardown
  -p JSON_SYSTEM_PARAMS, --json-system-params JSON_SYSTEM_PARAMS
                        Path to JSON params file.
  -o REPORT_OUTPUT, --report-output REPORT_OUTPUT
                        Path to report html file.
  -e, --env_case        Test Env case
  -s, --simple_print    Test Simple print
  -m, --multi_prints    Test Multi prints
  -j, --json_multi_prints
                        Test Json multi prints
  -r, --retry_case      Test Retry case
  -t, --timeout_case    Test Timeout case
  -pr, --prepare_fail_case
                        Test Prepare fail case
  -te, --teardown_fail_case
                        Test Teardown fail caseTestcases can be called separately without having to execute all testcases in one run.
It is also possible to pass multiple testcases in one execution. In case the Suite setup and
teardown is not wanted this can be achieved by putting the-no, --no-suite-setupoption.Adding custom command line optionsSystem parameters can be also defined and passed via cmd line option. Just create the according
cmd option like, within your main script on the top at best:sst.add_cmd_option('my_opt', 'A custom option that needs to be passed')With that the option will be added to the command line parser. The value passed via command line
can then be used within the main script usingsst.get_env()["my_opt"]. If the key is also red
from system_params.json the command line option will override, as long as provided by the user
or if a default value was given.TestcasesCreate new testcasesTestcases are created using decorators:import simple_system_tests as sst

@sst.testcase()
def custom_testcase():
    raise Exception("Fails always, anyways")A testcase is consideredPASSas long as no exception is raised.Testcase arguments@sst.testcase(retry=0, timeout=-1, prepare_func=None, teardown_func=None)retry: how often a testcase is retried before considered asFAILtimeout: in seconds how long the testcase may last, considered asFAILif extendedprepare_func / teardown_func: functions to be called before / after testcase executionSub testcases@sst.testcases(sub_params, retry=0...)
def multi_tests(sub_param):
    ...It is possible to run multiple tests at once. The number of tests is defined by the list length
of thesub_paramsargument. The rest of the arguments are the same as for@sst.testcasedecorator.System parametersEnvironment parameters for the testsuite can be used from a json file namedsystem_params.json(the file path can be customized by passing the-poption). Those will be made available in the
Testcase by the functionsst.get_env():import simple_system_tests as sst

@sst.testcase()
def env_case():
    sst.logger().info(sst.get_env())Setting these json params from within the testsuite, eg. in case
a global python object should be made available in Testsuite preparation for all testcases,
is possible withsst.set_env(key, value)function.LoggingThe file path of the output file can be customized by passing the-ooption, which defaults toindex.html. Aloggerobject attribute is available within testcases and testsuites.
However stdout is mapped tologger.info, henceprintcan also be used directly which will
result in output of both console and html report file asINFOmessage.