2011-02-02 8 views
8

Chcę zrzucić niektóre żądania (typu javax.servlet.http.HttpServletRequest) do pliku, a następnie odtworzyć je z pliku, aby przetestować przyszłe zmiany na HttpServlet. Jaki jest najlepszy sposób, aby to osiągnąć?Jak powinienem nagrać `HttpServletRequest`s, które są wysyłane do` doPost` w `HttpServlet` do późniejszego odtwarzania?

Do tej pory próbuję pobrać dane ze strumienia wejściowego powiązanego z żądaniem i zapisać te dane binarne w pliku. Ostatecznie może to wymagać czegoś takiego jak zapisanie liczby bajtów przed każdym zapisanym strumieniem wejściowym, aby wiedzieć, gdzie kończy się jedno żądanie, a drugie zaczyna.

Czy jest to prostszy sposób?

** EDYCJA: w celu wyjaśnienia, nie są to prośby związane z przeglądarką. Do tej pory żadna z odpowiedzi nie rozwiązuje mojego konkretnego problemu, który, jak sądzę, sprowadza się do serializowania i deserializacji HttpServletRequest. Próbowałem po prostu ciągnąć bajty ze strumienia wejściowego zwracane przez request.getInputStream(). Niestety, jeśli zmienię to w ciąg, wydaje się, że wynikowe bajty nie mogą być analizowane przez Message.Builder.mergeFrom (bytes).

Podnoszę nagrodę dla każdego, kto wie, jak rozwiązać mój problem.

Odpowiedz

1

W moim konkretnym przypadku, w końcu rozwiązać ten problem za pomocą CodedOutputStream napisać com.google.protobuf.GeneratedMessage (foo poniżej):

ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
CodedOutputStream cos = CodedOutputStream.newInstance(bos); 
foo.writeTo(cos); 

ten można odczytać w użyciu CodedInputStream z czymś takim:

byte[] ba = readBytesFromOutputFile(); 
CodedInputStream cis = CodedInputStream.newInstance(ba); 

Urządzenie CodedInputStream można następnie przekazać do konstruktora wiadomości, aby zakończyć deserializację.

2

Być może powinieneś rzucić okiem na Selenium (http://seleniumhq.org/).

Mówię to, ponieważ przypuszczam, że powodem, dla którego chcesz odtwarzać żądania, jest testowanie. Selen rejestruje, co robisz w przeglądarce, i może je odtworzyć.

Jeśli próbujesz osiągnąć coś innego, być może możesz wyjaśnić, co ostatecznie chcesz zrobić.

+0

Selen to doskonałe narzędzie do tego typu pracy. –

+0

W rzeczywistości Selen testuje coś innego niż podstawowe HttpRequests/odpowiedzi, testuje strony internetowe. Żądania HTTP są również używane na przykład w usługach sieciowych, w których Selen nie byłby optymalny (imho). Jak mówi redakcja, nie ma to miejsca w kontekście przeglądarki internetowej, a kod wymaga dobrej modyfikacji, gdyby musiał zostać dostosowany do testów w przeglądarce. – fwielstra

1

Istnieje wiele lokalnych narzędzi odwrotnego proxy, które mogą "nagrywać i odtwarzać" sesję HTTP. Zazwyczaj konfigurujesz przeglądarkę tak, aby korzystała z lokalnego serwera proxy, wykonała akcje, zapisała sesję, a następnie ją powtórzyła. JMeter i Charles to dwa narzędzia oparte na Javie.

Inną opcją byłoby użycie HttpClient do programowego wykonywania serwletu. Używanie JUnit do wykonania testów ma tę zaletę, że łatwiej jest sprawdzić, czy otrzymujesz "poprawną" odpowiedź.

Powiązane problemy