System Tests · Robot Framework · Modbus TCP

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

GitHub Repository

Kontext & 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 — mit Modbus TCP als Kommunikationsschnittstelle, einer SiL-Umgebung als Ersatz für echte HiL-Hardware und vollständiger CI-Integration.

Domäne

Energietechnik, BHKW, dezentrale Energieversorgung

Protokoll

Modbus TCP — industrieller Standard für Steuerungskommunikation

Framework

Robot Framework — keyword-driven Testing, lesbar für Nicht-Entwickler

Umgebung

SiL (Software-in-the-Loop) — Python-Simulator als HiL-Ersatz

1 — Architektur

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

BHKW System Test Architecture Three-layer architecture: Robot Framework, BHKWLibrary, BHKW Simulator, GitHub Actions CI Robot Framework tests (.robot) Keyword-driven · readable without deep programming knowledge test_start_stop test_fault_handling test_power_regulation keywords BHKWLibrary.py (Python library) connect · send_command · wait_for_state · check_power · inject_fault Modbus TCP :5020 BHKW simulator (Python — SiL) State machine · Modbus TCP server · Physical value simulation IDLE STARTING RUNNING STOPPING IDLE FAULT fault injection → RESET GitHub Actions CI Start simulator · run all tests · upload HTML report 10 tests · 0 failed 3 suites · smoke + regression HTML report generated

BHKW Zustandsmaschine

IDLE
→ START →
STARTING
RUNNING
→ STOP →
STOPPING
IDLE
RUNNING
→ Fault →
FAULT
→ RESET →
IDLE

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

2 — Robot Framework Tests

Tests sind in lesbarem Keyword-Driven Format geschrieben — verständlich ohne tiefe Programmierkenntnisse:

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
Keyword-Driven Testing: Keywords wie Send Command, Wait For State und Check Power Output sind in BHKWLibrary.py definiert — neue Tests können ohne Modbus-Kenntnisse geschrieben werden.

3 — Testergebnisse

Robot Framework Report

Robot Framework Report - All tests passed

Alle Tests bestanden

Console - 10 tests 10 passed

BHKW Simulator — Start/Stop Sequenz

BHKW Simulator running

Fault Handling — Simulator

BHKW Simulator fault handling
✅ All tests passed — 17/17 Testfälle bestanden — Modbus TCP + REST API.
17
Tests gesamt
17
Tests bestanden
0
Failures
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

Skills

Robot Framework Modbus TCP Python SiL Testing HiL Konzept Keyword-Driven Testing Fault Injection Zustandsmaschine GitHub Actions BHKW / Energietechnik Systemtest pymodbus REST API Testing FastAPI

6 — Ausblick

Erweiterung — Kubernetes Deployment

Dieses Projekt wurde um eine containerisierte Deployment-Variante erweitert — der Simulator läuft jetzt auch als Docker-Container auf einem Kubernetes-Cluster (Minikube), mit automatischen Health Checks, Self-Healing und End-to-End-Tests gegen das deployte System.

→ Kubernetes Deployment ansehen