System Tests · Robot Framework · Modbus TCP

Automatisierte Systemtests für einen Anlagenregler mit Robot Framework und Modbus TCP in einer Software-in-the-Loop Umgebung mit 17 Testfällen, vollständig in GitHub Actions CI integriert.

GitHub Repository

Motivation

In der Energietechnik müssen Anlagenregler vor jeder Freigabe sorgfältig geprüft werden. Anlauf- und Abschaltvorgänge, Fehlerbehandlung und Leistungssteuerung müssen einwandfrei arbeiten.

Ziel dieses Projekts war es, manuelle Tests schrittweise durch stabile, automatisierte Systemtests auf Basis des Robot Frameworks zu ersetzen und mit Modbus TCP als Kommunikationsschnittstelle, einer SiL-Umgebung als Ersatz für echte HiL-Hardware und vollständiger CI-Integration.

1- Architektur

Die Testumgebung besteht aus drei Schichten: Robot Framework Tests, Python BHKWLibrary und BHKW Simulator:

BHKW System Test Architecture

Modbus Register Map

RegisterTypAdresseBeschreibung
CommandHolding0x00010=IDLE 1=START 2=STOP 3=RESET
Power SetpointHolding0x0002kW × 10
StateInput0x00010=IDLE 1=STARTING 2=RUNNING 3=STOPPING 4=FAULT
Power OutputInput0x0002kW × 10
TemperatureInput0x0003Celsius × 10
Fault CodeInput0x00040=None 1=Overtemp 2=LowOil 3=GridFault
Fault InjectionHolding0x0003Nur für Tests: Fehlercode erzwingt FAULT
RuntimeInput0x0005Simulationsschritte im Zustand RUNNING

2- Robot Framework Tests

Start/Stop Tests

*** Test Cases ***
TC01 BHKW starts from IDLE state
    [Tags]    start    smoke
    ${state}=    Read State
    Should Be Equal    ${state}    IDLE
    Send Command    START
    Wait For State    RUNNING    timeout=30
    Check Power Output    min_kw=40    max_kw=60
    Check Temperature    min_temp=75    max_temp=90
    Check No Fault

Fault Handling Tests

*** Test Cases ***
TC04 Fault detected during RUNNING state
    [Tags]    fault    regression
    Send Command    START
    Wait For State    RUNNING    timeout=30
    Inject Fault    fault_code=1
    Wait For State    FAULT    timeout=10
    ${fault}=    Read Fault Code
    Should Not Be Equal As Integers    ${fault}    0

TC06 START command ignored in FAULT state
    [Tags]    fault    negative
    Inject Fault    fault_code=2
    Wait For State    FAULT    timeout=10
    Send Command    START
    Sleep    3
    ${state}=    Read State
    Should Be Equal    ${state}    FAULT

3- Testergebnisse

Robot Framework Report

Robot Framework Report - All tests passed

Alle Tests

Konsole - 17 Tests, 17 bestanden

BHKW Simulator : Start/Stop Sequenz

BHKW Simulator running

Fault Handling : Simulator

BHKW Simulator fault handling
✅ All tests 17/17 Testfälle : Modbus TCP + REST API.
17
Tests gesamt
17
Tests bestanden
4
Test Suites

4- Test Suites

SuiteTestsTagsBeschreibungStatus
test_start_stopTC01–TC03smoke, regressionStart/Stopp Sequenzen und vollständiger Zyklus✅ 3/3
test_fault_handlingTC04–TC06fault, regressionStörungsinjektion, Recovery und negative Tests✅ 3/3
test_power_regulationTC07–TC10power, temperatureLeistungsbereich, Temperaturüberwachung, Stopp✅ 4/4
test_rest_apiTC11–TC17rest, smoke, regression, negativeREST API - Health, Status, Start, Stop, Power, 409✅ 7/7

Tags-basierte Ausführung

# Nur Smoke Tests (schneller Sanity Check)
python -m robot --include smoke --pythonpath tests/keywords tests/

# Alle Regression Tests
python -m robot --include regression --pythonpath tests/keywords tests/

# Alle Tests
python -m robot --pythonpath tests/keywords --outputdir results tests/

5- Zusammenfassung

KomponenteTechnologieStatus
Test FrameworkRobot Framework 7.x✅
KommunikationsprotokollModbus TCP (pymodbus)✅
BHKW SimulatorPython — SiL Umgebung✅
Python LibraryBHKWLibrary.py✅
ZustandsmaschineIDLE/STARTING/RUNNING/STOPPING/FAULT✅
Fault InjectionModbus Register direkt✅
CI/CDGitHub Actions✅
Test ReportRobot Framework HTML Report✅
REST APIFastAPI, 7 Tests (inkl. Konsistenz REST/Modbus)✅
DeploymentDocker, Kubernetes (lokal, Minikube)✅