So erstellen und verwenden Sie gefälschte Datensätze mit Laravel Model Factories

Veröffentlicht: 2023-04-28

Tests sind für die Webentwicklung unerlässlich. Laravel-Modellfabriken definieren Datenbankeinträge auf vorhersehbare und leicht reproduzierbare Weise, damit Ihre App-Tests konsistent und kontrolliert sind. Modellfabriken definieren eine Reihe von Standardattributen für jedes Ihrer Eloquent-Modelle.

Wenn Sie beispielsweise eine Blogging-App erstellen, die es Autoren und Moderatoren ermöglicht, Kommentare zu genehmigen, bevor sie live gehen, müssen Sie testen, ob die Funktion ordnungsgemäß funktioniert, bevor Sie sie Ihren Benutzern bereitstellen. All dies erfordert Testdaten.

Um die oben beschriebene Blogging-App zu testen, benötigen Sie Kommentardaten, um die Funktionalität Ihrer Anwendung zu imitieren und zu testen. Mit Laravel können Sie dies tun, ohne Kommentare von tatsächlichen Benutzern zu erhalten, indem Sie Laravel-Fabriken und Faker verwenden, um gefälschte Daten zu generieren.

In diesem Artikel wird erläutert, wie Sie Kommentardaten ohne Kommentare von echten Benutzern erhalten.

Voraussetzungen

Um dieses Lernprogramm abzuschließen, müssen Sie mit Folgendem vertraut sein:

  • XAMPP
  • Komponist

XAMPP ist eine kostenlose und einfach zu installierende Apache-Distribution, die PHP, Perl und MariaDB – eine MySQL-Datenbank – enthält. Dieses Tutorial verwendet die neueste Version, 8.1.10, die PHP 8.1.10 installiert. Lesen Sie diesen Artikel, wenn Sie XAMPP für MacOS installieren, oder diese Anleitung für Linux. Dieses Tutorial verwendet XAMPP unter Windows.

Composer ist ein Tool, mit dem Sie die Pakete definieren, installieren und herunterladen können, von denen Ihre Webanwendung in der Entwicklung und Produktion abhängt. Dieses Tutorial verwendet Version v2.4.4 von Composer, die PHP-Version 7.2+ erfordert. Sie verwenden Composer, um das Laravel-Installationsprogramm für dieses Tutorial zu installieren.

Sie können auch den vollständigen Code für das Projekt herunterladen, um mitzumachen.

Das Testen Ihrer App sollte kein nachträglicher Einfall sein. Laravel-Modellfabriken können helfen! So geht's ️ Click to Tweet

So richten Sie das Projekt ein

In diesem Abschnitt erstellen Sie ein Laravel-Projekt und verbinden es mit einer Datenbank. Werfen wir einen Blick auf alles, was dazugehört und wie man es bewerkstelligt.

Installieren Sie den Laravel-Installer

Um schnell ein Laravel-Projekt zu erstellen, installieren Sie den Laravel-Installer:

 composer global require laravel/installer

Dieser Code installiert das Laravel-Installationsprogramm global auf Ihrem Computer.

Erstellen Sie ein Laravel-Projekt

Erstellen Sie als Nächstes ein Laravel-Projekt, indem Sie Folgendes ausführen:

 laravel new app-name

Dieser Code bootet ein neues Laravel-Projekt und installiert alle Abhängigkeiten:

Erstellen des Laravel-Projekts
Erstellen des Laravel-Projekts

Eine weitere einfachere Möglichkeit, Laravel zu installieren, ist die direkte Verwendung von Composer.

 composer create-project laravel/laravel app-name

Sie müssen das Laravel-Installationsprogramm nicht installieren, wenn Sie die obige Methode verwenden.

Starten Sie die Anwendung

Sie können jetzt das Verzeichnis in app-name ändern und das Projekt mit Laravels eigenem Befehlszeilenschnittstellen-Tool (CLI), Artisan, starten:

 php artisan serve

Dieser Code startet das Projekt und verbindet es mit localhost:8000 oder einem anderen verfügbaren Port, wenn Port 8000 verwendet wird. Auf localhost:8000 sollten Sie so etwas sehen:

Die Homepage der Laravel-Website
Laravel

Erstellen Sie eine Datenbank

Um Ihre App mit einer Datenbank zu verbinden, müssen Sie mithilfe der grafischen Benutzeroberfläche PHPMyAdmin von XAMPP eine neue Datenbank erstellen. Gehen Sie zu localhost/phpmyadmin und klicken Sie in der Seitenleiste auf Neu :

Das Formular Datenbank erstellen in PHPMyAdmin
Datenbankformular erstellen

Das obige Bild zeigt das Formular „Datenbank erstellen“ mit „app_name“ als Datenbankname.

Klicken Sie auf Erstellen , um eine Datenbank zu erstellen.

Bearbeiten Sie die .env-Datei

Um Ihre App mit einer Datenbank zu verbinden, müssen Sie den DB-Teil der .env- Datei bearbeiten:

 DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=app_name DB_USERNAME=root DB_PASSWORD=

Dieser Code füllt die Datenbankanmeldeinformationen mit Ihrem Datenbanknamen, Benutzernamen, Port, Passwort und Host. Sie können jetzt mit dem Erstellen von Fabriken und Modellen beginnen.

Hinweis: Ersetzen Sie die Werte durch Ihre Datenbankanmeldeinformationen. Wenn der Fehler „Zugriff für Benutzer verweigert“ auftritt, setzen Sie außerdem die Werte für DB_USERNAME und DB_PASSWORD in doppelte Anführungszeichen.

So generieren Sie gefälschte Daten

Nachdem Sie die App erstellt und mit der Datenbank verbunden haben, können Sie nun die erforderlichen Dateien erstellen, um gefälschte Daten in der Datenbank zu generieren.

Erstellen Sie das Kommentarmodell

Erstellen Sie die Modelldatei für die Interaktion mit den Datenbanktabellen. Um ein Modell zu erstellen, verwenden Sie Artisan:

 php artisan make:model Comment

Dieser Code erstellt eine Datei „Comment.php“ im Ordner „app/Models“ mit einigem Boilerplate-Code. Fügen Sie den folgenden Code unterhalb von use HasFactory; Linie:

 protected $fillable = [ 'name', 'email', 'body', 'approved', 'likes' ];

Dieser Code listet die Felder auf, für die Sie Massenzuweisungen zulassen möchten, da Laravel Ihre Datenbank standardmäßig vor Massenzuweisungen schützt. Die Comment- Modelldatei sollte nun so aussehen:

Die Comment-Modelldatei
Modelldatei kommentieren

Erstellen Sie die Migrationsdatei

Nachdem Sie die Modelldatei erstellt und das $fillable -Array deklariert haben, müssen Sie die Migrationsdatei mit dem folgenden Befehl erstellen:

 php artisan make:migration create_comments_table

Hinweis: Die Namenskonvention zum Erstellen von Migrationen in Laravel ist normalerweise snake_case , auch bekannt als underscore_case . Das erste Wort ist die Aktion, das zweite Wort ist ein Plural des Modells und das letzte Wort ist das Feature, das innerhalb des Projekts erstellt wird. Das bedeutet, dass Sie create_books_table schreiben, wenn Sie eine Migration für ein Book-Modell erstellen.

Dieser Code erstellt eine Datei namens yyyy_mm_dd_hhmmss_create_comments_table im Ordner database/migrations .

Bearbeiten Sie als Nächstes die Funktion up in yyyy_mm_dd_hhmmss_create_comments_table :

 public function up() { Schema::create('comments', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email'); $table->longText('body'); $table->boolean('approved'); $table->integer('likes')->default(0); $table->timestamps(); }); }

Dieser Code erstellt ein Schema, das eine Tabelle mit den Spalten erstellt: id , name , email , body , approved , likes und timestamps .

Führen Sie die Migrationen aus

Das Erstellen und Bearbeiten der Migrationsdatei wird nichts bewirken, bis Sie sie über die Befehlszeile ausführen. Wenn Sie sich den Datenbankmanager ansehen, ist er noch leer.

Führen Sie die Migrationen mit Artisan aus:

 php artisan migrate

Dieser Befehl führt alle Migrationen innerhalb von database/migrations aus, da es die erste Migration seit dem Erstellen der App ist:

Erfolgreiche Migrationen
Erfolgreiche Migrationen

Das folgende Bild zeigt alle Migrationsdateien, die Sie ausgeführt haben. Jeder stellt eine Tabelle in der Datenbank dar:

Die Datenbank nach Migrationen
Datenbank nach Migrationen

Erstellen Sie die CommentFactory-Datei

Erstellen Sie eine Factory-Datei, die Ihre Definitionsfunktion enthält. Für diese Demonstration erstellen Sie eine Fabrik mit Artisan:

 php artisan make:factory CommentFactory.php

Dieser Code erstellt eine CommentFactory .php- Datei im Ordner database/factorys .

Die Definitionsfunktion

Die Funktion in CommentFactory definiert, wie Faker gefälschte Daten generiert. Bearbeiten Sie es so, dass es so aussieht:

 public function definition() { return [ 'name' => $this->faker->name(), 'email' => $this->faker->email(), 'body' => $this->faker->sentence(45), 'approved' => $this->faker->boolean(), 'likes' => $this->faker->randomNumber(5) ]; }

Dieser Code weist Faker an, Folgendes zu generieren:

  • Ein Name
  • Eine E-Mail Adresse
  • Ein Absatz, der 45 Sätze enthält
  • Ein zugelassener Wert, der nur wahr oder falsch sein kann
  • Eine Zufallszahl zwischen 0 und 9999

Verbinden Sie das Kommentarmodell mit CommentFactory

Verknüpfen Sie das Comment Modell mit CommentFactory , indem Sie eine geschützte $model Variable über der Definition deklarieren:

 protected $model = Comment::class;

Fügen Sie außerdem die use App\Models\Comment; zu den Dateiabhängigkeiten. Die CommentFactory- Datei sollte nun so aussehen:

Die CommentFactory-Datei
Die CommentFactory-Datei

Wie man die Datenbank sät

Seeding in der Programmierung bedeutet, zufällige gefälschte Daten für eine Datenbank zu Testzwecken zu generieren.

Nachdem Sie nun das Modell erstellt, Migrationen ausgeführt und die Definition in CommentFactory erstellt haben, führen Sie den Seeder mit der DatabaseSeeder- Datei aus.

Erstellen Sie die CommentSeeder-Datei

Erstellen Sie eine Seeder- Datei, die Factory zum Generieren der Daten verwendet:

 php artisan make:seeder CommentSeeder.php

Dieser Code erstellt eine CommentSeeder -.php- Datei im Ordner database/seeders .

Bearbeiten Sie die Run-Funktion

Verbinden Sie das Kommentarmodell mit dem CommentSeeder. Fügen Sie den folgenden Code in die Run-Funktion ein:

 Comment::factory()->count(50)->create();

Dieser Code weist den CommentSeeder an, das Comment-Modell und die Definitionsfunktion von CommentFactory zu verwenden, um 50 Kommentare in der Datenbank zu generieren. Fügen Sie außerdem die use App\Models\Comment; zu den Dateiabhängigkeiten. Die CommentSeeder- Datei sollte nun so aussehen:

Die CommentSeeder-Datei
CommentSeeder-Datei

Hinweis: Sie können Faker so konfigurieren, dass lokale Daten erstellt werden. Sie können es beispielsweise so einstellen, dass italienische Namen anstelle von zufälligen Namen generiert werden, indem Sie faker_locale in der Datei app/config.php auf it_IT setzen. Weitere Informationen zu Faker Locales finden Sie in diesem Handbuch.

Führen Sie den Seeder aus

Führen Sie als Nächstes die Seeder- Datei mit Artisan aus:

 php artisan db:seed --class=CommentSeeder

Dieser Code führt die Seeder- Datei aus und generiert 50 Zeilen mit gefälschten Daten in der Datenbank.

Datenbank-Seed erfolgreich
Datenbank-Seed erfolgreich

Die Datenbank sollte jetzt 50 Zeilen mit gefälschten Daten enthalten, mit denen Sie die Funktionen Ihrer Anwendung testen können:

50 Datenzeilen in der Datenbank
50 Datenzeilen in der Datenbank

So setzen Sie die Datenbank zurück

Wenn Sie die generierten Daten zum Testen verwenden, setzen Sie die Datenbank jedes Mal zurück, wenn Sie einen Test ausführen. Angenommen, Sie möchten die Funktion zum Umschalten von genehmigten Kommentaren testen. Aktualisieren Sie die Datenbank nach jedem Test, um sicherzustellen, dass die zuvor generierten Daten zukünftige Tests nicht beeinträchtigen.

Verwenden Sie RefreshDatabase

Aktualisieren Sie die Datenbank mithilfe der RefreshDatabase Eigenschaft in der Testdatei .

Navigieren Sie zu ExampleTest.php im Ordner tests/Feature zum Kommentar use Illuminate\Foundation\Testing\RefreshDatabase; und fügen Sie die folgende Codezeile über der Funktion test_the_application_returns_a_successful_response hinzu:

 use RefreshDatabase;

Die Datei ExampleTest.php sollte nun so aussehen:

Die ExampleTest-Datei
BeispielTestdatei

Führen Sie den Test aus

Nachdem Sie der Testdatei das Merkmal RefreshDatabase hinzugefügt haben, führen Sie den Test mit Artisan aus:

 php artisan test

Dieser Code führt alle Tests in der App aus und aktualisiert die Datenbank nach den Tests, wie im folgenden Bild gezeigt:

Eine erfolgreiche Artisan-Prüfung
Eine erfolgreiche Artisan-Prüfung

Überprüfen Sie nun die Datenbank, um die leere Kommentartabelle zu sehen:

Eine leere Kommentardatenbank
Leere Kommentardatenbank
Die manuelle Dateneingabe gehört der Vergangenheit an! Automatisieren Sie Ihre App-Tests mit Laravel Model Factories. Fang hier an! Zum Twittern klicken

Zusammenfassung

In diesem Artikel wurde beschrieben, wie Sie ein Laravel-Projekt erstellen, es mit einer Datenbank verbinden und Modelle, Migrations-, Factory- und Seeder-Dateien erstellen und konfigurieren, um zufällige Daten für die Datenbank zu generieren. Außerdem wurde erläutert, wie die Datenbank nach dem Ausführen von Tests zurückgesetzt wird.

Sie haben jetzt gesehen, wie Laravel Factories und Faker es einfach machen, innerhalb von Minuten eine beliebige Menge an Testdaten zum Testen einer Anwendung oder sogar als Platzhalter zu generieren – mit minimaler Konfiguration.

Wenn deine Laravel-App einsatzbereit ist, kannst du dies schnell und effizient auf den Anwendungs-Hosting-Diensten von Kinsta tun.