Quickstart
Das folgende Kapitel soll einen leichten Einstieg in die Verwendung des TwinCAT 3 TestFrameworks ermöglichen. Prinzipiell kann das TestFramework auf zwei verschiedene Arten verwendet werden.
- Die Testfälle befinden sich in einem TwinCAT-SPS-Projekt und der zu testende Steuerungs-Code wird als SPS-Bibliothek eingebunden. Diese Verwendung ist für den Test von SPS-Bibliotheken gedacht.
- Die Testfälle und der Steuerungscode, der getestet werden soll, befinden sich im selben SPS-Projekt, wobei z. B. per Compiler-Schalter unterschieden wird, ob die Test-Fälle auch übersetzt werden (siehe Kapitel bedingte Kompilierung/ bedingt Pragmas).
In diesem Quickstart wird auf den ersten Anwendungsfall eingegangen, da dieser vermutlich das häufigere Anwendungsscenario darstellt.
- 1. Erstellen Sie ein neues TwinCAT-3-Projekt.
- 2. Erzeugen Sie ein neues SPS-Projekt.
- 3. Fügen Sie die SPS-Bibliothek Tc3_PlcTestFramework dem SPS-Projekt hinzu.
- 4. Fügen Sie die SPS-Bibliothek hinzu, die getestet werden soll, sofern die Testfälle nicht direkt im Steuerungscode der Applikation enthalten sind.
Implementierung der Test-Fälle:
Führen Sie die folgenden Schritte für alle Testfälle durch, die Sie implementieren möchten:
- 5. Erzeugen Sie einen neuen Funktionsbaustein, welcher sich vom Baustein FB_TestCaseBase aus der SPS-Bibliothek Tc3_PlcTestFramework ableitet.
- 6. Fügen Sie über dem Namen des Funktionsbausteins den Namen des Testfalls als Attribut ein, so wie er im Test-Log bzw. den Test-Clients angezeigt werden soll. Möchten Sie keinen Namen explizit vergeben, wird automatisch der Name der POU als Name des Testfalls verwendet.
- 7. Fügen Sie optional per Attribut ein Timeout und den Testfall-Owner ein.
- Der Deklarationsteil des Funktionsbausteins könnte danach wie folgt aussehen:
{ attribute 'Name':='TB_Sum-Test' }
{ attribute 'Timeout':='t#20s' }
{ attribute 'Owner':='TestOwner' }
FUNCTION_BLOCK FB_TestSum EXTENDS FB_TestCaseBase
VAR_INPUT
END_VAR
… - 8. Deklarieren Sie in der Variablen-Deklaration des Funktionsbausteins den Baustein, den Sie testen wollen
- 9. Deklarieren Sie zusätzlich Variablen, welche das erwartete Ergebnis des Testfalls und das Ergebnis enthalten werden. Diese explizite Definition ist erforderlich, da die Methode, welche das Ergebnis mit dem Erwartungswert vergleicht, auf dem Any-Datentyp basiert.
- 10. Implementieren Sie den Testfall. Der Vergleich auf Korrektheit des Ergebnisses erfolgt mit der Methode
AssertEqual, welche bereits im Basisfunktionsbaustein implementiert ist.
Die Tests werden so lange ausgeführt, bis der Testfall mit der Funktion Succeded() verlassen wird oder ein Fehler auftritt. Auf diese Weise ist es möglich, Testfälle so zu gestalten, dass diese iterativ durchlaufen werden.
Der Steuerungscode für den Test eines Summationsbausteins könnte also vereinfacht so aussehen:
{ attribute 'Name':='TB_Sum-Test' }
{ attribute 'Timeout':='t#20s' }
{ attribute 'Owner':='TestOwner' }
FUNCTION_BLOCK FB_TestSum EXTENDS FB_TestCaseBase
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
myFB : FB_Sum;
expectedValue : UINT;
result: UINT;
END_VAR
// test 2 + 2 = 4
myFB(var1:= 2, var2:= 2, result=> result);
expectedValue:=4;
AssertEqual(expected:= expectedValue, actual:= result, message:= 'Addition with the FB_Sum function block is incorrect!');
Succeeded();Sind alle Testfälle implementiert, fahren Sie wie folgt fort:
- 11. Stellen Sie sicher, dass auf dem SPS-Projekt die Option Autostart Boot Project aktiv ist.
- 12. Aktivieren Sie das Projekt auf dem gewünschten Zielsystem.
- 13. Öffnen bzw. starten Sie einen Test-Client und führen Sie die Tests aus.
Test-Client mit User-Interface:
- 14. Starten Sie den Test-Client.

- 15. Wählen Sie mit der Auswahlbox der Option target das Zielsystem aus, auf dem das Test-Projekt ausgeführt wird.
- 16. Betätigen Sie danach die Connect-Taste direkt hinter der Zielsystemauswahl
- Es werden im Test-Client alle Testfälle in einer tabellarischen Ansicht dargestellt.

- 17. Durch Betätigen des Buttons Queue All starten Sie die Ausführung aller Testfälle.
- Eine detaillierte Beschreibung der Funktionen der Benutzeroberfläche des Test-Clients finden Sie im Kapitel Referenz, Benutzeroberfläche.
Kommandozeilen-Client:
- 1. Führen Sie das folgende Kommando per Skript oder per Kommandozeile auf:
TcTestClientCli.exe --target 199.4.42.250.1.1 --saveResultsAsJunit "C:\temp\testJunit.junit.xml" --tcStartupRetries 10 --mode checkMemory
Der TestClientCli wird standardmäßig in das Verzeichnis C:\Program Files (x86)\Beckhoff\TwinCAT\Functions\TE1040-TestFramework\TcTestClientCli\ installiert.
- Die Option
--targetverweist dabei auf das Zielsystem, auf welchem die Testfälle ausgeführt werden. - Die Option
--saveResultAsJunitaktiviert das Schreiben der Ergebnisse im JUnit-Format und zeigt auf die Datei, in welcher die Ergebnisse gespeichert werden. - Die Option
--TcStartupRetrieslegt die Anzahl der Versuche fest, wie häufig der Test-Client versucht einen Test zu starten. - Die Option
--mode checkMomoryaktiviert in diesem Fall, dass der Test-Client nach jedem Testdurchlauf den TwinCAT-Router-Speicher überprüft. Auf diese Weise ist es möglich, Memory-Leaks innerhalb der geschriebenen Funktionsbausteine zu finden. Die Ausführung dieser Option geht mit einer geringfügig höheren Laufzeit einher.