Automatisierte Akzeptanz-Tests - Benutzeroberfläche oder API?
Ich habe recherche automatisierten Akzeptanz-Tests über die letzten Tage, das lernen über BDD & JBehave, FitNesse & Schlank, Selen & WebDriver, etc.
Ich habe gerade gesehen diese video von Robert C. Martin, wo er zeigt, wie Sie mithilfe FitNesse zu schreiben und zu verwalten solche tests. Gegen Ende, jemand fragt, ob diese tests trifft das UI. Martin geht auf zu erklären, dass die Kopplung von Abnahme-tests, um die Benutzeroberfläche kann sehr kostspielig werden, da änderungen an der UI sind Recht Häufig. Konnte ich denke auch, dass solche tests konnte nur geschrieben werden, nachdem die Benutzeroberfläche wurde entwickelt, der Tester hinter dem Zeitplan, per definition.
Muss ich Fragen: was ist die alternative? Martin scheint das zu sein, was bedeutet, dass die tests schlagen sollten eine versteckte Schicht, manipulieren die Anwendung der business-Schicht. Mein Verständnis ist, dass dies würde erfordern zusätzliche Arbeit, nicht zu erwähnen, dass es würde aussetzen eine neue API, die müssten gesichert werden, sobald Sie in einer Produktionsumgebung.
Konnte das schlagen der business-Schicht durch Anwendung Dienstleistungen ausreichend?
Welche Erfahrungen haben Sie gemacht?
Vielen Dank für das teilen!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tests über die Benutzeroberfläche oder das schlagen der business-Schicht können Sie unmittelbar sehen, wie zwei verschiedene Arten von tests, mit verschiedenen vor-und Nachteile.
Wenn Sie die Prüfung der UI direkt, dann sind Sie testen, was der Benutzer sieht, und Sie nicht haben, um code ändern, um der Lage sein, um es zu testen. Allerdings wird es ziemlich schwer zu testen Grenzfällen, oder wie reagiert das system auf die außergewöhnlichen Bedingungen (z.B. Ausnahmen). Es ist wie Robert sagt Martin, spröde. Wenn Sie Ihre änderungen in der Benutzeroberfläche, Sie brauchen, um Ihre tests. Also Tests über die Benutzeroberfläche hängt von der Reife der Benutzeroberfläche. Später im Projekt, das UI ist mehr stabil, also der Prüfung durch die UI macht mehr Sinn. Auch, testen einige Sachen durch die UI ist schwer oder verwickelt.
Wenn Sie die Prüfung der business-Schicht können Sie dann leichter test-Ecke Bedingungen, und Sie sind weniger anfällig für änderungen in der Benutzeroberfläche. Jedoch, wie Sie sagen, die software geschrieben werden, in einer solchen Art und Weise, dass Tests dieser Art. Sie können auch setzen Sie eine neue Schnittstelle, um es zu ermöglichen, die dann gepflegt werden muss. In meiner Erfahrung, ist es manchmal sehr schwer zu bekommen, die Entwickler zu unterstützen, diese Art von Schnittstelle. Es ist gesehen als nicht so wichtig wie die eigentliche Schnittstelle. Es ist aber immer möglich. Diese Art der Schnittstelle muss das buy-in von den Entwicklern, sonst riskieren Sie, dass es 'wird nicht unterstützt' im Laufe der Zeit.
Wenn Sie nicht über das externe interface, dann versuchen Sie Fragen. Man weiß nie, Sie könnten in der Lage sein, Sie zu überreden, dass es eine gute Idee. Es ist einfacher am Anfang des Projekts.
Wenn Sie über die externe Schnittstelle, dann verwenden, um testen Sie Ihre business logic.
Ansonsten haben Sie, die Benutzeroberfläche zu verwenden, um zu testen, diese Dinge. Ein Ansatz wäre das verwenden der UI zu tun, smoke-Tests, um eine Antwort auf die folgende Frage(N): Ist diese software getestet? Denken Sie an die gemeinsamen Dinge, die Sie haben, um zu testen, jedes mal, wenn Sie ein build aus dem dev. Kann ich mich anmelden, kann ich Abmelden, hat die main-Seite angezeigt wird, kann ich dann einfach um? Pick 5 oder 6 von diesen Dingen, und Aufbau einer automatisierten test-suite zum testen dieser Dinge. Verwenden Sie diese tests als Richtschnur dafür, wie viel Funktionalität Sie testen können über die Benutzeroberfläche und wie nützlich es ist.
Dann können Sie dies als argument, wenn Sie gehen an den Entwickler und bitten Sie für die externe Schnittstelle.
Leider braucht man beide. Im Allgemeinen würden Sie wollen, automatisieren Sie die business-Schicht-tests mit so etwas wie fitness. Die Vermeidung der UI-im Grunde gibt Ihnen die Sicherheit, dass die definierten business-Regeln, die immer funktionieren. Die Automatisierung durch die Benutzeroberfläche benötigen viel mehr Wartung. Aber auf der plus-Seite, da viel von der UI verwendet Mechanismen zur Verfügung gestellt, die von der Plattform (z.B. c#/Winforms) der Großteil der UI-tests können Sie nur, wenn änderungen vorgenommen werden, wenn Sie gut abgedeckt sind, die mit anderen Arten von tests (wie business-Schicht). Automatisierte tests müssen gepflegt und aktualisiert, aber die UI-tests dazu neigen, benötigen mehr Wartung und sind oft weniger zuverlässig im Laufe der Zeit.
Ich stark befürworten die Verwendung von nicht-UI-Modus der Automatisierung von Akzeptanztests. Das problem können Sie Gesicht ist im Verkauf die Idee zu herkömmlichen code-blind-Tester, die würden das Konzept eines nicht visuellen überprüfung der Kriterien für die Annahme unzureichend. Ich bevorzuge einen mittleren Weg, wo eine Akzeptanz-Kriterien wird geprüft, indem zwei verschiedene tests. Der erste Satz ist rein der Logik konzentriert und daher umgesetzt gegen eine API/Service/Remote-Ebene. Dieses set ist 100% automatisiert. Der zweite Satz ist ein UI-überprüfung der gleichen Anforderung. Meine persönliche Meinung ist nicht zu automatisieren, den zweiten Satz aus den erklärten Gründen in anderen Antworten. Als für eine Schicht zum schreiben der tests vor, es hängt vom team ab. Wenn das team ist wirklich engagiert in Richtung auf Qualität, Sie sehen dies als einen wesentlichen Bestandteil der Produktentwicklung. Jedoch in der realen Welt, es ist eine harte verkaufen. Es sei denn, es ist explizit vom beginnen ein Projekt, es würde schwierig sein, die Nachrüstung einer solchen Schnittstelle in einem Laufenden Projekt. Ich würde vorschlagen, wenn Sie möchten, implementieren Sie automatisierte acceptance-tests, tun Sie es so früh wie möglich. Als Produkt Alter, die Wahrscheinlichkeit eines solchen hacks umgesetzt wird, sinkt drastisch.
Kann ich nur sprechen für UI Test, Q&A style:
A) Ist unser UI ist schon stabil oder immer noch ändern dürfte ziemlich viel?
Stabil - automation bringt zusätzlichen Wert
Wahrscheinlich ändern - nicht automatisieren, Sie verbringen mehr Zeit für die Pflege (nochmal) diese tests.
B) Unsere UI-stabil ist, sollte automatisieren wir so viel wie es möglich ist?
Gott Nein!
1) Nehmen Sie alle Ihre test-Skripts (sagen wir 100)
2) Entscheiden, welche sind automatisierbar (80)
3) Sortieren Sie durch Priorität (Blocker, critical, minor)
4) Automatisieren Sie die Blocker und die kritischen ersten (sagen, 20/80)
Sehen, wie das funktioniert, und mehr automatisieren, wenn die Notwendigkeit entsteht.
C) Welche anderen Faktoren sollte ich berücksichtigen, wenn die Automatisierung von UI?
Alles wie unten gezeigt (test-Pyramide ist ein Konzept, entwickelt von Mike Cohn):
Erstellen Sie eine Schnittstelle für die Prüfung ist "der Traum von Testern", aber das aktivieren /deaktivieren es wird ein Alptraum für die Bereitstellung. U müssen "test builds" und "bereitstellen von builds" mit verschiedenen Prüfungen zu Rauchen. Aber jeder Kompromiss ist gut, so lange u-limit-UI Tests automatisieren.
Soweit der Mobilen Automation betrifft, ich glaube, wir brauchen keine separate Schnittstelle für nicht-ui-tests. In diesen Tagen gibt es Möglichkeiten, code zu schreiben, mithilfe von mustern, so dass die code-Einheit ist testbar (z.B. Dependency Injection & ein Weg, um auch den privaten Methoden zur Verfügung, die in tests. (z.B. @VisibleForTesting).
Hinweis: ich habe nie geschrieben, non-ui tests noch habe ich jemals verwendet diese Anmerkung. aber wir freuen uns auf Sie. Ich wollte nur zu teilen, @VisibleForTesting Sache zu brechen, die Vorstellung, dass wir eigene Methoden als Schnittstelle für Testzwecke.)
Eine post: https://medium.com/@vadimpushtaev/how-to-test-private-methods-4bc57d4410ff