VS 2010 Testcontroller überfüllt die Partition

Sollte der Testcontroller über eine, im Verhältnis zu den durchzuführenden Testfällen, zu kleine “C” Partition (ggf. auch andere Partition, auf der sich das Users Verzeichnis befindet) verfügen, kann es während der Durchführung zu “Problemen” führen.
Grund dafür ist ein fehlendes, bzw. fast nicht vorhandenes Aufräumen des Users Verzeichnisses “QTController”.

Dieses Fehlverhalten kann während der Testdurchführung folgende “Symptome” aufweisen:

  • Ein Teil der Testfälle wird nicht mehr ausgeführt, Testfälle werden als “not executed” markiert – .tr File enthält keine Fehlermeldung oder Hinweis. Je länger die Partition nicht aufgeräumt wird, desto weniger Testfälle einer Suite werden durchgeführt.
  • Logfile vom Testagent / Testmanager / Testcontroller zeigen keine Warnungen oder Fehlermeldungen, unabhängig von dem Detailgrad des Logs
  • Auf manchen Rechnern taucht die Fehlermeldung “The test assembly ‘C:\Users\..\AppData\Local\VSEQT\QTAgent\..\test.dll’ cannot be loaded. Error details: Could not find file ‘C:\Users\..\AppData\Local\VSEQT\QTAgent\..\Deployment\test.dll’” angezeigt

Das QTController Verzeichnis liegt auf dem Testcontroller unter dem Pfad “C:\Users\{Benutzer}\AppData\Local\VSEQT\QTController”.
Seitens Microsoft gibt es für dieses Problem keine “saubere” Lösung, in MSDN Foren wird empfohlen ein Batch-Datei aufzusetzen, die das Aufräumen in regelmäßigen Abständen übernimmt.
Batch File Inhalt

rmdir /s /q "C:\Users\{user}\AppData\Local\VSEQT\QTController"

Das Batch-File kann dann von der Aufgabenplanung (taskschd.msc) in benötigten Zeitintervallen aufgerufen werden, bei uns hat sich ein Aufruf alle 2 Wochen, als ausreichend erwiesen. Das hängt aber von der Größe der Partition und der Anzahl der Testfälle ab (bzw. Größe der mitgegebenen Assembly- / Testfiles).

Geschrieben in Microsoft Test Manager,Visual Studio Testframework,VS UI Automatisierung | Keine Kommentare

Unittest / Coded UI Testmethoden mit WorkItem TestCase in Visual Studio 2012 verknüpfen

Durch Visual Studio 2012 haben sich einige Menüs und Funktionen im Testbereich geändert.
Mehrere Dialoge, wie Test View und Test List Editor, wurden jetzt zu einem Test Explorer zusammengefasst.

Menu “Test”-”Fenster” Visual Studio 2010

Menu “Test”-”Fenster” Visual Studio 2012

Leider hat der neue Testexplorer nicht mehr die Funktionen, die in der Test View möglich waren. Neben der fehlenden Gruppierung der Testfälle nach Klassen oder Projekt, gibt es im Testfall Contextmenü in Visual Studio 2012 keine Möglichkeit mehr, eine Testmethode mit einem Testfall in TFS zu “verknüpfen”.

Kontextmenü Testfall Visual Studio 2010 

Kontextmenü Testfall Visual Studio 2012 

Um die Testmethoden mit einem Test Case zu verknüpfen sind folgende Schritte in Visual Studio 2012 notwendig:

  1. Button “Gehe zu Arbeitsaufgabe” auswählen:
  2. WorkItem ID des zu verknüpfenden Testfalls eintippen:
  3. Im geöffneten Testfall Tab (seit neuestem Link) “ASSOCIATED AUTOMATION” auswählen
  4. Button … auswählen
  5. gesuchten Testfall auswählen.

    Leider gibt es hier keine Suchfunktion, eintippen der ersten drei Buchstaben des Testfallnamens hilft den Testfall schneller zu finden. Bei einer großen Anzahl von Testfällen hilft eine einheitliche Namenskonvention.
  6. Testfall speichern – fertig!

    Der Automatisierungsstatus des Testfalls hat sich automatisch in “automated” geändert. Testfall kann in Microsoft Testmanager als automatisierter Test ausgewählt werden.
Geschrieben in Allgemein,Microsoft Test Manager,Visual Studio 2012,Visual Studio Testframework | Keine Kommentare

ClassCleanup() Verhalten

Um aus Microsoft Test Manager automatisierte Testfälle (Unit Tests, Coded UI Tests, Ranorex, Selenium usw.) ansprechen zu können, müssen diese in Testmethoden “verpackt” werden.
Wie bekannt sind diese Methoden in eine Struktur des UnitTest Frameworks von Microsoft Visual Studio eingepflegt, die auch Initialisierungs- und Abschluss-Methoden bietet:

  • Initialisierung: ClassInitialize(), TestInitialize()
  • Abschluss: TestCleanup(), ClassCleanup()

nehmen wir mal an, wir haben 2 Testklassen mit je 2 Testfällen:

Klasse1: TC1, TC2
Klasse2: TC3, TC4

Wenn wir alle Testfälle markieren und per “Run” ausführen, werden natürlich auch die einzelnen Initialize / Cleanup Methoden ausgeführt.

Wie ist die Aufrufreihenfolge der einzelnen Initialisierungs / Abschlussmethoden?

Eigentlich würde folgende Reihenfolge der Initialisierung / Abschlussmethoden “logisch” erscheinen:

  • ClassInitialize Klasse1
  • TestInitialize TC1 / TestCleanup TC1
  • TestInitialize TC2 / TestCleanup TC2
  • ClassCleanup Klasse1
  • ClassInitialize Klasse2
  • TestInitialize TC3 / TestCleanup TC3
  • TestInitialize TC4 / Testcleanup TC4
  • ClassCleanup Klasse2

Wenn die Testfälle gestartet werden, kommt aber folgende Ausgabe:

  • ClassInitialize Klasse 1
  • TestInitialize TC1 / TestCleanup TC1
  • TestInitialize TC2 / TestCleanup TC2
  • ClassInitialize Klasse 2
  • TestInitialize TC3 / TestCleanup TC3
  • TestInitialize TC4 / Testcleanup TC4
  • ClassCleanup Klasse 1
  • ClassCleanup Klasse 2

Die Klasse wird wie vermutet mit dem ersten Testfall einer Klasse initialisiert, aber erst aufgeräumt, nachdem alle Testfälle, aller Klassen, abgeschlossen sind.
Das liegt daran, dass bei der normalen Durchführung, eine Aufruf-Reihenfolge der einzelnen Testfälle nicht sichergestellt werden kann.

Muss vor dem Aufruf der zweiten Klasse sichergestellt sein, dass die erste Klasse abgeschlossen ist (z.B. Filezugriff), kann es entweder durch Ordered Tests oder durch Auslagerung der Initialisierung / Abschlusslogik  in die TestInitialize / Cleanup Methoden realisiert werden.

Geschrieben in Microsoft Test Manager,Ranorex,Selenium,Unit Tests,Visual Studio Testframework,VS UI Automatisierung | Keine Kommentare