Hilfe, meine Testergebnisse stimmen nicht – was nun?

Seit Einführung des neuen JSON-Build Systems im TFS steht auch der Build Task Run Functional Tests zur Verfügung. Dieser ermöglicht die Ausführung von Selenium – und anderen funktionalen Test-Frameworks durch einen Test Agent auf einer Menge von Remote-Maschinen (d.h. auf Rechnern ohne Build Agent). Mit diesem ist es möglich nicht nur Tests auf Basis von Test Assemblies auszuführen, sondern auch Test Suiten zu verwenden. In letzterem Fall werden alle darin enthaltenen Test Cases, welche mit einer automatisierten Test Methode verknüpft sind und somit den Automation Status = Automated aufweisen, ausgeführt und die Ergebnisse der Test Cases im TFS automatisch gesetzt. Für datengetriebene Tests jedoch kann es vorkommen, dass Test Cases fälschlicherweise als Passed markiert werden. Damit verlieren die Ergebnisse der automatisierten Testläufe innerhalb der ausgeführten Test Suiten ihre Aussagekraft.

Keine Angst vor Veränderung!

Tester, die sich mit automatisierten Oberflächentests auseinandersetzen, kennen die Problematik: Oberflächen werden modernisiert und die dafür erstellten Tests lassen sich nicht mehr ausführen, da einzelne Elemente oder ganze Oberflächen neu angeordnet wurden. Nun stellt sich die Frage, ob automatisierte Oberflächentests überhaupt sinnvoll für sich stark wandelnde Oberflächen realisierbar sind? Die Antwort auf diese Frage finden…

Qualität als Konzept: Aus der Werkzeugkiste eines Testers – Tools zur Untersuchung von Oberflächen

Eine wesentliche Aufgabe im Testing ist es, sicherzustellen, dass die Software in verschiedenen Anwendungsszenarien, wie z.B. mit verschiedenen Endanwendergeräten, Betriebssystemen oder Browsern, fehlerfrei und in gleicher Weise funktioniert. Werden ausschließlich manuelle Tests ausgeführt, so stößt man bei dieser Aufgabe aufgrund der Komplexität und dem damit verbundenen hohen zeitlichen Aufwand schnell an seine Grenzen. Automatisierte Oberflächentests hingegen bieten hierfür eine skalierbare Lösung, welche zudem die Fehleranfälligkeit der Tests reduziert.

Automatisierte Oberflächentests steuern die Oberflächenelemente einer Anwendung an und führen vordefinierte Aktionen auf ihnen aus, wie z.B. das Befüllen einer Textbox oder das Drücken eines Buttons. Dabei werden die Oberflächenelemente anhand einer oder mehrerer Eigenschaften, wie z.B. dem Namen oder der ID, identifiziert. Eine zentrale Aufgabe beim Erstellen solcher automatisierter Oberflächentests ist das Bestimmen eben dieser Eigenschaften, mit welchen die Oberflächenelemente identifiziert werden. Aus der Bandbreite an Tools, die hierfür verwendet werden können, werden in diesem Blogbeitrag die beiden Tools Inspect und die Developer Tools des Internet Explorers vorgestellt.

Ein Turbo für die Testausführung

Mit Hilfe von Unit-, Integrations- und Systemtests lässt sich die Funktionalität von einzelnen Methoden, Modulen oder der gesamten Anwendung automatisiert und kontinuierlich überprüfen. Mit zunehmender Komplexität einer Anwendung steigt die Anzahl der Tests sehr stark. Obwohl einzelne Tests zumeist sehr schnell ausgeführt werden, führt die schiere Masse häufig zu einer hohen Gesamtlaufzeit. In der Folge werden Tests lokal oft überhaupt nicht mehr und im Continuous Integration Build oft nur noch eine Teilmenge ausgeführt. Mögliche Fehler werden dann erst stark verzögert im Nightly-Build entdeckt. Gibt’s denn da keine Möglichkeit die Ausführung zu beschleunigen?

Neu in TFS 2013: Build Process Template Änderungen

Build Prozesse bilden das Fundament moderne Entwicklungsprozesse und ein Sicherheitsnetz für viele Entwicklerteams. Schlagwörter wie Continous Integration und Continous Delivery sind aus dem Entwickler-Sprachgebrauch nicht mehr wegzudecken. Build Prozesse werden hierbei für vielfätige Dinge eingesetzt, Übersetzung der Software, Versionierung, Integration und Prüfung der geänderten Sourcen, Testen, Erstellung von Setups, Deployments, Ausführung von automatischen Tests etc..

In der TFS Plattform ist das Build-System bereits seit der ersten Version (TFS 2005) ein essenzieller Bestandteil. Auch die Build-Plattform hat wie der TFS über die Jahre vielfältige Änderungen erlebt. In den TFS Versionen 2005 und 2008  basierte der komplette Prozess noch vollständig auf MSBuild (TFSBuild.proj). Mit TFS 2010 wurde die Steuerung des Arbeitsablaufs auf die .NET Workflow Foundation umgestellt. Es wurden dadurch völlig neue Möglichkeiten eröffnet. Entwickler waren erstmals nicht mehr auf rein sequenzielle Abläufe limitiert. TFS 2012 brachte hier anschließend kleinere Detailverbesserungen.

Im nächsten TFS 2013 Release stehen jetzt wieder größere Änderungen an. Auf die einzelnen Änderungen und Anwendungsmöglichkeiten wird in den folgenden Kapiteln eingegangen.

Neu in TFS 2013: Load-& Performance Testing mit Azure

Bereits seit Visual Studio 2005 sind für Anwender Last- & Performance Tests sehr einfach mit  Visual Studio realisierbar. Mit wenigen Mausklicks und ein paar Zeilen Code können Anwender umfangreiche Lasttests für ihre Anwendungen realisieren. Mit einem lokalen Visual Studio besteht die Möglichkeit auf einem normalen Rechner bis zu 250 parallele Anwender auf einer Maschine zu simulieren. Diese Anzahl kann theoretisch auf eine unendliche Anzahl an parallelen Nutzern erweitert werden, wenn zusätzlich eine Serverinfrastruktur bestehend aus Test Controller und Test Agents angebunden wird (siehe nachfolgende Grafik).

Test controllers and agents

(Quelle: [3])

An genau dieser Stelle gibt es im Alltag oft Probleme. Benötigt man eine große Anzahl an parallelen virtuellen Nutzern, dann wird auch ein großer Rechnerpark (Farm) benötigt. Eine solche Rechner-Farm ist normalerweise mit umfangreichen Kosten und Bereitstellungszeiten verbunden. Gerade in kleinen bis mittleren Projekten oder bei unregelmäßiger Ausführung wäre ein großer Rechnerpark deshalb wirtschaftlich nicht sinnvoll oder technisch nicht realisierbar. In den nachfolgenden Kapiteln lernen Sie die neuen Möglichkeiten kennen, sehr einfach Ihre Visual Studio 2013 Lasttests über die Microsoft Cloud Lösung Windows Azure ausführen zu können.