Har du inte redan testat att skapa automatiska tester med ”Automated Test Framework” (ATF) som kom med Istanbul (och med flera förbättringar i Jakarta) så gör det! Det är otroligt lätt att skapa automatiska tester med detta smidiga ramverk, och dessa kan sedan köras vid uppgraderingar eller vid andra förändringar i instansen för att hjälpa till att verifiera att allt fortfarande fungerar som det ska!
När man skapar automatiska tester så är ofta ett ”Impersonate”-steg det första man gör. Genom att köra testet som en specifik användare så kan man säkerställa att t.ex. ACL:er är uppsatta korrekt. Ett problem dock, som jag stött på när jag skapat tester, är att hitta en bra användare att använda för testet. Ett exempel:
Säg att jag vill testa att användare som har rollen X får skapa records i en viss tabell, tabell T. I min instans finns tre användare med rollen X: användare A, B och C. Dessa användare har däremot fler roller än bara rollen X:
A har rollerna X och Y
B har rollerna X och Z
C har rollerna X, Y och Z
Vilken användare ska jag använda i mitt ”Impersonate”-steg för att säkerställa att just rollen X ger rättighet att skapa records i tabellen T? Kommer testet fortfarande fungera om rollerna för den användare jag väljer skulle ändras?
Lösningen: För att slippa fundera över detta så kan man istället skapa en ny användare, ”ATF Test User” t.ex., för användning vid skapandet av automatiska tester. ”ATF Test User” har inga roller alls, utan tilldelas de roller som behövs vid exekvering av själva testet! För att testa om rollen X ger en rättighet att skapa records i tabellen T kan ett test med följande test-steg skapas:
Steg 1: Record Insert
Table: User Role [sys_user_has_role]
Field values: [User = ATF Test User] [Role = X]
Detta steget ser till att ”ATF Test User”-användaren tilldelas rollen X.
Steg 2: Impersonate
User: ATF Test User (atf_test_user)
Alla test-steg efter detta kommer att exekveras som ”ATF Test User” med rollen X.
Steg 3: Record Insert
Table: T [u_t]
Enforce security: true
Field values:
Går detta test-steget igenom så vet vi att rollen X ger rättighet att skapa records i tabellen T.
Måste man inte ”städa bort” roll-tilldelningarna igen innan testet exekverats klart? Nix, test-ramverket gör automatiskt en ”Rollback” på records som skapas med ”Record Insert”! 🙂
Bonus-tips! Vill man testa flera olika roller i samma test så kan man använda ”Record Delete” för att ta bort tidigare skapade records i sys_user_has_role-tabellen (använd referensen till det tidigare test-steget!) och sedan skapa ett nytt record för en ny roll. Se dock till att göra om ”Impersonate”-steget efter detta, och gör då först ”Impersonate” på en annan användare än ”ATF Test User”-användaren, för att roll-tilldelningen ska slå.