Zum Inhalt springen

Projektanfrage

Sprechen wir ganz unverbindlich über Ihr Projekt.

Oder nutzen Sie unser Kontaktformular

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.

Was ist ein 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.

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' => 'max.m@example.com',
            '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' => 'max.m@example.com',
        ]);

        // Ü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.

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.