Reproduzieren Sie den Bug auf Ihrem eigenen Gerät.
- Auf einem Telefon aufgezeichnetEin Tester stößt auf einen Bug. Die Session wird auf seinem Telefon gespeichert und als Datei mit Ihnen geteilt.
- In Session Studio bearbeitetÖffnen Sie eine aufgezeichnete Session und ändern Sie einen Status, einen Header oder einen Body: ein 500, eine leere Liste, ein abgelaufenes Token.
- In Session Studio neu erstelltNoch keine Session und kein Backend? Schreiben Sie Mock-Antworten Route für Route und exportieren Sie sie als Session.
Session-Datei
Ihr Gerät
1 nicht aufgezeichneter Request ging ins Netzwerk
Ihre App erhält die Antworten aus der Datei, als kämen sie vom Server.
So nutzen Sie es
Vier Schritte, auf dem Gerät.
- 1
Datei bereitstellen
Importieren Sie sie in History über die Dateiauswahl oder nutzen Sie eine auf diesem Telefon aufgezeichnete Session.
HistoryImport trace
- 2
In History öffnen
Wählen Sie die Session und dann Replay.
Replay
- 3
Matching-Modus wählen
Strict vergleicht die Query-Parameter, Ignore query nicht. Details weiter unten.
Replay (strict)Replay (ignore query)
- 4
App benutzen
Ein roter Rahmen zeigt, dass Replay läuft. Bediente Requests tragen in Live ein REPLAY-Badge. Stop beendet das Replay.
REPLAYStop
Im Replay-Tab können Sie jeden Request vom Replay ausschließen.
Was mit jedem Request passiert
Gefunden: Antwort aus der Datei. Nicht gefunden: Netzwerk.
Jeder Request Ihrer App durchläuft dieselben Prüfungen, in dieser Reihenfolge. Der erste aufgezeichnete Request, der alle besteht, liefert seine Antwort.
- 1Ist Replay aktiv?Ohne Replay ändert sich nichts.nein →
- 2Gleiche Methode und gleicher Pfad?GET /v1/transactions passt nur zu GET /v1/transactions. Die Domain wird nicht verglichen.nein →
- 3Kann diese Antwort abgespielt werden?Die aufgezeichnete Antwort muss JSON sein, und der Request darf im Replay-Tab nicht ausgeschlossen sein.nein →
- 4Gleiche Query-Parameter?Nur im Modus Strict. Ignore query überspringt diese Prüfung.nein →
ja
Antwort aus der Datei
Der Request geht nie ins Netzwerk. Das SDK baut aus der Datei eine HTTP-Antwort (Status, Header, Body) und gibt sie Ihrer App, als käme sie vom Server.
Ins Netzwerk gesendet
Sobald eine Prüfung scheitert, geht der Request wie gewohnt und unverändert raus und erhält die Antwort des echten Servers.
Nebeneinander: was verglichen wird
| Request Ihrer App | Request in der Datei | ||
|---|---|---|---|
| Methode | GET | GET | Verglichen: gleich |
| Domain | api.lumen-bank.example | uat.lumen-bank.example | Nicht verglichen |
| Pfad | /v1/transactions | /v1/transactions | Verglichen: gleich |
| Query-Parameter | ?sort=date&page=2 | ?page=2&sort=date | Je nach Modus |
| Header | Authorization: Bearer eyJ…a91 | Authorization: Bearer eyJ…f07 | Nicht verglichen |
| Body | — | — | Nicht verglichen |
Matching-Modi
Strict oder Ignore query.
Der Modus ändert nur, wie Query-Parameter verglichen werden. Methode und Pfad müssen immer gleich sein.
Replay (strict)
Gleiche Parameter mit gleichen Werten. Die Reihenfolge spielt keine Rolle.
Replay (ignore query)
Parameter werden nicht verglichen. Praktisch, wenn sie sich bei jedem Aufruf ändern (eine Seitenzahl, ein Datum).
| Replay (strict) | Replay (ignore query) | |
|---|---|---|
| GET /v1/transactions?sort=date&page=2 | passt | passt |
| GET /v1/transactions?page=3&sort=date | passt nicht | passt |
Mehrere Treffer
Mehrere Requests der Datei passen. Welcher wird geliefert?
In einer geteilten Datei ist derselbe Request oft mehrmals aufgezeichnet: ein Screen zweimal besucht, ein Pull-to-Refresh. Für den gewählten Modus passen sie alle zum selben Request der App und bilden eine Gruppe.
Request Ihrer App
GET /v1/accounts
GET /v1/accounts×3gleiche Methode, Pfad und Query
- HomeViewController10:32:04{ "balance": 1200 }Geliefert
- TransferViewController10:32:09{ "balance": 1200 }Nie erreicht
- HomeViewController10:32:15{ "balance": 960 }Nie erreicht
Replay liefert den ersten, in Navigationsreihenfolge. Nicht den letzten.
Wählen Sie die Antwort selbst, im Replay-Tab
- 1Stellen Sie Sorting auf Grouped: Requests, die zueinander passen, erscheinen zusammen, mit ihrer Anzahl.
- 2Schalten Sie die Requests aus, die Sie nicht liefern wollen.
- 3Lassen Sie nur den gewünschten eingeschaltet: Er steht dann an erster Stelle, und Replay liefert ihn.
GET /v1/accounts×3gleiche Methode, Pfad und Query
- ausHomeViewController10:32:04{ "balance": 1200 }Nie erreicht
- ausTransferViewController10:32:09{ "balance": 1200 }Nie erreicht
- anHomeViewController10:32:15{ "balance": 960 }Geliefert
Die Gruppen folgen dem Modus: in Strict gleiche Methode, Pfad und Query; in Ignore query gleiche Methode und Pfad. Session Studio zeigt dieselben Gruppen vor dem Replay.
Gut zu wissen
Die Regeln hinter dem Matching.
- Nur JSON-AntwortenEin Request, dessen aufgezeichnete Antwort kein JSON ist, wird nie abgespielt: Er geht ins Netzwerk.
- Sofort geliefertDie aufgezeichnete Dauer wird nicht nachgestellt: Die Antwort kommt sofort.
- Vor dem Replay prüfenSession Studio zeigt Route für Route, welche aufgezeichnete Antwort Replay liefern wird.
Ein offenes Problem
Auf den ganzen Request matchen.
Unser erstes Ziel war ein vollständiges Matching: gleiche Methode, gleicher Pfad, gleiche Header, gleicher Body. Bei echten Sessions lehnte es Requests ab, die offensichtlich dieselben waren.
POST /v1/transfers
Header
Content-Type: application/jsonAuthorization: Bearer eyJhbGciOi…Qx7← ändert sich jedes MalX-Request-Timestamp: 1759734610← ändert sich jedes Mal
Body
{
"amount": 240 "beneficiaryId": "b_1029" "nonce": "8f1c2a…"← ändert sich jedes Mal}POST /v1/transfers
Header
Content-Type: application/jsonAuthorization: Bearer eyJhbGciOi…L2m← ändert sich jedes MalX-Request-Timestamp: 1760090412← ändert sich jedes Mal
Body
{
"amount": 240 "beneficiaryId": "b_1029" "nonce": "d40b9e…"← ändert sich jedes Mal}Teil für Teil verglichen
- Methode: gleich
- Pfad: gleich
- Header: anders
- Body: anders
Das vollständige Matching sagt nein. Dabei ist es derselbe Request.
Ein Token, ein Zeitstempel, eine Nonce: Werte, die sich in jeder Session ändern, selbst für denselben Nutzer, reichen, um eine Antwort abzulehnen, die geliefert werden sollte. Deshalb vergleicht Replay die Methode, den Pfad und im Modus Strict die Query-Parameter und lässt Header und Body außen vor.
Ansätze, die wir untersucht haben
- Eine Liste bekannter veränderlicher Felder überspringen (Tokens, Zeitstempel, Kennungen).
- Sie Route für Route wählen lassen, welche Felder gleich sein müssen.
- Den ähnlichsten aufgezeichneten Request liefern statt eines identischen.
Noch keiner ist gut genug, deshalb bleibt das Problem offen. Wenn Sie eine Idee haben oder einen Fall, den Replay nicht gut abdeckt, sagen Sie es uns.
Kontakt aufnehmen