-
Notifications
You must be signed in to change notification settings - Fork 90
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.
Die Ausführung der Tests basiert auf zwei Teilen:
-
pytest
- Framework für die Testausführung -
tox
- Utility für unterschiedliche Testsläufe
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.
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).
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 :)
Die aktuellen Release Notes und die Release Notes der zurückliegenden Versionen sind in der Dokumentation im Abschnitt Release Notes zu finden.