En database er en uunnværlig del av ethvert system eller applikasjon. Effektiv håndtering og henting av data fra databasen er avgjørende for å sikre smidige transaksjoner og pålitelig drift.
Nesten alle nettsteder og applikasjoner som håndterer dynamisk innhold, er avhengig av enten en database eller et API. Tenk for eksempel på en e-handelsplattform der brukere foretar kjøp online. En database er nødvendig for å lagre informasjon om produkter og brukere.
Hva er databasetesting?
Databasetesting er prosessen med å bekrefte nøyaktigheten og integriteten til en database. Det finnes forskjellige metoder for å teste en database, og disse kan være automatiserte, manuelle eller en kombinasjon av begge.
Databasetesting omfatter testing av dataintegritet, databaseskjema, datamanipulasjon og databasekonsistens. Det sjekkes også om databasen er kompatibel med eksisterende maskinvare eller systemer som de tiltenkte brukerne har.
Ofte utføres databasetesting av kvalitetssikringsansvarlige eller testingeniører med spesialisering i databaser. Disse personene bør ha gode databaseferdigheter og kunne bruke ulike verktøy for å analysere testresultater.
Fordeler med databasetesting
- Sikrer at databasen oppfyller funksjonelle krav: Ved utvikling av en database har utviklerne spesifikke funksjonsmål. Databasetesting kontrollerer om disse målene er oppnådd.
- Bidrar til å hindre datatap: En database kan inneholde store mengder data, fra ordredetaljer til personlig informasjon. Grundig testing kan avdekke feil som kan forårsake tap av data.
- Forbedrer databasesikkerhet: Systemer og applikasjoner er sårbare for angrep. Databasetesting hjelper med å identifisere svakheter som hackere kan utnytte, slik at de kan rettes før skade skjer.
- Optimaliserer ytelse: En effektiv database skal hente og behandle informasjon raskt. Databasetesting kan identifisere flaskehalser som reduserer systemets ytelse.
Typer databasetesting
- Funksjonstesting: Bekrefter at systemet oppfyller de funksjonelle kravene. Kan brukerne for eksempel opprette, lese, oppdatere og slette data i databasen?
- Ytelsestesting: Evaluerer hvordan databasen reagerer på ulike handlinger. Hvor lang tid tar det for eksempel å hente data når en bruker sender inn et skjema? Det sjekkes også databasens skalerbarhet.
- Dataintegritet: En ideell database har forhåndsdefinerte prinsipper, relasjoner og begrensninger. Dataintegritetstester sjekker om dataene overholder disse prinsippene.
- Datavalidering: Sjekker om dataene i databasen er gyldige.
- Sikkerhetstesting: Avdekker sårbarheter som kan kompromittere systemets sikkerhet. Noen verktøy kan til og med anbefale måter å fikse disse svakhetene.
Det finnes flere typer databasetesting, avhengig av datatypen som lagres og organisasjonen.
Praktiske eksempler på databasetesting
La oss se på et eksempel med en e-handelsbutikk:
- Automatiserte tester kan sjekke om nye brukere kan opprette kontoer og om deres detaljer legges inn i databasen.
- Tester kan bekrefte transaksjoner, kuponger og rabatter. En fullført transaksjon skal for eksempel registreres i databasen. Hvis kuponger brukes, skal dette gjenspeiles i databasen, og prisene oppdateres tilsvarende.
- Test databasens ytelse. Hvis mange brukere er inne på siden samtidig, bør det testes om databasen takler belastningen.
Datatyper du bør teste
Det kan være vanskelig å vite hvor man skal starte ved databasetesting. Her er noen fokusområder:
#1. Datakartlegging
Data overføres mellom front-end (brukergrensesnitt) og back-end (database). Datakartlegging sjekker om feltene i brukergrensesnittet stemmer overens med databasetabellene.
Et typisk skjema gir brukere mulighet til å utføre CRUD-operasjoner (Create, Retrieve, Update and Delete). Denne testen sjekker også om handlinger i front-end initierer de korrekte CRUD-operasjonene i databasen. Hvis en ny bruker oppretter en konto, skal de oppgitte dataene legges til (opprett-operasjon) i databasen.
#2. ACID-egenskaper
Det bør kontrolleres at transaksjoner overholder ACID-egenskapene (atomaritet, konsistens, isolasjon og varighet). Slik fungerer ACID-egenskapene:
- Atomaritet: En transaksjon må enten fullføres i sin helhet eller ikke i det hele tatt.
- Konsistens: Databasens tilstand skal alltid være gyldig, og alle begrensninger må oppfylles.
- Isolasjon: Hver transaksjon skal utføres uavhengig av hverandre, slik at ingen transaksjon påvirker andre.
- Varighet: Når en transaksjon er utført, skal det ikke oppstå datatap.
#3. Dataintegritet
Dataintegritet sikrer at systemet bruker de samme dataene på tvers av alle transaksjoner. Systemet skal alltid vise de nyeste dataene. Testen bør bekrefte at alle triggere er på plass for å oppdatere data. Det skal også sjekkes at dupliserte databaser er synkroniserte med originalen.
#4. Forretningsregler og -prinsipper
Databasen skal tillate implementering av forretningslogikk. Lagrede prosedyrer, triggere og relasjonsbegrensninger kan testes for å se om databasen er synkronisert med forretningsprinsippene.
Hvordan utføres databasetesting?
Databasetesting kan utføres manuelt, automatisk eller ved en kombinasjon. Her er en typisk fremgangsmåte:
- Kravanalyse: Testteamet analyserer databasestrukturen for å definere ytelseskrav, datarelasjoner og dataskjema. Dette hjelper med å bestemme testomfanget, testmiljø og testmål.
- Oppsett av testmiljø: Testmiljøet kan være likt produksjonsmiljøet, eller det kan opprettes en separat databaseinstans for et isolert testmiljø.
- Forberedelse av testdata: Tester er utformet for å dekke ulike scenarioer, som feilsituasjoner, grensetilfeller og normale tilfeller. Passende datasett som gjenspeiler virkelige scenarier velges.
- Testutførelse: Testteamet utfører testene manuelt eller setter opp automatiske testskript. Testmetoden vil avhenge av målet med testen.
- Kontroll og validering av resultater: Testingeniørene sjekker om testene kjører som forventet, og finjusterer testene basert på innsamlede data.
- Testrapportering: Ingeniørene presenterer funnene sine i en rapport. Disse kan være enkle (ja/nei), eller detaljerte med beskrivelse av feil og årsaker.
Et databasetestverktøy kan brukes for å teste databasens funksjonalitet og integritet. Her er noen grunner til å vurdere et slikt verktøy:
- Tidsbesparelse: Du trenger ikke skrive tester fra bunnen av. Integrer verktøyet med databasen og start testing umiddelbart.
- Avanserte testfunksjoner: Noen testverktøy har avanserte funksjoner som gir grundig testing. Noen testnivåer er kanskje ikke oppnåelige med manuelle tester.
- Bred dekning: De fleste verktøy er utviklet for å teste ulike typer databaser, inkludert både SQL og NoSQL.
Noen verktøy er gratis, mens andre er betalt. Her er noen av de beste verktøyene:
#1. HammerDB
HammerDB er et verktøy for benchmarking og lasttesting, og fungerer med de fleste databaser. Den kan brukes med Microsoft SQL Server, Oracle Database, MySQL, IBM Db2, PostgreSQL og MariaDB.
- Multiplattform: HammerDB kan brukes på Linux og Windows.
- Åpen kildekode: Kildekoden er tilgjengelig på GitHub.
- HammerDB som webtjeneste: Verktøyet kan brukes som en CLI, en GUI eller en webtjeneste, slik at brukerne kan kjøre det som en REST-klient med et HTTP-grensesnitt.
- Støtter Step Workloads: Denne avanserte funksjonen lar deg automatisk variere databasens belastning over tid, slik at databasens evne til å takle svingninger i etterspørselen kan overvåkes.
- Docker-støtte: Rask distribusjon og testing av databaser på Docker er mulig med HammerDB, ved hjelp av et Docker-bilde.
#2. DbFit
DbFit er et rammeverk for databasetesting designet for testdrevet utvikling. Det kan automatiseres på CLI byggeverktøy eller en Java IDE.
Nøkkelegenskaper:
- Åpen kildekode og gratis: Kildekoden er tilgjengelig på GitHub.
- Komplett løsning: DbFit lar deg skrive, utføre og administrere tester fra nettleseren.
- Lesbare tester: Testene er enkle å lese fordi de er skrevet i tabeller. (De fleste verktøy har tester i xUnit-stil.)
- Støtter store databaser: DbFit kan brukes med databaser som HSQLDB, SQL Server, Oracle, Derby, MySQL og PostgreSQL.
- Solid rammeverk: DbFit er bygget på FitNesse, et modent rammeverk med et stort fellesskap.
- Databasepassordkryptering: Passord kan krypteres ved hjelp av en kryptografisk nøkkel.
#3. tSQLt
tSQLt er et enhetstestingsverktøy for SQL Server. Dette åpen kildekode-verktøyet tester ulike deler av databasekoden for å sikre at de fungerer som forventet. Det kan også brukes med T-SQL.
Nøkkelegenskaper:
- Kjører tester automatisk innenfor transaksjoner: Dette reduserer behovet for opprydding og holder testene uavhengige.
- Utdata i XML eller ren tekst: tSQLt er kompatibel med ulike verktøy for kontinuerlig utvikling.
- Tabeller og visninger kan forfalskes: Dette isolerer koden som skal testes og reduserer responstiden.
- Støtter testgruppering: Testene kan grupperes innenfor et skjema, slik at oppsettsmetoder enkelt kan gjenbrukes.
#4. DbUnit
DbUnit er en JUnit-utvidelse for testing av databasedrevne prosjekter. Verktøyet setter databasen i en kjent tilstand mellom testene, slik at feil i en test ikke ødelegger hele databasen.
Nøkkelegenskaper:
- Enkel å bruke: DbUnit har utfyllende dokumentasjon.
- Støtter dataverifisering: Den offentlige Assertion-metoden kan brukes for å sjekke om to datasett eller tabeller inneholder samme data.
- Støtter tilpasset TestCase: JUnit sin setUp() metode kan overstyres for å utføre egendefinerte operasjoner på databasen.
Konklusjon
Vi håper du nå har en bedre forståelse for databasetesting, metodene og verktøyene som kan brukes. Testing bør ikke være en engangsprosess, men utføres når det legges til nytt innhold i databasen. Testteknikken avhenger av dine mål og databasens karakter.
Sjekk gjerne ut vår artikkel om databasedeling.