Ich möchte einige Anfragen (vom Typ javax.servlet.http.HttpServletRequest
) in eine Datei ablegen und sie später aus der Datei wieder abspielen, so dass ich zukünftige Änderungen an der HttpServlet
testen kann. Was ist der beste Weg, dies zu erreichen?
Bisher versuche ich, Daten aus dem mit der Anfrage verknüpften Eingabestrom zu ziehen und diese binären Daten in einer Datei zu speichern. Letztlich erfordert dies möglicherweise das Speichern einer Byte-Zählung vor jedem gespeicherten Eingabestream, sodass ich weiß, wo eine Anfrage endet und die andere beginnt.
Gibt es einen einfacheren Weg, dies zu tun?
** BEARBEITEN: Zur Klarstellung, dies sind keine Anfragen mit einem Browser. Bis jetzt löst keine der Antworten mein spezielles Problem, was vermutlich auf das Serialisieren und Deserialisieren eines HttpServletRequests zurückzuführen ist. Ich habe versucht, nur die Bytes aus dem Eingabestream ziehen, die von request.getInputStream () zurückgegeben werden. Leider, wenn ich dies in eine Zeichenfolge umwandele, scheint es, dass die resultierenden Bytes nicht von Message.Builder.mergeFrom (Bytes) analysiert werden können.
Ich bringe ein Kopfgeld für jeden, der weiß, wie ich mein Problem lösen kann.
In meinem speziellen Fall habe ich das Problem schließlich gelöst, indem ich CodedOutputStream
verwendet habe, um com.google.protobuf.GeneratedMessage
( foo
unten) zu schreiben:
Dies kann mit CodedInputStream
mit etwas wie:
Der CodedInputStream
kann dann an einen Nachrichtengenerator übergeben werden, um die Deserialisierung abzuschließen.
Vielleicht sollten Sie sich Selenium ( Ссылка ) ansehen.
Ich sage das, weil ich annehme, dass der Grund, warum Sie die Anfragen wiedergeben möchten, zu Testzwecken ist. Selenium zeichnet auf, was Sie in Ihrem Browser tun und kann es dann abspielen.
Wenn Sie versuchen, etwas anderes zu erreichen, könnten Sie vielleicht erklären, was Sie letztlich versuchen zu tun.
Es gibt viele lokale Reverse-Proxy-Tools, mit denen eine HTTP-Sitzung aufgezeichnet und wiedergegeben werden kann. In der Regel richten Sie Ihren Browser so ein, dass er einen lokalen Host-Proxy-Server verwendet, führen Sie die Aktionen aus, speichern Sie die Sitzung und wiederholen Sie die Wiedergabe. JMeter und Charles sind zwei Tools, die auf Java basieren.
Eine andere Option wäre, HttpClient zu verwenden, um Ihr Servlet programmatisch auszuprobieren. Die Verwendung von JUnit zum Ausführen der Tests hat den Vorteil, dass es einfacher ist zu überprüfen, ob Sie die richtige Antwort erhalten.