Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Devops meetup - Automatizált tesztek

949 views

Published on

Published in: Technology
  • Be the first to comment

Devops meetup - Automatizált tesztek

  1. 1. Automatizált tesztek
  2. 2. Rólam (Takács Zsolt)Backend developer @ ustream.tvFőleg PHP fejlesztés, kevés Java@oker1zsolt.takacs.ccgithub.com/oker1
  3. 3. TeszttípusokRengeteg létezik: ● unit tesztek ● adatbázistesztek ● integrációs tesztek ○ rétegtesztek ■ subcutaneous tesztek ○ contract tesztek ● acceptance tesztek ● end to end tesztekEgyik típus sem univerzális, a kulcs a megfelelő vegyítésük.
  4. 4. Unit tesztek ● Egy adott egység tesztelése elkülönítve a többitől. ● Több szemlélet (Mockist, Classical) bővebben ● Szorosan kapcsolódik a TDDvel ● A lehető leghamarabb befolyásolja a kód belső minőségét, már a születésekor ○ loose coupling ○ tesztelhetőség (IoC/DI) ○ tisztaság ● A lehető leggyorsabban ad visszajelzést az egység működéséről ● TDD nélkül is hasznos, de vele együtt tud igazán hatásos lenni.
  5. 5. Unit tesztek/2 ● Hibalokalizáció: akkor jók a tesztesetek, ha minél kevesebb törik el egyszerre, így könyebb megtalálni az okot ● Függetlenek legyenek 3rd partyktól, speciális bővítményektől (pl. nem alapértelmezett php modulok) ● Fő előnyök: ○ gyorsaság ○ izoláció ○ könnyű a 100% fedettség
  6. 6. Unit tesztek és legacy kód● Micheal Feathers meghatározása szerint minden teszt nélküli kód legacy kód. (Working Effectively With Legacy Code)● Legacy kód unit tesztelhetővé tehető.● A tesztelhetőséghez seamek kellenek● Seamek - Olyan helyek a kódban, ahol a kód átírása nélkül változtatható a működése. pl ○ Dependency Injection segítségével függőség lecserélése ○ Tesztspecifikus leszármazott + metódus felüldefiniálása● Ha nincsenek, alacsony kockázatú refaktorálással kialakíthatóak.● Rengeteg munka, rutin kell hozzá
  7. 7. Adatbázistesztek● Adatbázisközpontú alkalmazásoknál ideális● Klasszikus négy fázis ○ Setup - CREATE|TRUNCATE, INSERT ○ Exercise ○ Verify - Db állapot ellenőrzése ○ TearDown - DROP|TRUNCATE|NOOP● Eszközök ○ DbUnit (Java és PHP portok) ○ Etsy PHPUnit Extensions (csak PHP) ○ Liquibase (Nyelvfüggetlen)
  8. 8. Legacy kód● Unit-tesztelhetővé alakítás nem mindig a legjobb megközelítés.● Ha adatokat tárol az alkalmazás, azon keresztül sokszor könnyebben tesztelhető.● Elég a tesztelendő kódot kiemelni (ha szükséges) és utána átalakítás nélkül lefedhető tesztekkel.● Általában ezek a tesztek átfogóbbak, így nagyobb mozgásteret adnak refaktoráláshoz, mint a unit tesztek.● Frameworkök segítségével kényelmesen végezhető a tesztekben a setup és az ellenőrzés is.
  9. 9. Integrációs tesztek● Sikertelen marsjáró példája● A kifejezés nagyon tág● A lényeg, hogy több egység integrációját teszteljük● Integrációs hibák: ○ Paraméterezési hibák ○ Hibás feltételezés kollaborátorban● Gyakori problémák a tesztekben: ○ Rendszerhatárt jelentő implementációk lecserélése, pl. adatbázis, külső api kliense ○ Globális állapotot becsomagoló objektumok lecserélése (pl. idő) ○ Cross-cutting concernök, pl logolás lecserélése● Mindegyik megoldása körülményes Dependency Injectionnel
  10. 10. Dependency Lookup● Dependency Injection helyett használható● Használható Singleton, Registry, stb.● Globálisan elérhető legyen● Befolyásolható legyen mit ad a dependenciát kérő kódnak
  11. 11. Dependency Lookup példa
  12. 12. Contract tesztek● Egy interfész implementálóit teszteli● Az implementáló osztályok működésével kapcsolatos elvárásokat rögzíti● Megvalósítás: absztrakt tesztosztály● Minden implementálóhoz egy leszármazott tesztosztály● A leszármazott teszt implementálja a tesztelt objektum létrehozását, az ősben vannak a tesztesetek
  13. 13. Contract teszt példa

×