Privatsphären-Einstellungen

Auf unserer Website verwenden wir verschiedene Arten von Cookies: technische, funktionale und Analyse-Cookies. Grundsätzlich können Sie unsere Seite auch ohne Cookies besuchen. Wenn Sie auf "Akzeptieren" klicken, stimmen Sie der Nutzung dieser Technologien zu. Details

Zum Inhalt springen

Feature Test


Feature Testing ist eine Methode des Softwaretests, bei der die Funktionalität eines Software-Features umfassend überprüft wird.

Feature Testing, auch als End-to-End Testing oder Integration Testing bezeichnet, konzentriert sich darauf, ein vollständiges Feature oder einen bestimmten Anwendungsfall in einer Software zu testen.

Es beinhaltet das Zusammenspiel mehrerer Komponenten oder Module, um sicherzustellen, dass das Feature wie erwartet funktioniert und alle spezifizierten Anforderungen erfüllt.

Welche Testarten gibt es?

Unittest

Der Unittest prüft eine einzelne Komponente oder Funktion einer Software.

Integrationstest

Der Integrationstest prüft die "Zusammenarbeit" von mehreren Softwarekomponenten. Diese Tests helfen, Fehler zwischen den verschiedenen Teilen der Software zu erkennen.

Feature Test

Ein Feature-Test überprüft, wie verschiedene Teile einer Anwendung zusammenarbeiten, um eine bestimmte Funktion auszuführen, ähnlich wie ein Benutzer die Anwendung verwenden würde.

Systemtest

Der Systemtest ist eine Teststufe, bei der das gesamte System anhand aller Anforderungen geprüft wird. Dabei werden ganze Funktionen oder auch einzelne Module getestet. Üblicherweise findet dieser Test in einer speziellen Testumgebung statt und verwendet Testdaten. Diese Testumgebung soll die reale Umgebung des Kunden möglichst genau nachbilden.

Abnahmetest

Der Abnahmetest wird in der Regel manuell vom Kunden durchgeführt. Dabei prüft der Kunde, ob die Software alle erwarteten Funktionen und Ziele erfüllt.

Wozu ist ein Feature Test gut?

Das Sicherstellen der Stabilität der Software ist eine der primären Aufgaben von Feature-Tests.

Durch automatisierte Tests werden potenzielle Fehler frühzeitig aufgedeckt. Dies ermöglicht es den Entwicklern, Probleme zu beheben, bevor das Feature ausgeliefert wird.

Insbesondere erleichtern Feature-Tests die Erkennung von Fehlern nach Code-Änderungen, was es ermöglicht, Fehler schnell zu beheben, bevor die neue Funktion für Benutzer zugänglich wird.

Wie unterscheidet sich der Feature Test zum Unit Test?

Ein Unit-Test hingegen überprüft eine einzelne Komponente oder Einheit des Codes, wie eine Funktion oder Methode, unabhängig von anderen Teilen der Anwendung.

Feature-Tests sind unspezifischer in Bezug auf den Quellcode und simulieren Benutzerinteraktionen, während Unit-Tests spezifische Codeeinheiten isoliert testen.

Testfall und Test-Suite

Ein Testfall im Feature Testing ist ein Szenario, das einen bestimmten Anwendungsfall widerspiegelt. Es beschreibt die Schritte, die durchgeführt werden müssen, um das Feature zu testen, sowie die erwarteten Ergebnisse. Mehrere Testfälle werden oft zu einer Test-Suite zusammengefasst, um verschiedene Szenarien und mögliche Kombinationen von Aktionen und Eingaben abzudecken.

<?php

namespace Tests;

use Tests\TestCase;
use App\Models\User;

class UserRegistrationTest extends TestCase
{
    public function test_user_can_register()
    {
	    // Simuliere einen GET-Request zur Registrierungsseite
		$response = $this->get('/register');

		// Überprüfe, ob die Register-Seite erreichbar ist (Statuscode 200)
		$response->assertStatus(200);

		// Überprüfe, ob die Register-Seite die erforderlichen Eingabefelder anzeigt
		$response->assertSee('Name');
		$response->assertSee('E-Mail-Adresse');
		$response->assertSee('Passwort');
		$response->assertSee('Passwort bestätigen');
	  
          // Erstelle Testdaten für die Registrierung
        $userData = [
            'name' => 'Max Muster',
            'email' => '[email protected]',
            'password' => 'secret',
        ];

        // Simuliere einen POST-Request zur Registrierungs-Route
        $response = $this->post('/register', $userData);

        // Überprüfe, ob die Registrierung erfolgreich war (Statuscode 200)
        $response->assertStatus(200);

        // Überprüfe, ob der Benutzer in der Datenbank existiert
        $this->assertDatabaseHas('users', [
            'email' => '[email protected]',
        ]);

        // Überprüfe, ob der Benutzer nach der Registrierung eingeloggt ist (Redirect-Statuscode 302)
        $response->assertRedirect('/home');

        // Überprüfe, ob der Text "Registrierung erfolgreich" auf der Seite angezeigt wird
        $response->assertSee('Registrierung erfolgreich');
    }
}

Dies ist ein einfaches Beispiel für einen Feature-Test in Laravel mit PHPUnit. Es testet, ob sich ein neuer Benutzer registrieren kann und die Bestätigung nach erfolgreicher Registrierung angezeigt wird.

Wir testen an dieser Stelle das komplette Feature der Registrierung:

  1. Ist die Seite /register erreichbar?

  2. Zeigt die Seite /register das Formular an?

  3. Wenn der Benutzer das Formular absendet, werden die Daten gespeichert?

  4. Wird nach der Registrierung die Bestätigungsseite angezeigt?

Wie werden Feature Tests ausgeführt?

Wenn ein Featuretest ausgeführt wird - üblicherweise über das Terminal (Kommandozeile) - werden nach dem Testlauf die Ergebnisse präsentiert.

In diesem Beispiel verlaufen alle Tests erfolgreich, zwei wurden übersprungen und einer wurde als "risky" markiert, weil er keine Assertion (Annahme, Prüfung) enthält.

Basierend auf diesem Feedback kann während der Entwicklung und vor dem Release einer neuen Softwareversion sichergestellt werden dass alles wie erwartet funktioniert.

Executing Feature Tests in Terminal.

Test-Umgebung

Für das Feature Testing wird eine Testumgebung benötigt, die der Live-Umgebung ähnelt. Dazu sind Seeder und plausible Testdaten wichtig. Es ist empfehlenswert, diese direkt während der Entwicklung anzulegen.

Tests via GitHub Actions ausführen

Die Integration von Feature-Tests in GitHub Pipelines (Actions) ermöglicht eine nahtlose Automatisierung des Testprozesses direkt im Entwicklungsworkflow.

GitHub-Pipelines werden über yaml-Dateien konfiguriert:

name: Run Tests

on:
  push:
    branches:
      - main

jobs:
  tests:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Install dependencies
        run: composer install

      - name: Run feature tests
        run: php artisan test

Diese Konfiguration führt die Feature-Tests aus, indem sie zuerst den Code auscheckt, dann die Dependencies installiert und schließlich die Befehle zum Ausführen der Tests ausführt.

Durch eine CI/CI Pipeline via Github-Actions, können die Tests bei jeder Code-Änderung ausgeführt werden, was die Stabilität merklich erhöhen kann.

Automatisiertes Feature Testing

Aufgrund der Komplexität und des Umfangs von Feature Tests werden diese oft automatisiert durchgeführt. Automatisierte Testframeworks ermöglichen die Definition und Durchführung von Testfällen, die Simulation von Benutzerinteraktionen und die Überprüfung von erwarteten Ergebnissen. Beliebte Frameworks für automatisiertes Feature Testing sind beispielsweise Selenium, Cypress, oder Puppeteer für Webanwendungen.

Wozu kann man Feature Tests noch nutzen?

Performance-Monitoring

Als Teil eines kontinuierlichen Verbesserungsprozesses sollte man auch die Leistung des Codes im Blick halten.

Wenn nach Code-Änderungen die Ausführungszeiten der Tests signifikant zunehmen, kann dies auf ineffizienten Code hinweisen. Indem Entwickler die Ausführungszeiten der Tests im Auge behalten, können sie potenzielle Performance-Probleme frühzeitig erkennen und angehen.

Durch die Identifizierung von Verbesserungspotenzialen und die Implementierung entsprechender Anpassungen kann die Performance des Features im Laufe der Zeit kontinuierlich optimiert werden.

Vorteile des Feature Testing

  • Leichtere Weiterentwicklung
    Wenn man sich bereits zu Anfang eines Projekts mit dem Testing beschäftigt, verläuft die langfristige Weiterentwicklung eines Projekts leichter und günstiger. Tests ermöglichen es den Entwicklern schneller und leichter an Projekten zu arbeiten.

  • Benutzerzentrierte Qualitätssicherung
    Durch das Testen von Features aus Sicht des Benutzers stellt das Feature Testing sicher, dass die Software den tatsächlichen Anforderungen und Erwartungen der Benutzer entspricht.

  • Frühzeitige Fehlererkennung
    Feature Testing hilft dabei, potenzielle Fehler oder Probleme zu erkennen, die nur in einer realen Produktionsumgebung auftreten. Dies ermöglicht es Entwicklern, diese Probleme zu beheben, bevor sie von den Benutzern entdeckt werden.