Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: mockowanie http

Hej,

tworze aplikacje ktora dziala w trybie klient <-> server po protokole http, o ile testowanie swerwera jest wzglednie proste przy uzyciu np: apache commons httpclient o tyle nie bardzo wiem jak moge testowac klienta.

potrzebuje postawic cos jak mock servera http na jakims porcie ktory bedzie wystawial odpowiednie dane za pomoca protokolu http i z tym mialby sie laczyc testowany kod.
mysle ze nawet najprostszy jednowatkowy "serwer" http w javie by dal rade.

jest cos gotowego do takich zadan czy musze klepac cos samemu?

nie ukrywam ze na czasie zalezy dlatego opcje z klepaniem samemu uznaje jako czarny scenariusz ;)

konto usunięte

Temat: mockowanie http

Swego czasu do takich testow uzywalem jakarta jmeter, pamietam ze mozna bylo uruchomic to cos jako proxy http, ktore nagrywalo linki klikane w aplikacji, dzieki czemu mozna bylo stworzyc fajny scenariusz testow.

Pozniej mozna to zapakowac w grupe watkow i uruchomic, wszystko z poziomu jmeter.
Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: mockowanie http

hmm brzmi troche skomplikowanie, ja poprostu musze utworzyc obiekt klienta, podac mu url do danych i sprawdzic czy chula ;)
Adrian C.

Adrian C.
projektant/programis
ta

Temat: mockowanie http

Na Twoim miejscu raczej napisałbym mocka tego serwera. Klient komunikuje się z serwerem po http, wiec zrobiłbym mocka klasy: URL w odpowiedzi na openConnection() zwracałbym mocka HttpURLConnection, który w odpowiedzi zwracałby dane.
Test z serwerem HTTP może zawieść z miliona powodów, sieć, firewall, etc.
Piotr T.

Piotr T. Spring/Microservices

Temat: mockowanie http

Łukasz C.:
hmm brzmi troche skomplikowanie, ja poprostu musze utworzyc obiekt klienta, podac mu url do danych i sprawdzic czy chula ;)
Jeśli znasz kontrakt API serwera i ufasz że protokół HTTP działa użyj Mockito
http://mockito.org/

możesz pomóc sobie również Springiem
http://static.springsource.org/spring/docs/2.5.x/refer...

konto usunięte

Temat: mockowanie http

potrzebuje postawic cos jak mock servera http na jakims porcie ktory bedzie wystawial odpowiednie dane za pomoca protokolu http i z tym mialby sie laczyc testowany kod.
mysle ze nawet najprostszy jednowatkowy "serwer" http w javie by dal rade.

Hmm... a po co Ci taki serwer ?
Chcesz testować protokół TCP/IP(?) dla HTTP ? ;)

Wydaje mi się, że czegokolwiek Twój test by nie dotyczył, można stworzyć dla niego 'obiektowego' mocka ...
Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: mockowanie http

Jakub Wojt:
Hmm... a po co Ci taki serwer ?
Chcesz testować protokół TCP/IP(?) dla HTTP ? ;)

Wydaje mi się, że czegokolwiek Twój test by nie dotyczył, można stworzyć dla niego 'obiektowego' mocka ...

plan jest taki:

- utworzyc obiekt klienta
- pobrac paczke z danymi poprzez http (zwykly xml)
- probic rozne cuda
- uploadowac wynik
- sprawdzic poprawnosc wyniku

moglbym wrzucic albo sam xml albo liste z tym co jest do zrobienia do samego obiektu ktory to robi, ale bardziej mi zalezy na tym aby sprawdzic czy konkretnie aplikacja laczy sie z zewnetrznym serwerem i przedewszystkim czy ladnie uploaduje dane (pliki binarne), wiec po czesci to testowanie samego http ;)

najprosciej widzialbym to tak:


MockServer mockServer = new MockServer();
mockServer.start();
Client client = new Client(mockServer.getUrl());
client.downloadData();
client.process();
client.uploadData();
mockServer.stop();
assertTrue(mockServer.validateResult());
Piotr T.

Piotr T. Spring/Microservices

Temat: mockowanie http

Łukasz C.:sprawdzic czy konkretnie aplikacja laczy sie z zewnetrznym serwerem i przedewszystkim czy ladnie uploaduje dane (pliki binarne), wiec po czesci to testowanie samego http ;)
> [/code]
Możesz użyć osadzonego kontenera servletów np. Jetty
http://docs.codehaus.org/display/JETTY/Embedding+Jetty
Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: mockowanie http

no uzywam jetty jako serwer, ale szukam poki co czegos lzejszego :)

konto usunięte

Temat: mockowanie http

Hmm... a po co Ci taki serwer ?
Chcesz testować protokół TCP/IP(?) dla HTTP ? ;)

Wydaje mi się, że czegokolwiek Twój test by nie dotyczył, można stworzyć dla niego 'obiektowego' mocka ...

plan jest taki:

- utworzyc obiekt klienta
- pobrac paczke z danymi poprzez http (zwykly xml)
- probic rozne cuda
- uploadowac wynik
- sprawdzic poprawnosc wyniku

moglbym wrzucic albo sam xml albo liste z tym co jest do zrobienia do samego obiektu ktory to robi, ale bardziej mi zalezy na tym aby sprawdzic czy konkretnie aplikacja laczy sie z zewnetrznym serwerem i przedewszystkim czy ladnie uploaduje dane (pliki binarne), wiec po czesci to testowanie samego http ;)

HTTP 'działa'. Przetestowali to jego twórcy :)
Hm.. najprostszym sposobem na przeprowadzenie ww. testu jest po prostu podłączenie się do docelowego serwera i próba pobrania / przetworzenia i upload'ingu danych. ;)

A tak na poważnie: nie można testować 'wszystkiego na raz'.
Musisz określić co chcesz przetestować.
Na początku proponuję napisanie testu dla 'client.process()', dla tego chyba można stworzyć jakiegoś mocka...
Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: mockowanie http

Jakub Wojt:
HTTP 'działa'. Przetestowali to jego twórcy :)
Hm.. najprostszym sposobem na przeprowadzenie ww. testu jest po prostu podłączenie się do docelowego serwera i próba pobrania / przetworzenia i upload'ingu danych. ;)

ciezka sprawa troche, architektura jest rozproszona i z serwerem laczy sie klient docelowy ktory wymaga dostarczenia danych, informacja o tym jest kolejkowana w bazie, w miedzy czasie jest przygotowany odpowiedni "wynik tymczasowy", a samo przetwarzanie danych jest delegowane na jeden z wielu nodow, wlasnie za posrednictwem http

technicznie moge sprobowac odpalic serwer, zrobic baze, z populowac dane do niej, ale kurde troche nazbyt skomplikowane mi sie to wydaje w tym przypadku, takie testy mam zamiar zrobic ale jako stage2 kiedy to zwykle unittesty przejda, przy okazji napisze sie kilka load testow bo wydajnosc jest kluczowa dla tego projektu
A tak na poważnie: nie można testować 'wszystkiego na raz'.
Musisz określić co chcesz przetestować.
no to napisalem, chce sprawdzic czy kod klienta poprawnie pobiera przygotowana paczke danych, i uploaduje wynik
Na początku proponuję napisanie testu dla 'client.process()', dla tego chyba można stworzyć jakiegoś mocka...
to juz mam pokryte wieloma testami :)

konto usunięte

Temat: mockowanie http

HTTP 'działa'. Przetestowali to jego twórcy :)
Hm.. najprostszym sposobem na przeprowadzenie ww. testu jest po prostu podłączenie się do docelowego serwera i próba pobrania / przetworzenia i upload'ingu danych. ;)

ciezka sprawa troche, architektura jest rozproszona i z serwerem laczy sie klient docelowy ktory wymaga dostarczenia danych, informacja o tym jest kolejkowana w bazie, w miedzy czasie jest przygotowany odpowiedni "wynik tymczasowy", a samo przetwarzanie danych jest delegowane na jeden z wielu nodow, wlasnie za posrednictwem http

proponuje rozdzielić technologię od funkcjonalności tzn. po drugiej stronie kabelka może być sam diabeł. Dopóki robi to co powinien (wysyłanie / obieranie) nie powinno to programistę interesować ;)
technicznie moge sprobowac odpalic serwer, zrobic baze, z populowac dane do niej, ale kurde troche nazbyt skomplikowane mi sie to wydaje w tym przypadku, takie testy mam zamiar zrobic ale jako stage2 kiedy to zwykle unittesty przejda,

ale ja właśnie proponuje unit testy :)
przy okazji napisze sie kilka load testow bo wydajnosc jest kluczowa dla tego projektu

Kluczowe dla projektu jest to czy całość będzie zwracać takie wyniki jakich się oczekuje. Sekwencjonujecie białka czy robicie jakieś symulacje astrofizyczne... a może jakiś SCRAM ? ;)

Hm.. wydajność kodu w danej architekturze (mikrosekundy), czy programisty w kontekście produkowania użytecznego kodu (mikro-milenia) ? ;)
A tak na poważnie: nie można testować 'wszystkiego na raz'.
Musisz określić co chcesz przetestować.
no to napisalem, chce sprawdzic czy kod klienta poprawnie pobiera przygotowana paczke danych

a czy może 'źle pobrać' ? a może chodzi o to, że ta paczka zastanie 'źle wysłana' ?
i uploaduje wynik

a czy można 'źle upload-ować' (wysłać) ? :)
Na początku proponuję napisanie testu dla 'client.process()', dla tego chyba można stworzyć jakiegoś mocka...
to juz mam pokryte wieloma testami :)

więc pozostają testy 'wysyłania', 'odbierania' i 'nawiązywania połączenia'Jakub Wojt edytował(a) ten post dnia 28.06.11 o godzinie 23:37
Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: mockowanie http

Jakub Wojt:
proponuje rozdzielić technologię od funkcjonalności tzn. po drugiej stronie kabelka może być sam diabeł. Dopóki robi to co powinien (wysyłanie / obieranie) nie powinno to programistę interesować ;)
ale moj diabel dziala :D tylko ja chce wiedziec czy druga strona takze dziala jak nalezy :)
Kluczowe dla projektu jest to czy całość będzie zwracać takie wyniki jakich się oczekuje. Sekwencjonujecie białka czy robicie jakieś symulacje astrofizyczne... a może jakiś SCRAM ? ;)
hmm, akurat w tym projekcie nie jestem w stanie dac 100% gwarancji ze dany wynik bedzie taki jak oczekiwany, aplikacja bazuje na zewnetrznych komponentach ktorych nie jestem w stanie kontrolowac, do tego to uzytkownik wprowadza dane i serio nie da rady przewidziec czy cos na ktoryms wezle sie nagle nie wykrzaczy :D
dlatego jest to rozproszone, jezeli jakims cudem ktos wykrzaczy dany wezel to serwer nadal bedzie dzialac, zablokuje podejrzane dane i przerzuci reszte pracy na inny wezel :)
Hm.. wydajność kodu w danej architekturze (mikrosekundy), czy programisty w kontekście produkowania użytecznego kodu (mikro-milenia) ? ;)
raczej wydajnosc calej aplikacji jako takiej, celuje w 500req/sec (serwowanie wynikow)
bez load balancera.
generacja wyniku to w tej chwili ok 11 sekund ale to takze bede probowal zmniejszyc
a czy może 'źle pobrać' ? a może chodzi o to, że ta paczka zastanie 'źle wysłana' ?
zakladajac ze do uploadowania ma nawet kilkanascie porcji danych po kilka MB to tak, moze byc "zle wyslana" albo poprostu niedoleciec, i na taka ewentualnosc takze musze sie zabezpieczyc
więc pozostają testy 'wysyłania', 'odbierania' i 'nawiązywania połączenia'
zrobi sie :)Łukasz C. edytował(a) ten post dnia 28.06.11 o godzinie 23:47

konto usunięte

Temat: mockowanie http

a czy może 'źle pobrać' ? a może chodzi o to, że ta paczka zastanie 'źle wysłana' ?
zakladajac ze do uploadowania ma nawet kilkanascie porcji danych po kilka MB to tak, moze byc "zle wyslana" albo poprostu niedoleciec, i na taka ewentualnosc takze musze sie zabezpieczyc

zrób więc mocka który taką sytuację zasymuluje tzn. przyjmie 1Mb danych na następnie rzuci wyjątek 'connection broken (?) exception' :) Po co zaraz serwer ?
więc pozostają testy 'wysyłania', 'odbierania' i 'nawiązywania połączenia'
zrobi sie :)

..cd trzeba po prostu sprawdzić, czy wysyłanie / odbieranie / nawiązywanie połączenia zachowuje się tak jak powinno czyli np. czy aplikacja poprawnie nawiązuje połączenie i czy poprawnie obsługuje potencjalne sytuacje wyjątkowe z tym związane. Do tego nie trzeba niczego innego jak mocki które symulują przewidziany zestaw 'zachowań / sytuacji'.

... 500 req/sec ... wow ...
Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: mockowanie http

Jakub Wojt:
zrób więc mocka który taką sytuację zasymuluje tzn. przyjmie 1Mb danych na następnie rzuci wyjątek 'connection broken (?) exception' :) Po co zaraz serwer ?

..cd trzeba po prostu sprawdzić, czy wysyłanie / odbieranie / nawiązywanie połączenia zachowuje się tak jak powinno czyli np. czy aplikacja poprawnie nawiązuje połączenie i czy poprawnie obsługuje potencjalne sytuacje wyjątkowe z tym związane. Do tego nie trzeba niczego innego jak mocki które symulują przewidziany zestaw 'zachowań / sytuacji'.
sproboje :)
... 500 req/sec ... wow ...
no serwowanie grafiki z jednej taniej maszyny + operacje na bazie to chyba nie taki znowu najgorszy wynik imho

Następna dyskusja:

Mockowanie File w Mockito.




Wyślij zaproszenie do