Skip to main content

Element: IEC-Unittest

Symbol: _tm_icon_iec_unit_test.png

Funktion: Das Testelement IEC-Unittest bewirkt, dass bei Testausführung automatisch das (vorbereitend) geladene Testprojekt nach Testbausteinen und Testtabellen durchsucht und daraus eine Testapplikation erstellt wird. Dann wird diese Testapplikation geladen, gestartet und die Prüfungen werden durchgeführt. Abschließend werden die Resultate in einem Testreport abgelegt.

Voraussetzung ist somit, dass das Testprojekt Testbausteine oder Testtabellen enthält.

Titel

Titel des IEC-Unittests, der so im Testreport erscheint

Der Titel darf Leerzeichen enthalten.

Beispiel: IEC Unit Test of Feature A

Timeout Gerät lesen (ms)

Zeitdauer in ms, die bei der Kommunikation mit der Steuerung maximal gewartet wird

Wenn die Zeit überschritten wird, wird eine Fehlerbehandlung gestartet und ein Fehler ausgegeben. Beispielsweise wird beim Monitoren von Variablen das Timeout überwacht.

Beispiel: 5000

Hinweis: Während des Testlaufs wird immer wieder das Timeout überwacht: Üblicherweise beim Einloggen, wenn der Applikationsstatus ausgelesen wird. Dann bei jeder einzelnen Testfallausführung (mindestens einmal), wenn Status und Ergebnis ausgelesen werden.

Erneute Login-Versuche

Anzahl der erneuten Einloggversuche

Wenn die Anzahl überschritten wird, wird eine Fehlerbehandlung gestartet und ein Fehler ausgegeben.

Tabelle 4. Bibliotheken zum Testen

Liste von Bibliotheken, die Testbausteine enthalten

Diese Bibliotheksbausteine werden beim Testlauf automatisch in der Testapplikation instanziiert, ausgeführt und ausgewertet.

Doppelklicken Sie in der Tabelle in die oberste freie Zeile in die jeweilige Spalte, um ein Eingabefeld zu öffnen.

Name

Bibliothek, die im Testprojekt über mindestens einen Bibliotheksverwalter eingebunden ist

Dabei müssen deren Referenzierungsart hier mit den Angaben im Bibliotheksverwalter übereinstimmen. Alternativ kann eine Variable für den Bibliotheksnamen angegeben werden.

  • Bibliotheksname (bei absoluter oder Sternchen-Referenzierung)

    Beispiel: Test Collection Feature ABC

  • Platzhaltername (mit vorangestelltem #)

    Die Einstellungen Version und Firma sind dabei folglich leer.

    Voraussetzung: Die Bibliothek wird im Bibliotheksverwalter auch über Platzhalter referenziert.

    Beispiel: #Test Collection Feature ABC

  • Testskriptvariable (in geschweifter Klammer), die einen Bibliotheksnamen enthält

    Beispiel: {TestLibABC}

Version

  • Absolute Versionsangabe

    Voraussetzung: Die Bibliothek ist im Bibliotheksverwalter auch absolut referenziert.

    Beispiel: 4.0.0.0

  • *

    Sternchen-Referenzierung, um immer die neueste Version zu referenzieren

    Voraussetzung: Die Bibliothek ist im Bibliotheksverwalter auch über Sternchen referenziert.

  • leer (bereits über Platzhalter bestimmt)

  • Testskriptvariable (in geschweifter Klammer), die die Version enthält

    Beispiel: {TestLibABCVersion}

Firma

  • Beispiel: Company ABC

  • leer (bereits über Platzhalter bestimmt)

  • Testskriptvariable (in geschweifter Klammer), die die Version enthält

    Beispiel: {TestLibABCCompany}



Tabelle 5. Ausgewählte Kategorien und Ausgeschlossene Kategorien

Beide Eingabefelder dienen dazu, die Auswahl der Bausteine, die im Testlauf berücksichtigt werden sollen, einzuschränken. Sie können explizit Ausgewählte Kategorien und/oder explizit Ausgeschlossene Kategorien von Bausteinen angeben.

Wenn keine explizit ausgewählte Kategorie angegeben ist, werden implizit die Testbausteine aller Kategorien ausgewählt. Auf diese Auswahl folgend wird die Liste der ausgeschlossenen Kategorien angewendet.

Ausgeschlossene Funktionsbausteine werden beim Testlauf nicht instanziiert, ausgeführt oder ausgewertet.

Damit können Sie den Testfall auf Skriptebene anpassen, beispielsweise um ihn für Steuerungen mit unterschiedlicher Hardware zu verwenden.

Voraussetzung: Die im Testprojekt enthaltenen Testbausteine oder Testtabellen haben Testkategorien deklariert. Ein Testbaustein wird über das Pragma {attribute 'testcategory' := '<name1|, name2>'} kategorisiert. Beispiel: {attribute 'testcategory' := 'BasicTests'}

Doppelklicken Sie links in die oberste freie Zeile, um ein Eingabefeld zu öffnen.

Pro Zeile können Sie den Namen einer oder (kommasepariert) mehrerer Bausteinkategorien angeben. Beispiel: BasicTests, ExtTests

Eine dynamische Konfiguration der ein- oder auszuschließenden Bausteinkategorien ist mit Hilfe von Platzhaltern möglich. Der Platzhalter besteht aus dem Namen einer Testvariablen, eingeschlossen in geschweifte Klammern. Diese Testvariable erhält über eine Zuweisung im Testskript einen oder mehrere Kategorienamen und oder Bausteinamen.

Beispiel: Der Testvariablen TMCatVar weisen Sie im Testskript eine Bausteinkategorie BasicTests zu: TMCatVar := "BasicTests". Im Feld Ausgewählte Kategorien des Testelements IEC-Unittest tragen Sie den Platzhalter ein: {TMCatVar}. Damit werden explizit nur die Bausteine der Kategorie BasicTests im Testablauf berücksichtigt.

Beispiel für eine kombinierte Eingabe im Feld Ausgewählte Kategorien: {TMCatVar}, {TMExtTests}, CTD



Tabelle 6. Ausgewählte Funktionen und Ausgeschlossene Funktionen

Beide Eingabefelder dienen dazu, die Auswahl der Bausteine, die im Testlauf berücksichtigt werden sollen, einzuschränken. Entweder geben Sie explizit Ausgewählte Funktionen an, oder explizit Ausgeschlossene Funktionen. Diese Listen werden zusätzlich zu den oben beschriebenen Listen Ausgewählte Kategorien und Ausgeschlossene Kategorien ausgewertet.

Sie können als Eingabe den Bausteinnamen oder den mit der Compilerdirektive {attribute 'testcasename' := '<name>'} definierten Testfallnamen angeben. Die Groß-/Kleinschreibung wird nicht berücksichtigt. Weiterhin sind folgende Wildcards möglich: '*' für eine beliebige Anzahl von Zeichen, '?' für ein einzelnes Zeichen.

Beispiel: Alle folgenden Eingabe führen dazu, dass die POU mit dem Name TestCase_01 ausgeführt wird.

Ausgewählte Funktionen:

TestCase_01
tc1
tc?
TestCase_0*
*_01

Deklaration:

{attribute 'test'}
{attribute 'testcasename':='tc1'}
{attribute 'testcasetimeout' := '60000'}
FUNCTION_BLOCK TestCase_01 EXTENDS TM.Testcase
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
END_VAR

super^();

Ausgeschlossene Funktionsbausteine werden beim Testlauf nicht instanziiert, ausgeführt oder ausgewertet.

Damit können Sie die Ausführung des Testfalls auf Skriptebene steuern. Beispielsweise können Sie die Ausführung eines Testfalls für Steuerungen mit unterschiedlicher Hardware steuern.

Zur Eingabe und Eingabesyntax sehen Sie bitte oben bei Ausgewählte Kategorien und Ausgeschlossene Kategorien.

Wichtig

Bei Multitests können im Eingabefeld Ausgeschlossene Funktionen Werte der Variablen wsTestCaseName angegeben werden. Dadurch werden die Testfälle aller Bausteine mit diesen Variablenwerten vom Test ausgeschlossen.

Beispiel: Die Testfälle mit dem Variablenwert "TestStep #0: Intial value" werden nicht ausgeführt

Ausgeschlossene Funktionen:

TestStep #0: Intial value

Implementierung:

CASE diTestCaseIndex OF
   0: // Test Case #0 - tests the same as CTD_InitialValue        
      IF THIS^.xGetTestInfo THEN
          // Test case header
          THIS^.wsTestCaseName := "TestStep #0: Intial value";
          THIS^.wsTestCaseCategories := "Multitest";
          THIS^.diTestCaseTimeout := 200;
          xDone := TRUE;
      ELSE
          ...


Modus einzelne Applikation

standard icon: Im Testprojekt wird statt einer Applikation Backup das Gerät Backup erzeugt.

Auf einigen Geräten, vor allem Embedded-Geräten, darf nur eine Applikation vorhanden sein. Sie sind nicht fähig, mehrere Applikationen abzuarbeiten. Entsprechend darf im Gerätebaum des Testprojekts auch nur eine Applikation pro Gerät vorhanden sein. Um ein übersetzbares Testprojekt zu generieren, wird für solche Geräte statt einer Backup-Applikation (Sicherungskopie der ursprünglichen Applikation unter dem Namen Backup), ein Backup-Gerät erzeugt. Dann gibt es im Gerätebaum eine Kopie des Geräts mit dem Namen Backup. Danach werden erst die zur Testgenerierung erforderlichen Änderungen im Projekt ausgeführt.

Hinweis: Aktivieren Sie die Option auch bei Geräten, deren Applikationsname nicht geändert werden kann. Dann werden nicht Applikationen umbenannt, sondern das im Projekt vorhandene Gerät.