Die Firebase CLI enthält einen Cloud Functions-Emulator, mit dem die folgenden Funktionstypen emuliert werden können:
- HTTPS-Funktionen
- Aufrufbare Funktionen
- Aufgabenwarteschlangenfunktionen
- Hintergrundfunktionen, die von Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage, unterstützten Firebase-Benachrichtigungen und Cloud Pub/Sub ausgelöst werden.
Sie können Funktionen lokal ausführen, um sie zu testen, bevor Sie sie in der Produktion bereitstellen.
Firebase CLI installieren
Wenn Sie den Cloud Functions-Emulator verwenden möchten, müssen Sie zuerst die Firebase CLI installieren:
npm install -g firebase-tools
Damit Sie den lokalen Emulator verwenden können, muss Ihre Cloud Functions von Folgendem abhängen:
firebase-admin
Version8.0.0
oder höherfirebase-functions
Version3.0.0
oder höher
Administratoranmeldedaten einrichten (optional)
Wenn Ihre Funktionstests über das Firebase Admin SDK mit Google APIs oder anderen Firebase APIs interagieren sollen, müssen Sie möglicherweise Administratoranmeldedaten einrichten.
- Für Cloud Firestore- und Realtime Database-Trigger sind bereits ausreichende Anmeldedaten vorhanden. Eine zusätzliche Einrichtung ist nicht erforderlich.
- Für alle anderen APIs, einschließlich Firebase APIs wie Authentication und FCM, oder Google APIs wie Cloud Translation oder Cloud Speech sind die in diesem Abschnitt beschriebenen Einrichtungsschritte erforderlich. Das gilt unabhängig davon, ob Sie die Cloud Functions-Shell oder
firebase emulators:start
verwenden.
So richten Sie Administratoranmeldedaten für emulierte Funktionen ein:
- Öffnen Sie den Bereich Dienstkonten in der Google Cloud-Konsole.
- Achten Sie darauf, dass App Engine Standarddienstkonto ausgewählt ist, und wählen Sie im Optionsmenü rechts Schlüssel erstellen aus.
- Wählen Sie auf der nächsten Seite als Schlüsseltyp JSON aus und klicken Sie auf Erstellen.
Legen Sie Ihre Google-Standardanmeldedaten so fest, dass sie auf den heruntergeladenen Schlüssel verweisen:
Unix
export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json" firebase emulators:start
Windows
set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json firebase emulators:start
Nachdem Sie diese Schritte ausgeführt haben, können Ihre Funktionstests über das Admin SDK auf Firebase- und Google APIs zugreifen. Beim Testen eines Authentication-Triggers könnte die emulierte Funktion beispielsweise admin.auth().getUserByEmail(email)
aufrufen.
Konfiguration von Functions einrichten (optional)
Wenn Sie Konfigurationsvariablen für benutzerdefinierte Funktionen verwenden, führen Sie zuerst den Befehl aus, um Ihre benutzerdefinierte Konfiguration (im Verzeichnis functions
) in Ihrer lokalen Umgebung abzurufen:
firebase functions:config:get > .runtimeconfig.json # If using Windows PowerShell, replace the above with: # firebase functions:config:get | ac .runtimeconfig.json
Emulator Suite ausführen
Verwenden Sie den Befehl emulators:start
, um den Cloud Functions-Emulator auszuführen:
firebase emulators:start
Mit dem Befehl emulators:start
werden Emulatoren für Cloud Functions, Cloud Firestore, Realtime Database und Firebase Hosting gestartet. Diese basieren auf den Produkten, die Sie in Ihrem lokalen Projekt mit firebase
init
initialisiert haben. Wenn Sie einen bestimmten Emulator starten möchten, verwenden Sie das Flag --only
:
firebase emulators:start --only functions
Wenn Sie eine Testsuite oder ein Testskript ausführen möchten, nachdem die Emulatoren gestartet wurden, verwenden Sie den Befehl emulators:exec
:
firebase emulators:exec "./my-test.sh"
App für die Kommunikation mit den Emulatoren instrumentieren
Damit Ihre App mit den Emulatoren interagieren kann, müssen Sie möglicherweise einige zusätzliche Konfigurationsschritte ausführen.
App für aufrufbare Funktionen instrumentieren
Wenn Ihre Prototyp- und Testaktivitäten aufrufbare Backend-Funktionen umfassen, konfigurieren Sie die Interaktion mit dem Cloud Functions for Firebase-Emulator so:
Kotlin+KTX
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. val functions = Firebase.functions functions.useEmulator("10.0.2.2", 5001)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. FirebaseFunctions functions = FirebaseFunctions.getInstance(); functions.useEmulator("10.0.2.2", 5001);
Swift
Functions.functions().useFunctionsEmulator(origin: "http://127.0.0.1:5001")
Web
import { getApp } from "firebase/app"; import { getFunctions, connectFunctionsEmulator } from "firebase/functions"; const functions = getFunctions(getApp()); connectFunctionsEmulator(functions, "127.0.0.1", 5001);
Web
firebase.functions().useEmulator("127.0.0.1", 5001);
App für die Emulation von HTTPS-Funktionen instrumentieren
Jede HTTPS-Funktion in Ihrem Code wird vom lokalen Emulator mit dem folgenden URL-Format bereitgestellt:
http://$HOST:$PORT/$PROJECT/$REGION/$NAME
Eine einfache helloWorld
-Funktion mit dem Standardhostport und der Standardregion wird beispielsweise unter folgender Adresse bereitgestellt:
https://localhost:5001/$PROJECT/us-central1/helloWorld
App für die Emulation von Funktionen der Aufgabenwarteschlange instrumentieren
Der Emulator richtet automatisch emulierte Aufgabenwarteschlangen basierend auf Triggerdefinitionen ein. Das Admin SDK leitet eingereihte Anfragen an den Emulator weiter, wenn es erkennt, dass er über die Umgebungsvariable CLOUD_TASKS_EMULATOR_HOST
ausgeführt wird.
Das in der Produktion verwendete Dispatchsystem ist komplexer als das im Emulator implementierte. Daher sollte nicht davon ausgegangen werden, dass das emulierte Verhalten Produktionsumgebungen genau widerspiegelt. Die Parameter im Emulator legen eine Obergrenze für die Rate fest, mit der Aufgaben gesendet und noch einmal versucht werden.
App für die Emulation von im Hintergrund ausgelösten Funktionen instrumentieren
Der Cloud Functions-Emulator unterstützt durch den Hintergrund ausgelöste Funktionen aus den folgenden Quellen:
- Realtime Database-Emulator
- Cloud Firestore Emulator
- Authentication Emulator
- Pub/Sub-Emulator
- Emulator für Firebase-Benachrichtigungen
Wenn Sie Hintergrundereignisse auslösen möchten, ändern Sie die Back-End-Ressourcen mithilfe von Emulator Suite UI oder verbinden Sie Ihre App oder Ihren Testcode über das SDK für Ihre Plattform mit den Emulatoren.
Test-Handler für benutzerdefinierte Ereignisse, die von Erweiterungen ausgegeben werden
Bei Funktionen, die Sie zum Verarbeiten benutzerdefinierter Firebase Extensions-Ereignisse mit Cloud Functions v2 implementieren, wird der Cloud Functions-Emulator mit dem Eventarc-Emulator gekoppelt, um Eventarc-Trigger zu unterstützen.
Wenn Sie benutzerdefinierte Event-Handler für Erweiterungen testen möchten, die Ereignisse senden, müssen Sie die Cloud Functions- und Eventarc-Emulatoren installieren.
Die Cloud Functions-Laufzeit legt die Umgebungsvariable EVENTARC_EMULATOR
im aktuellen Prozess auf localhost:9299
fest, wenn der Eventarc-Emulator ausgeführt wird. Die Firebase Admin SDKs stellen automatisch eine Verbindung zum Eventarc-Emulator her, wenn die Umgebungsvariable EVENTARC_EMULATOR
festgelegt ist. Sie können den Standardport wie unter Local Emulator Suite konfigurieren beschrieben ändern.
Wenn die Umgebungsvariablen richtig konfiguriert sind, sendet Firebase Admin SDK automatisch Ereignisse an den Eventarc-Emulator. Der Eventarc-Emulator ruft wiederum den Cloud Functions-Emulator auf, um alle registrierten Handler auszulösen.
Details zur Ausführung des Handlers finden Sie in den Functions-Logs im Emulator Suite UI.
Interaktionen mit anderen Diensten
Die Emulator-Suite enthält mehrere Emulatoren, mit denen produktübergreifende Interaktionen getestet werden können.
Cloud Firestore
Wenn Sie Funktionen haben, die mit dem Firebase Admin SDK auf Cloud Firestore schreiben, werden diese Schreibvorgänge an den Cloud Firestore-Emulator gesendet, falls er ausgeführt wird. Wenn durch diese Schreibvorgänge weitere Funktionen ausgelöst werden, werden sie im Cloud Functions-Emulator ausgeführt.
Cloud Storage
Wenn Sie Funktionen haben, die mit dem Firebase Admin SDK (Version 9.7.0 oder höher) auf Cloud Storage schreiben, werden diese Schreibvorgänge an den Cloud Storage-Emulator gesendet, falls er ausgeführt wird. Wenn durch diese Schreibvorgänge weitere Funktionen ausgelöst werden, werden sie im Cloud Functions-Emulator ausgeführt.
Firebase Authentication
Wenn Sie Funktionen haben, die das Firebase Admin SDK (Version 9.3.0 oder höher) zum Schreiben in Firebase Authentication verwenden, werden diese Schreibvorgänge an den Auth-Emulator gesendet, falls er ausgeführt wird. Wenn durch diese Schreibvorgänge weitere Funktionen ausgelöst werden, werden sie im Cloud Functions-Emulator ausgeführt.
Firebase Hosting
Wenn Sie Cloud Functions verwenden, um dynamische Inhalte für Firebase Hosting zu generieren, verwendet firebase emulators:start
Ihre lokalen HTTP-Funktionen als Proxys für das Hosting.
Firebase-Benachrichtigungen
In jedem Projekt, das mindestens einen unterstützten Firebase-Benachrichtigungstrigger enthält, enthält die Benutzeroberfläche des Emulators den Tab FireAlerts. So emulieren Sie einen Benachrichtigungstrigger:
- Öffnen Sie den Tab FireAlerts. Auf diesem Tab wird ein Drop-down-Menü mit den Benachrichtigungstypen angezeigt, die mit Triggern verknüpft sind. Wenn Sie beispielsweise einen Trigger „onNewFatalIssuePublished“ haben, wird „crashlytics.newFatalIssue“ angezeigt.
- Wählen Sie einen Benachrichtigungstyp aus. Das Formular wird automatisch mit Standardwerten ausgefüllt, die Sie bearbeiten können. Sie können die Felder des Ereignisses bearbeiten. Andere Informationen aus dem Benachrichtigungsereignis werden entweder abgeleitet, als Mock-Werte verwendet oder zufällig generiert.
- Wählen Sie Benachrichtigung senden aus, um eine synthetische Benachrichtigung an den Functions-Emulator zu senden. Die Protokollierung ist in der Firebase-Konsole unter Benachrichtigungen (sowie in den Protokollen) verfügbar.
Logging
Der Emulator streamt Protokolle von Ihren Funktionen in das Terminalfenster, in dem sie ausgeführt werden. Es werden alle Ausgaben der Anweisungen console.log()
, console.info()
, console.error()
und console.warn()
in Ihren Funktionen angezeigt.
Nächste Schritte
Ein vollständiges Beispiel für die Verwendung der Firebase Emulator-Suite finden Sie in der Kurzanleitung zum Testen.