FHEM Forum

FHEM => Automatisierung => Thema gestartet von: chr.fritsch am 05 Januar 2017, 12:20:22

Titel: Tests schreiben für FHEM Haussteuerung
Beitrag von: chr.fritsch am 05 Januar 2017, 12:20:22
Hallo zusammen,

zunächst möchte ich mich kurz vorstellen, da dieses mein erster Beitrag im Forum ist. Also ich heiße Christian, bin 31 Jahre, Webentwickler und komme aus dem Münchener Umland. Seit gut 9 Monaten bin ich stolzer Eigenheimbesitzer und so kam ich auch zu FHEM.

Ich bin mittlerweile soweit das ich unsere Rolladen von Elero, ein paar Heizkörper mittels Homematic und ein paar Hue Lights steuern kann.

Da ich es durch meinen Beruf gewohnt bin Unit oder Functional Tests zu schreiben, frage ich mich ob das schon mal jemand für seine Haussteuerung versucht hat.

Ich habe mal ein bisschen dazu gegoogelt und bin dann auf https://github.com/sstephenson/bats gestoßen. Hab mir gedacht das könnte man vielleicht ganz gut mit der FHEM console nutzen.
Ein erster Test sieht folgendermaßen bei mir aus:


#!/usr/bin/env bats

function getDeviceReading {
  command='{ReadingsVal("'$1'","'$2'",0)}'
  echo $(perl /opt/fhem/fhem.pl 7072 "$command")
}

@test "test switchLivingRoomLights('on')" {
    perl /opt/fhem/fhem.pl 7072 "{switchLivingRoomLights('on')}"
    sleep 1
    result=$(getDeviceReading "Lamp_Livingroom_TV" "onoff")
  [ "$result" -eq 1 ]
    result=$(getDeviceReading "Lamp_Livingroom_Couch" "state")
  [ "$result" == 'on' ]
}

@test "test switchLivingRoomLights('off')" {
    perl /opt/fhem/fhem.pl 7072 "{switchLivingRoomLights('off')}"
    sleep 1
    result=$(getDeviceReading "Lamp_Livingroom_TV" "onoff")
  [ "$result" -eq 0 ]
    result=$(getDeviceReading "Lamp_Livingroom_Couch" "state")
  [ "$result" == 'off' ]
}



Was ist eure Meinung dazu oder habt ihr schon mal was ähnliches ausprobiert?
Titel: Antw:Tests schreiben für FHEM Haussteuerung
Beitrag von: rudolfkoenig am 05 Januar 2017, 12:48:34
Unit Test sind in manchen Faellen sinnvoll. Man sollte trotzdem nicht zu viel davon erwarten, weil Probleme, an die der Entwickler nicht gedacht hat, auch nicht geprueft werden. Fuer die meisten FHEM-Module, die mit der Aussenwelt kommunizieren, sind sie nicht (mit vertretbaren Aufwand) praktikabel: dass ein Reading auf "on" steht, heisst noch lange nicht, dass die dazugehoerige Lampe an ist. Selbst bei Modulen, die nicht mit der Aussenwelt kommunizieren, ist es problematisch: je nach verwendeten Modulen koennen z.Bsp. bei einem "structure on" die gesendeten Funksignale sich gegenseitig stoeren.

Falls ein Modul-Autor unit-Tests fuer sinnvoll haelt, habe ich absolut nichts dagegen.
Will sowas aber nicht zum Pflicht machen.
Titel: Antw:Tests schreiben für FHEM Haussteuerung
Beitrag von: chr.fritsch am 05 Januar 2017, 13:18:15
Darum das die Module getestet werden gehts mir hier garnicht.

Ich würde gerne meine konkrete Implementierung testen. zb:

Szenarien die man mit FHEM erstellen kann, können unglaublich komplex werden, daher würde ich gerne irgendwie testen ob alles so abläuft wie ich mir das vorstelle. Und von Hand immer alle Szenarien durchtesten kann nicht die Lösung sein. Ich weiß das diese Tests deutlich schwieriger sind als normal Unit Tests, da wir von externen Geräten abhängig sind.