Zum Inhalt springen
RECDiagnosticSDK
04 / REPLAY

Reproduzieren Sie den Bug auf Ihrem eigenen Gerät.

Wählen Sie eine aufgezeichnete Session: Passende Requests erhalten die aufgezeichneten Antworten, alles andere geht unverändert ins Netzwerk.
  • 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

Dx_4f2a9c1.json

Ihr Gerät

Replay aktiv3 Requests
TransferViewController10:32:08
GET/v1/beneficiariesreplay20097ms
GET/v1/limitsnetwork20088ms
POST/v1/transfersreplay422302ms

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. 1

    Datei bereitstellen

    Importieren Sie sie in History über die Dateiauswahl oder nutzen Sie eine auf diesem Telefon aufgezeichnete Session.

    HistoryImport trace

  2. 2

    In History öffnen

    Wählen Sie die Session und dann Replay.

    Replay

  3. 3

    Matching-Modus wählen

    Strict vergleicht die Query-Parameter, Ignore query nicht. Details weiter unten.

    Replay (strict)Replay (ignore query)

  4. 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.

  1. 1Ist Replay aktiv?Ohne Replay ändert sich nichts.nein →
  2. 2Gleiche Methode und gleicher Pfad?GET /v1/transactions passt nur zu GET /v1/transactions. Die Domain wird nicht verglichen.nein →
  3. 3Kann diese Antwort abgespielt werden?Die aufgezeichnete Antwort muss JSON sein, und der Request darf im Replay-Tab nicht ausgeschlossen sein.nein →
  4. 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 AppRequest in der Datei
MethodeGETGETVerglichen: gleich
Domainapi.lumen-bank.exampleuat.lumen-bank.exampleNicht verglichen
Pfad/v1/transactions/v1/transactionsVerglichen: gleich
Query-Parameter?sort=date&page=2?page=2&sort=dateJe nach Modus
HeaderAuthorization: Bearer eyJ…a91Authorization: Bearer eyJ…f07Nicht 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).

In der Datei: GET /v1/transactions?page=2&sort=date
Replay (strict)Replay (ignore query)
GET /v1/transactions?sort=date&page=2passtpasst
GET /v1/transactions?page=3&sort=datepasst nichtpasst

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

  1. HomeViewController10:32:04{ "balance": 1200 }Geliefert
  2. TransferViewController10:32:09{ "balance": 1200 }Nie erreicht
  3. 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

  1. 1Stellen Sie Sorting auf Grouped: Requests, die zueinander passen, erscheinen zusammen, mit ihrer Anzahl.
  2. 2Schalten Sie die Requests aus, die Sie nicht liefern wollen.
  3. 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

  1. ausHomeViewController10:32:04{ "balance": 1200 }Nie erreicht
  2. ausTransferViewController10:32:09{ "balance": 1200 }Nie erreicht
  3. 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.

Am Montag aufgezeichnet

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}
Heute gesendet

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