Frage

Ich habe mit der Entwicklung eines Systems zur automatisierten GUI-Tests beauftragt, und ich konnte einige Ratschläge verwenden. Wie es der Zufall wollte, sind wir in der Mitte einer großen Neugestaltung unserer GUI und die Entwickler die Arbeit tun, offen ihren Code freundlicher Automatisierung zu machen. Mein Problem ist, dass ich nicht sicher bin, was sie zu fragen, hinzuzufügen. Ganz gleich, ob Haken hinzugefügt werden kann nicht die Funktionalität, Aussehen oder die Sicherheit der Schnittstelle auswirken und sollte keinen spürbaren Einfluss auf die Leistung haben. Other than that, ist der Himmel die Grenze!

Die betreffende Anwendung ist eine web-basierte Java-Anwendung über AJAX abgerufen. Die meisten der vorhandenen Funktionen sind codiert mit jsp, Javascript und ein wenig Flash 8. Die nächste Welle der Funktionen wird die YUI Javascript-Bibliothek . Ich bin ziemlich sesshaft auf Selen als Testwerkzeug aufgrund seiner Flexibilität und Preisschild (kostenfrei). Wichtiger Punkt: Ich bin mit dem Ziel für Test-Wiederverwertbarkeit und Einfachheit der Wartung. Meine Präferenz ist, Code zu schreiben, die validiert und übt die Seitenelemente anstatt ein Datensatz-und-Wiedergabe-System für Testentwicklung erkennt.

Kann jemand einige Hinweise geben, welcher Haken im Code oder einig Best Practices platziert werden kann Testentwicklung einfacher und die Tests selbst robuste?

machen
War es hilfreich?

Lösung

Grund Leitprinzip:., Wenn sie möchten, dass Sie etwas testen, Tester brauchen eine Möglichkeit, die Anwendung in diesen Zustand zu erhalten, und einmal in diesem Zustand eine Art und Weise zu bestätigen, dass der Staat richtig ist

Das erste, was ist sie, um sicherzustellen, versteht, dass Automatisierung ist die Programmierung und die Benutzeroberfläche ist Ihre API.

  • Abkommen nicht willkürlich die Benutzeroberfläche ändern - wenn Tester Bob sehen, dass die Komponente von einer Schaltfläche auf einen Link geändert, und es entspricht den Spezifikationen, Klicks und geht weiter. Während eine relativ einfache Codeänderung in der Automatisierung ist es eine Änderung, die an mehreren Standorten vorgenommen können müssen. (Ihr Job als Tester ist, dass der Wandel zu verstehen, geschieht und minimiert die Kosten für Wartung, ihre Aufgabe ist es, nur wichtige Änderungen vornehmen und die Auswirkungen zu verstehen)

  • Eine Art und Weise, welche Seite Sie zu bestimmen, sind auf .... Bob den Unterschied zwischen Login und Auftragserfassung sagen kann, aber wie wird die Automatisierung wissen? Wenn ein Eingabe-Feld mit dem ‚Benutzername‘ -Label, der Login-Seite. Wenn ein Eingabefeld mit Bestellnummer, Bestellfeld.

Nicht gut - besser ist es ein konsistentes UI-Element der Seite zu identifizieren -. Seitentitel, versteckte Komponente, etc

  • Ein Weg, um eindeutig jedes Element zu identifizieren, die Sie brauchen, um mit (klicken, eingeben, überprüft, etc.) zu interagieren und nicht INPUT_42 ....

  • Stellen Sie die Entwickler, welche Informationen die Tester sie zur Verfügung stellen kann ihre Debuggen zu beschleunigen, und sie bitten, sie in eine Protokolldatei setzen

  • Die Fähigkeit Zustand des Programms dump

  • Die konsequente Fehlerbehandlung und Reporting (auch nur gutes UI-Design)

Andere Tipps

Wie bei den meisten Fragen, es hängt davon ab. Vor allem auf, was Ihre Website aussieht und welche Art von Kontrollen sind auf den Seiten - gibt es eine Menge von wiederholten Elementen etc

?

Ich habe viel Erfolg mit Selenium RC und Selenium IDE hatte. Die Hauptsache ist immer zur Verwendung von Selen und seine Befehle verwendet. Es ist auch hilfreich, sich daran zu gewöhnen Objekte auf der Seite (XPaths und CSS-Selektoren, sowie ‚enthält‘ Funktion) zu lokalisieren. Was Sie nicht wollen, ist eine Menge von Elementen, die den gleichen Weg wählen haben. Wenn die Tabellen und divs unter keinen eindeutigen Teil zu ihnen haben, kann es zusätzliche Komplexität zu Ihren Tests hinzufügen.

<html>
  <body>
    <table>
      <tr>
        <td>
          <div></div>
          <div></div>
          <div></div>
        </td>
      </tr>
    </table>
    <table>
      <tr>
        <td>
          <div></div>
          <div></div>
          <div></div>
        </td>
      </tr>
    </table>
  </body>
</html>

Bilder zu testen, sein schöne Lage sein, für ihre Existenz zu überprüfen, basierend auf etwas anderes als die Bilddateinamen, so dass Sie sich nicht Ihre Tests ändern, wenn das Bild aktualisiert wird. Wenn Sie Flash-Objekte testen müssen, diese Website überprüfen.

Darüber hinaus gibt es nicht viel, dass ich bemerken, dass in der Entwicklungsseite eingebaut werden kann. Sobald Sie die Tests beginnen Einrichten und Elemente auf der Seite lokalisiert, werden Sie wahrscheinlich ziemlich schnell sehen, was die Entwickler tun müssen, um Ihnen zu helfen.

Ein Ratschlag: halten Sie Ihren Test-Code in mindestens zwei Abstraktionsebene :

  1. obere Schicht : Dies sollte eine gewisse Art von Fassade sein, die auf Ihre spezifische Anwendung Terminologie / Aktionen etc. Diese Schicht nicht direkt verwenden, um das Selenium RC Bibliothek orientiert ist . Im Hintergrund verwendet es den ...
  2. ... untere Schicht : eine Bibliothek mit einigen gemeinsamen Testmustern (Beispiel: " behauptet, daß der Wert X des Steueroptionsfeldes wird so gewählt "), das die Selenium RC-Bibliothek verwendet.

Auf diese Weise Ihre Tests werden sauberer zu halten und verständlicher in Bezug auf das, was getestet wird. Wir haben sogar versucht einen dreischichtigen Ansatz, der dritten (obersten) Schicht, welche die Tests sind XML spezifiziert unter Verwendung von . Dies war, um für unsere nicht-Programmierung Tester in der Lage sein, Abnahmen zu spezifizieren, ohne in den C # -Code einzutauchen.

Kommentare von McWafflestix und s_hewitt Hinzufügen - GUI-Elemente müssen ordnungsgemäß gekennzeichnet sein, einzigartig und berechenbar für den Erfolg mit gui Automatisierung. Wenn die Element-IDs nicht vorhersehbar sind, werden Sie in Schwierigkeiten geraten. Vorhersehbare bedeutet nicht notwendigerweise statisch. Für die statische Seitenelemente wie ein Feld Benutzername oder ein Login-Button, würde ich den Namen / ID für diese erwarten von Build statisch sein zu bauen und laufen zu laufen. Für Kontrollkästchen, Optionsfelder, dynamische Inhalte, würde ich erwarten, dass diese dynamische, noch vorhersehbar. Zum Beispiel könnten Sie ein div mit class = „contentdetail“ haben und eine id = „12345“. Solange Sie Ihre XPath-Handwerk können Sie das Objekt mit zuverlässig interagieren müssen zu finden, sollten Sie gut sein.

EDIT: Eine gute Möglichkeit für Entwickler Testautomatisierung zu unterstützen, ist mit Testaufbau. Je nach Anwendung, automatisierter Test-Setup und Teardown können problematisch sein. Zum Beispiel in einem Lager Workflow-Anwendung, die Tests zu Beginn des Workflows (nehmen Elemente in das Lager) sind einfach einzurichten, aber die Tests am Ende des Workflows (ein Element aus dem Lager des Kunden versandt) haben so viele Abhängigkeiten (Artikel im Lager sein muss, mit einer ausreichenden Menge, in der richtigen Inventar Standort, etc ...), dass die meisten Ihrer Automatisierungscode mit nur Navigation und Eingabe Ihren Weg durch die App auf den Punkt zu bekommen umgehen können, wo Sie durchführen können ein Test. In diesen Fällen kann es vorteilhaft sein, eine Art von externen Dienstprogramm haben (außerhalb der app, so dass die Haupt gui unbeeinflußt ist) Abhängigkeiten zu injizieren oder die Datenbank in einen bekannten Zustand zurückzusetzen. In meinem Lager Beispiel Ihr Nutzen könnte das Szenario durch die api Ebene eingerichtet, so dass die automatisierten GUI-Tests an der betreffenden Stelle abholen können.

Es gibt sehr wenig, dass die Entwickler auf den Code hinzufügen können, um zu helfen.

Das Problem ist, dass, wenn Sie die Ausführung von Code-Pfade und die Gültigkeit dieser Codepfade testen wollen, dass in Unit-Tests durchgeführt werden sollten, und diejenigen, vollständig von Ihrem GUI geschieden werden sollte. Aber wenn Sie wirklich Ihre GUI testen wollen, dann haben Sie jetzt noch eine Benutzereingabe zu simulieren. Das einzige, was dabei helfen kann, ist Ihre Objekte und Steuerelemente richtig so markiert haben, dass sie richtig von Ihrem Test-Framework erfasst werden kann und ausgeübt werden. Other than that, ist es einfach nicht viel, was getan werden kann (obwohl das ziemlich viel in sich selbst helfen kann).

Ich bin ziemlich grün (richtige) Unit-Tests, sondern lief über einige erwähnt, dass Sie versuchen sollten, und vermeiden Sie Ihre GUI zu testen. Sie weglassen in der Regel spezifische Gründe, so kann ich sie nicht wirklich sichern.

Der Ansatz, den ich nehmen (und ich denke, der Ansatz von Juval Löwy in „Programming .NET-Komponenten“ adviced) ist und abstrakte der eigentliche Code von der GUI über eine Schnittstelle, um zu versuchen, die mich Unit-Tests für alle Unternehmen schreiben können durch die GUI ausgelöst Logik, ohne tatsächlich die Prüfung der GUI selbst.

Es funktioniert ziemlich gut und hat dazu geführt, viel sauberen Code mit großer Trennung von Business-Logik von GUI und macht auch GUI-Änderungen sehr viel weniger Stress.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top