Devops meetup - Automatizált tesztek

860 views
817 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
860
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

×