Enkla och effektiva testverktyg i Unix

När man pratar om testverktyg är det många som bara associerar till två olika typer av verktyg: testmanagementverktyg såsom HP Quality Center eller Rational Quality Manager och testautomatiseringsverktyg såsom HP QuickTest Professional och Rational Functional Tester. Det finns dock ofta många tillgängliga verktyg som kan vara användbara som hjälpmedel i testningen och som man inte direkt tänker på.

Denna artikel kommer att handla om olika Unixverktyg som är bra för testare att känna till. De som jobbar i en UNIX-/Linux-/BSD-miljö har redan tillgång till dessa verktyg - dem jag kommer diskutera är så gott som alltid är installerade på sådana system. Jobbar man i Windows-miljö rekommenderar jag varmt att testa Cygwin som också innehåller de verktyg jag beskriver nedan.
Styrkan med Unixverktygen är att de är små enkla program som är bra på en sak, och att man kan koppla ihop dem för att få dem att tillsammans göra  det man är ute efter. För att få hjälp med ett visst kommando använder man sig av kommandot man. För att exempelvis få hjälp med kommandot grep så skriver man man grep. (Skulle det vara så att "man" är felaktigt installerat på det system man jobbar på vilket hänt mig flera gånger så går det precis lika bra att googla på man grep.)

Många program genererar någon form av loggfiler vid exekvering. Dessa innehåller ofta värdefull information om vad som hänt under ett test. Tyvärr innehåller loggarna ibland alltför mycket information för att man ska kunna göra någon vettig analys bara genom att titta på loggfilen. Detta är en uppgift som dessa Unixverktyg lämpar sig särskilt väl för.

Tänk dig att vi har en loggfil som heter application.log och som har följande format (fast som i själva verket är fem miljoner rader lång):

2010-12-05 09:46:12 - Utför kommando C
2010-12-05 09:46:16 - Utför kommando B
2010-12-05 09:46:17 - Utför kommando B
2010-12-05 09:47:35 - Utför kommando A
2010-12-05 09:47:35 - Error 54338
2010-12-05 09:49:53 - Utför kommando C
2010-12-05 09:50:54 - Error 54323
2010-12-05 09:51:05 - Utför kommando B
2010-12-05 09:51:06 - Error 54323

Ett första exempel är att man vill hitta alla tillfällen i loggen då någon felkod skrivits ut:
$ grep Error application.log
 
2010-12-05 09:47:35 - Error 54338
2010-12-05 09:50:54 - Error 54323
2010-12-05 09:51:06 - Error 54323


grep filtrerar ut alla rader i en fil som innehåller ordet Error.

Hur många gånger har någon felkod skrivits ut:
$ grep Error application.log  | wc -l
3

Tecknet "|" ovan betyder att resultatet ifrån grep Error application.log ska användas som indata till wc -l. wc är ett kommando för att räkna ord i en textfil. Flaggan -l innebär att kommandot bara ska räkna antalet rader.

En lista som bara innehåller de unika felkoder som uppstått under körningen av programmet:
$ grep Error application.log | awk '// {print $5}' | sort -n -u
54323
54338


awk är ett kraftfullt program för att processa textfiler. För detta exempel räcker det att veta att $5 betyder att det femte "ordet" på varje rad ska skrivas ut (ord separeras med blanksteg eller tab), det vill säga själva felkodsnumret. Sort sorterar alla rader i bokstavsordning. Flaggan -n betyder att sorteringen ska ske i nummerordning. Flaggan -u betyder att bara unika rader ska finnas med, dubbletter visas inte.

Vilka kommandon har utförts precis före felkoden 54323:
$ grep "Error 54323" -B 1 application.log | grep kommando | awk '// {print $6}' | sort -u
B
C


Det enda som är nytt här är flaggan -B 1 till grep som betyder att en rad före den rad som matchar också ska skrivas ut. Därmed skrivs de kommandon som föregår felkoden ut och man kan därefter sortera ut dessa kommandon med grep, awk och sort precis som i förra exemplet.


Och slutligen, hur många gånger har varje kommando utförts:
$ grep kommando application.log | awk '// {print $6}' | sort | uniq -c | sort -n -r
3 B
2 C
1 A


Efter grep, awk och sort finns en lista med alla kommandon som utförts sorterade i bokstavsordning med dubbletter uniq -c räknar hur många dubbletter det finns för varje unik rad. Den sista sort slutligen sorterar listan igen fast nu efter hur många gånger varje kommando utförts, i omvänd numerisk ordning.

Med dessa fem enkla Unixverktyg (awk, grep, sort, uniq, wc) som inte gör särskilt mycket var för sig har vi lyckats få ut intressant information ifrån vår loggfil ovan på ett sätt som troligtvis gick betydligt snabbare än att antingen själv skriva ett eget program, eller be någon annan göra det. Om man inte jobbar med bara en fil utan med många filer som är utspridda i olika kataloger rekommenderar jag att ta en titt på kommandona find och xargs.

Det finns ofta betydligt fler testverktyg tillgängliga än vad man först tänkt på. Unixverktygen är bara ett exempel på några av alla dessa dåligt nyttjade resurser.
 
Om författaren
Patrik Wikström är konsult och testare. Han har en unik passion för allt som rör test och testmetodik och har sedan ett antal år tillbaks främst fokuserat på test i tekniska miljöer.