Cloudogu Logo

Hallo, wir sind Cloudogu!

Experten für Software-Lifecycle-Management und Prozess­auto­mati­sierung, Förderer von Open-Source-Soft­ware und Entwickler des Cloudogu EcoSystem.

featured image Funktionelles Testen mit Gauge
05.12.2023 in Quality

Funktionelles Testen mit Gauge


Daniel Huchthausen
Daniel Huchthausen

IT Consultant


Inhaltsverzeichnis

Gauge ist ein leichtgewichtiges, verhaltensgesteuertes Test-Framework, mit dem Sie End-to-End-Tests automatisieren können. In diesem Beitrag zeigen wir ein Beispiel dafür, wie man ein Test-Framework mit Gauge in Java-Code schreibt.

Wenn Sie erfahren möchten, wie Sie Gauge installieren und einsetzen können, sollten Sie diesen Einführungsbeitrag in unserem Partnerblog lesen.

Gauge allgemein

Mit Gauge werden die Testfälle in zwei verschiedenen Schichten geschrieben: die vom Menschen lesbaren Testspezifikationen und die Testausführung, die in einer Programmiersprache geschrieben wird. Diese Struktur der Tests hat zwei große Vorteile:

  • Sie erstellen eine lesbare Dokumentation, indem Sie Ihre Testspezifikation schreiben
  • Die Testspezifikationen werden in Markdown geschrieben, so dass auch Personen ohne Programmier-Hintergrund sie schreiben und entwerfen können. Softwareentwickelnde können dann den Testcode mit einer Programmiersprache implementieren.

Darüber hinaus bietet Gauge auch zahlreiche Alternativen für die Arbeit mit dem Programm:

  • Um Gauge zu verwenden, können Sie entweder das Kommandozeilentool oder Ihre IDE verwenden: Intelli J und Visual Studio werden unterstützt.
  • Je nach Situation und persönlicher Vorliebe können Sie Testfälle in verschiedenen Sprachen schreiben. Sie haben die Wahl zwischen C#, Java, Ruby und Groovy.
  • Die Testdaten können als Text- oder CSV-Dateien bereitgestellt werden.
  • Für die Testausführung können Sie zwischen Maven, Ant und Gradle wählen.

Beispiel

Um Ihnen zu zeigen, wie das Schreiben von Tests mit Gauge funktioniert, möchten wir Ihnen ein Beispiel für einige Tests zeigen, die wir für das Cloudogu Ecosystem geschrieben haben. In der linken Spalte sehen Sie die menschenlesbaren Testspezifikationen, die in Markdown geschrieben wurden, und in der rechten Spalte den in Java geschriebenen Testcode.

Test Spezifikation Test Code
SCM Integrationstests ===================== Tags: scm Some SCM integration tests
public class SCMSteps {
/*--------------
Authentifizierung
--------------*/
Tags: scm, workflow Test SCM Cas Authentifizierung Workflow
/*----------------------------
Scenario 1 Authentifizierung
----------------------------*/
* Öffnen des SCM-Managers
  @Step("Open SCM")
    public void openSCM(){
      Driver.webDriver.get(EcoSystem.getUrl("/scm"));
      assertThat(Driver.webDriver.getTitle(),
      startsWith("CAS"));
    }
* SCM-Login "admin" mit Passwort "password"
  @Step("SCM-Login <user> with password <pwd> ")
  public void loginToCasSCM(String user, String pwd){
    assertThat(Driver.webDriver.getTitle(),
    startsWith("CAS"));
    CasPage page = EcoSystem.getPage(CasPage.class);
    page.login(user,pwd);
    SCMPage scmPage =   EcoSystem.getPage(SCMPage.class);
    assertThat(scmPage.getCurrentUsername(), is(user));
    assertThat(Driver.webDriver.getTitle(),
      containsString("SCM Manager"));
  }
* Ausloggen aus dem SCM-Manager
  @Step("Logout of SCM")
  public void logOutOfCas(){
    SCMPage page = EcoSystem.getPage(SCMPage.class);
    page.logout();
    openSCM();
  }
/*--------------
REST API u+p
--------------*/
Tags: scm, rest_api Test API durch Zugriff auf die json-Datei ohne Cas-Authentifizierung
/*-----------------------------------
Szenario 2 REST API u+p
-----------------------------------*/
* Zugriff auf SCM-API über REST-Client für "admin" mit Passwort "password"
  @Step("Access SCM API via REST client
  for <user> with password <password> ")
  public void createRESTClientForSCMAPI(String user, String password){
    SCMAPI api = new SCMAPI(user,password);
    DataStore scenarioStore = DataStoreFactory.getScenarioDataStore();
    scenarioStore.put("api", api);
    scenarioStore.put("user", user);
  }
* SCM json-Datei abrufen
  @Step("Obtain SCM json file")
  public void compareJsonFile(){
    DataStore scenarioStore = DataStoreFactory.getScenarioDataStore();
    SCMAPI api = (SCMAPI) scenarioStore.get("api");
    String user = (String) scenarioStore.get("user");
    String userName = api.getFirstName();
    assertThat(userName, is(user));
  }
* SCM API REST Client schließen
  @Step("Close SCM API REST client")
  public void closeRestClient(){
    DataStore scenarioStore = DataStoreFactory.getScenarioDataStore();
    SCMAPI api = (SCMAPI) scenarioStore.get("api");
    api.close();
  }

Ich denke, unsere beiden Beispielszenarien bedürfen keiner großen Erklärung. Szenario 1 besteht aus drei Schritten: Aufruf der Anwendung SCM-Manager, Login mit definierten Anmeldedaten und Logout aus der Anwendung. Szenario 2 testet die REST-API des SCM-Managers. Ich bin mir ziemlich sicher, dass Sie das beim Lesen der Testspezifikation bereits herausgefunden haben. Das zeigt, wie gut die Testspezifikationen geeignet sind, um als Dokumentation der Funktionalität einer Anwendung zu dienen.

Wenn Sie nun Interesse an Gauge haben, besuchen Sie die Website und legen Sie los.

Fazit

Unsere Erfahrungen mit Gauge sind gut. Es ist eine vielseitige und unkomplizierte Lösung zur Erstellung automatisierter End-to-End-Tests. Testfälle können leicht wiederverwendet und automatisiert werden, und die in Markdown geschriebenen Testspezifikationen eignen sich hervorragend für die Erstellung der Testdokumentation.

Mit freundlichen Grüßen,

Ihr Cloudogu Team