Skip to content
ohinckel edited this page Jan 7, 2018 · 10 revisions

Tests

Um sicherzustellen, dass Funktionen innerhalb von SmartHomeNG während der Weiterentwicklung und evtl. Umstrukturierungen weiterhin funnktionieren, werden sogenannte Unittests geschrieben. Diese sind, ebenfalls wie dalles andere in SmartHomeNG, programmiert und in Python geschrieben.

Bei der Weiterentwicklung von SmartHomeNG sollten die Tests nach jeder Änderung ausgeführt. Damit kann sichergestellt werden, dass bestehende Funktionalität weiterhin fehlerfrei funktioniert und eventuelle Fehler schneller erkannt werden.

Ausfürhung

Die Ausführung der Tests basiert auf zwei Teilen:

  • pytest - Framework für die Testausführung
  • tox - Utility für unterschiedliche Testsläufe

pytests

Die Tests werden mittels pytest (siehe Doku) ausgeführt. Dies ist ein Framework mit dem Tests strukturiert abgelegt und in unterschiedliche Dateien verteilt werden koennen. Das Framework bietet weiterehin Funktionen an mit denen diverse Testszenarien geprüft werden können.

tox

Das Utility tox wird verwendet um pytest auszuführen. Es unterstütz allerdings auch noch weitere Features: so kann z.B. ein sogenannter Build erzeigt werden in dem unterschiedliche "Environments" konfiguriert werden die unterschiedliche Aufgaben erledigen können. Ausserdem kann eingestellt werden, wie die Test-Discovery durchgeführt werden soll und für welche Python Versionen Tests ausgeführt werden sollen.

Damit ist es möglich die Ausfürhung so zu gestalten, dass einerseits eine Umgebung für die direkte Ausfürhung der Tests vorhanden ist, andererseits auch eine Umgebung für einen Syntax-Check (flake) oder sogar eine Umgebung um einen Dokumentationsbuild zu starten.

Bei SmartHomeNG wird allerdings nur die Ausführung der Tests sowie (bei bedar, und daher auskommentiert in der Konfiguration) des Syntax-Checks (flake).

Ausführung in der Konsole

Möchte man die Tests nach einer weiterentwicklung ausführen, so muss der Befehl tox ausgeführt werden. Damit wird das Utility tox gestartet, welches standardmaessig pytests ausführt.

Ein Testlauf sieht so aus:

$ tox
[...]
============================= test session starts ==============================
platform linux -- Python 3.3.6, pytest-2.9.2, py-1.5.2, pluggy-0.3.1 -- /home/travis/build/smarthomeNG/smarthome/.tox/py33/bin/python3.3
cachedir: .cache
rootdir: /home/travis/build/smarthomeNG/smarthome, inifile: tox.ini
plugins: cov-2.5.1, timeout-1.2.1, betamax-0.5.1
timeout: 30.0s method: signal
collected 219 items 
tests/test_config.py::TestConfigConf::test_confread_ignores_empty_name PASSED
tests/test_config.py::TestConfigConf::test_confread_lists_spaces PASSED
tests/test_config.py::TestConfigConf::test_confread_multiline PASSED
[...]
plugins/database/tests/test_single.py::TestDatabaseSingle::test_single_returns_last_value_outside_range PASSED
plugins/database/tests/test_single.py::TestDatabaseSingle::test_single_sum PASSED
==================== 218 passed, 1 skipped in 21.50 seconds ====================
___________________________________ summary ____________________________________
  py33: commands succeeded
  congratulations :)