Parasoft C/C++test 2022.2 unterstützt das neue MISRA C:2012 Amendment 3 und eine Entwurfsversion von MISRA C++ 202x. Erfahren Sie mehr >>

Funktionale Regressionstests mit SOAtest als Teil eines kontinuierlichen Integrationsprozesses

Von Spencer Debrosse

12. Mai 2017

6  min lesen

Erreichen Sie Geschwindigkeit und schützen Sie Ihre Anwendung vor Regressionen

Kontinuierliche Integration („CI“) ist eine gut verstandene und (zu diesem Zeitpunkt) gut angenommene Praxis. Es ist ein notwendiger erster Schritt, um die Geschwindigkeit der Anwendungsabgabe signifikant zu verbessern.

Durch die kontinuierliche Integration können Entwickler ihre Änderungen in einen „Hauptzweig“ des Quellcodes übertragen, wobei ein einzelner Entwickler möglicherweise an einem einzigen Tag viele Änderungen in den Hauptzweig überträgt. Um sicherzustellen, dass der Hauptzweig makellos, baubar und von hoher Qualität ist, ist es wichtig, ihn nach jeder Änderung zu testen, da er als goldene Kopie des Quellcodes für die Anwendung dient.

(Wenn Sie mehr über kontinuierliche Integration erfahren möchten, empfehle ich Martin Fowlers älteren, aber immer noch interessanten Artikel hier  zur Geschichte der Integration in die Softwareentwicklung und zu den Vorteilen / Best Practices von CI.)

Heute konzentrieren wir uns darauf, wie Parasoft SOAtest so konfiguriert wird, dass funktionale Regressionstests als Teil eines kontinuierlichen Integrationsprozesses ausgeführt werden. In diesem Artikel beschreibe ich die Schritte zum Konfigurieren von SOAtest mit Jenkins, einer beliebten Automatisierungsplattform. Wir werden die Open-Source-Parabank-Anwendung verwenden und sie mit Docker bereitstellen, um die Dinge einfach zu halten.

Wie wird das funktionieren?

Das folgende Diagramm erklärt, was wir in diesem Artikel einrichten werden. Am besten von links nach rechts lesen.

Kurz gesagt, Jenkins wird ein Repo von Github auschecken, das das SOAtest-Projekt namens "Parabank" enthält, das REST-Tests enthält. Jenkins wird auch ein Docker-Image namens parasoft / parabank von Docker Hub abrufen. Dieses Image enthält nicht nur Parabank, sondern auch Tomcat und die richtige Java-Laufzeitumgebung.

Jenkins führt dann eine Instanz dieses Parabank-Images aus (als "Container" bezeichnet). Anschließend weist Jenkins SOAtest an, die von Github gezogenen Tests auszuführen, damit wir unsere Parabank-Instanz validieren können.

Dies ist nicht ganz im Sinne einer echten kontinuierlichen Integration (da ich Ihnen eine vorgefertigte Anwendung gebe), aber ich wollte Docker verwenden, um Ihnen die Mühe zu ersparen, Parabank mit Maven erstellen und installieren zu müssen und konfigurieren Sie Tomcat / Java.

Ein realistischeres / realeres Diagramm von CI finden Sie unten. Der Entwickler checkt den Quellcode in Github ein. Jetzt möchten wir testen, ob sich die Anwendung auch nach den Änderungen des Entwicklers noch in einem guten Zustand befindet.

Die Änderung des Quellcodes in Github löst einen Build in Jenkins aus, und Jenkins startet einen automatisierten Maven-Build (der JUnit-Tests ausführt). Wenn alle Komponententests erfolgreich sind, wird die gepackte Anwendung (parabank.war) auf Tomcat bereitgestellt. SOAtest beginnt dann mit der Ausführung von Black-Box-Funktionstests.

Erst nachdem die Komponententests bestanden wurden (während des Maven-Builds) und die funktionalen Black-Box-Tests bestanden wurden (während der Ausführung des SOA-Tests), werden die ursprünglichen Änderungen des Entwicklers als gut angesehen.

Kommen wir zu den Schritten, die zum Konfigurieren des Prozesses im ersten Diagramm erforderlich sind!

SOAtest und Jenkins konfigurieren

Voraussetzungen:

  • Ein Windows 10-Computer, auf dem Docker ausgeführt werden kann (andere Betriebssysteme funktionieren, aber einige der in diesem Artikel angegebenen Befehle haben möglicherweise eine andere Syntax). Dieses Gerät muss über eine Internetverbindung verfügen.
  • Erstellen Sie irgendwo auf Ihrem Computer eine Datei "hostsettings.properties". Kopieren Sie den Inhalt von my Beispieldatei hinein. Wenn Sie eine Node Locked-Lizenz haben, fügen Sie diese zu Zeile 5 hinzu. Wenn Sie einen Lizenzserver verwenden, setzen Sie Zeile 6 auf true und fügen Sie Ihren Lizenzserver-Hostnamen in Zeile 3 hinzu. Der Pfad zu dieser Datei wird später benötigt.
  • Jenkins 1.651 oder neuer auf demselben Computer installiert
  • SOAtest 9.10 oder neuer installiert und auf dem PATH (damit Sie soatestcli von jedem Verzeichnis aus aufrufen können) desselben Computers.
  • Docker installiert und auf dem Pfad derselben Maschine.

Schritte:

  1. Melden Sie sich in Ihrem Webbrowser bei Jenkins an (Jenkins wird normalerweise unter einer URL wie http: // bereitgestellt : 8080 / Jenkins)
  2. Wir werden zunächst einige Jenkins-Plugins installieren. Wählen Sie links "Jenkins verwalten" und dann im neuen Menü "Plugins verwalten".

  3. Wählen Sie auf der Registerkarte "Verfügbar" die folgenden Plugins aus und installieren Sie sie:
    ein. "Parasoft-Ergebnisse"
    b. "Git-Plugin" (Version 3.30) Wählen Sie "Installation ohne Neustart" und aktivieren Sie auf der Installationsseite das Kontrollkästchen "Jenkins neu starten, wenn die Installation abgeschlossen ist und keine Jobs ausgeführt werden".
  4. Kehren Sie zum Hauptmenü von Jenkins in Schritt 1 zurück. Wählen Sie links „Neues Element“.
  5. Geben Sie den Namen "Parabank Deploy and Test" ein und wählen Sie "Freestyle" -Projekt und dann "OK"
  6. Scrollen Sie im angezeigten Konfigurationsmenü nach unten zur Quellcodeverwaltung und wählen Sie Git. Fügen Sie diese URL zum Feld Repo-URL hinzu: https://github.com/sdebrosse/soatest-automation-example.git . Alle anderen Felder können mit ihren Standardwerten belassen werden.
  7. Scrollen Sie zum Ende der Seite und fügen Sie unter "Erstellen" einen Build-Schritt "Windows-Batch-Befehl ausführen" hinzu (wenn Sie Linux verwenden, wählen Sie stattdessen "Shell ausführen"):
  8. Kopieren Sie den Inhalt des Skripts hier  und fügen Sie es in das Feld für den neuen Erstellungsschritt ein. Sie müssen die Werte der beiden Variablen am oberen Rand des Skripts ändern, um den Pfad zu Ihrer eigenen Datei "sitesettings.properties" wiederzugeben und anzugeben, wo ein temporärer Arbeitsbereich erstellt werden soll (SOAtest erstellt diesen Arbeitsbereich während des Testprozesses). Kommentare im Skript erklären, was in jeder Zeile passiert:
  9. Das ist es. Wir sind jetzt bereit, unseren Jenkins-Job auszuführen! Stellen Sie sicher, dass Sie zuerst alle offenen Instanzen von SOAtest schließen. Wählen Sie dann unten im Konfigurationsmenü Speichern und klicken Sie links auf "Jetzt erstellen":
  10. Sie können links auf den laufenden Job klicken und dann die Live-Konsolenausgabe anzeigen:

    Das Protokoll zeigt am Ende "ERFOLG" an, wenn alles richtig funktioniert hat. Dies bedeutet, dass Sie erfolgreich ein SOAtest-Testprojekt von Github abgerufen, einen Docker-Container mit Parabank bereitgestellt und Tests für diese Parabank-Instanz ausgeführt haben. Am Ende des Prozesses haben wir den Parabank-Container automatisch gestoppt und unseren temp_workspace gelöscht, um unsere Umgebung zu bereinigen. Aber warten Sie eine Sekunde, vielleicht haben Sie beim Betrachten der Protokolle bemerkt, dass wir einige Testfehler hatten…Ja, einige unserer Tests gegen Parabank sind fehlgeschlagen. Wenn wir möchten, dass unser Jenkins-Build aufgrund von SOAtest-Testfehlern fehlschlägt, fügen wir das Flag -fail hinzu, wenn wir soatestcli aufrufen. Etwa so: soatestcli.exe -fail -data %TEMP_WORKSPACE_PATH% -resource /Parabank -config „builtin://Demo Configuration“ -localsettings %LOCALSETTINGS_PATH%Wenn Sie den Test in der Benutzeroberfläche von SOAtest Desktop öffnen, werden Sie Folgendes feststellen Fehler ist in erster Linie ein Problem mit der Testdaten-/Testumgebungskonfiguration. Unser Kreditverarbeiter lehnte einen Kredit ab, den er hätte genehmigen sollen.

So geht’s weiter:

Die Konfiguration der Testumgebung und die Testdaten sind die größten Hindernisse für zuverlässiges automatisiertes Testen. In zukünftigen Artikeln werde ich untersuchen, wie eine Technologie namens Service-Virtualisierung dazu beitragen kann, dass wir immer genau die Umgebungskonfiguration haben, die wir benötigen, um unsere Tests jederzeit zuverlässig auszuführen – dies wird uns von Continuous Integration in die Welt von Continuous führen Testen.

Von Spencer Debrosse

Erhalten Sie die neuesten Nachrichten und Ressourcen zum Testen von Software sofort.