Jak jednoduše simulovat v testech HTTP server

Pavel Jetensky

O autorovi: Jetyho blog | LinkedIn

Pavel Jetenský se věnuje Java/J2EE vývoji již od roku 2003, z toho několik let v Irsku. Zajímají ho techniky automatického testování. V současné době pracuje jako metodický vedoucí Java/J2EE v Deltax Systems a.s.

Občas při tvorbě automatických testů potřebujeme otestovat funkcionalitu, která stahuje nějaká data z Internetu. V mém případě to byla funkce na stahování seznamu zneplatněných certifikátů (CRL). Původně jsem měl automatický test napsaný tak, že se seznam skutečně stahoval. To bylo nevýhodné ze dvou důvodů:

  • test nefungoval bez připojení k internetu
  • těžko šlo ovlivnit v rámci testu stahovaná data

Napsal jsem si tedy jednoduchou implementaci HTTP serveru, která publikuje soubory z classpath pod stejnou relativní cestou na localhost adrese. Např. soubor s CRL umístěný v src\test\resources\crl\emptyCrl.crl je po spuštění serveru ke stažení na:

http://localhost:8001/ResourcePublishServer/crl/emptyCrl.crl

Moje řešení obsahuje dvě třídy: ResourcePublishServer.java a ResourceToResponseHandler.java a využívá HTTP server, který se nově objevil v JDK 1.6 (viz. JavaDoc k HttpServer.create).

Třídy ke stažení (ZIP)

Pozn.: Třídy jsou nyní závislé na Spring aplikačním kontextu, ale drobnou úpravou (nahrazením volání applicationContext.getResources za getClass().getResourceAsStream) by je šlo použít i tam, kde Spring není.

Ukázka použití serveru v testu

Pozn.: Stažené CRL, které se použije v testu, je uložené v CVS (tj. není přiloženo k ukázkovým třídám) ve složce src\test\resources\crl\kcanbusr3.crl.

Podělte se s ostatními:

  • Digg
  • del.icio.us
  • Technorati
  • Diigo
  • DZone
  • FriendFeed
  • Google Bookmarks
  • LinkedIn
  • Reddit
  • RSS
  • StumbleUpon
  • Twitter

Související články:

  1. Mock FTP server – další perla do sbírky automatického testování
  2. Sdílení session mezi protokoly HTTP a HTTPS
  3. Jak nainstalovat MySQL server na Windows Vista
  4. Zajímavý článek o Artifactory na The Server Side
  5. Testing Aspect Pointcuts – is there an easy way?
Ohodnoťte článek:
Takovéhle články už radši ne!Nic nového pod sluncem.Průměr - obsahuje zajímavé střípky informací.Hodnotný článek - lecos nového jsem se dozvěděl.Skvělý článek - informace se mi dost hodí. (doposud bez hlasů)
Loading ... Loading ...

2 Responses to “Jak jednoduše simulovat v testech HTTP server”

  1. Petr says:

    Možná hloupý dotaz – proč bylo potřeba psát vlastní HTTP server a nepoužít pro testování např. Jetty?

  2. Otec Fura says:

    Odpovím za Jetyho – žádný HTTP Server se v daném řešení nepíše. Jen se využívá existující třídy HttpServer, která je v JDK 6. Přiložené třídy jsou jen supportní obal pro jednoduché použití v automatických testech.

    Toto řešení je v podstatě ekvivalentní použití např. Jetty kontejneru – jen je daleko lehčí a zároveň není nutné k projektu linkovat další dependency.

Leave a Reply