TestAutomatisering & PerformanceTesten

Een korte intro in data-analyse met R

In deze blog sta ik stil bij een recent voorbeeld van innovatie. Ik beschrijf hoe ik R heb ingezet bij het analyseren van loadtest-resultaten, omdat een andere analyse tool zoals die van MicroFocus LoadRunner / Performance Center niet voor handen was. Dit was het geval in een klantsituatie waarbij teams in staat zijn gesteld zelf al zoveel en zo vroeg mogelijk te performancetesten, met tools als bijvoorbeeld JMeter. Zo kunnen teams meer autonoom opereren en ontstaat er al in een eerder stadium een eerste beeld over de performance van een applicatie.

Wanneer er grote hoeveelheden data zijn om te analyseren, of wanneer er simpelweg een aantal CSV-bestanden met gegevens verwerkt en weergegeven moeten worden in een tabel of grafiek, wordt daar vaak Excel voor gebruikt. Zolang je eenvoudige gegevens verwerkt, is dit best een goede oplossing. Maar in de praktijk moet je vaak meerdere bestanden combineren en wil je diverse berekeningen op de ingelezen gegevens loslaten. Wij hebben in het gebruik van R een goede oplossing gevonden.

R is een programmeertaal en omgeving voor statistische analyse en grafische representatie van gegevens. R is de open-source versie van S. Meer informatie is te vinden op de website van het R-Project (www.r-project.org). R-Studio is een populaire IDE voor R en is zowel als open source en als commerciële editie beschikbaar. RStudio draait op Windows, Mac en Linux.

In het volgende voorbeeld is er sprake van een drietal bestanden die gecorreleerd moeten worden:

  1. create.dat – dit bestand bevat items die op een bepaald tijdstip zijn gecreëerd.
  2. queue.dat – dit bestand bevat meerdere tijdstippen per items waarop deze op een queue geplaatst zijn.
  3. processed.dat – dit bestand bevat meerdere statussen en tijdstippen per verwerkt item van de queue.

In onderstaand plaatje worden een paar regels van de verschillende bestanden weergegeven.

Hoewel het mogelijk is om dit in Excel te correleren en weer te geven in een grafiek, is dat geen eenvoudige klus. Met behulp van R kan dit veel sneller een eenvoudiger, zeker met grote bestanden. Er zijn veel packages beschikbaar voor R die als hulpmiddel kunnen dienen bij data manipulatie of weergeven van grafieken en tabellen. Hieronder zie je de grafiek die met R gemaakt is waarin het aantal events per minuut zijn weergegeven.

De bijbehorende tabel toont de gegevens zoals die gebruikt zijn voor het creëren van bovenstaande grafiek.

Het is verder mogelijk om te filteren en sorteren. In onderstaande tabel is gefilterd op id 313-1563955 en gesorteerd op id. Op deze manier is het eenvoudig om alle events per id terug te vinden.

De code die nodig is om dit alles te maken kun je hieronder terugvinden. Zelfs als je nog niet bekend bent met de taal R is het al goed mogelijk om deze code te lezen. Het is zeker de moeite waard om je in R te verdiepen, het is een krachtig hulpmiddel voor data-analyse.

---
title: "Data analyse met R"
author: "Rene Meijboom"
date: "26 februari 2019"
output: html_document
---

```{r demo, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
options(warn = -1)
library(formattable)
library(DT)
library(plotly)

create <- read.csv("create.dat",
               header = FALSE,
               stringsAsFactors=FALSE,
               sep = ",")
names(create)<- c("name","id","datetime")
create$datetime <- as.POSIXct(strptime(create$datetime, "%Y-%m-%dT%H:%M:%S"))
create["event"] <- c("created")

publish <- read.csv("queue.dat",
                   header = FALSE,
                   stringsAsFactors=FALSE,
                   sep = ",")
names(publish)<- c("id","datetime")
publish$datetime <- as.POSIXct(strptime(publish$datetime, "%Y-%m-%dT%H:%M:%S")) 
publish["event"] <- c("on queue")

processed <- read.csv("processed.dat",
                   header = FALSE,
                   stringsAsFactors=FALSE,
                   sep = ",")
names(processed)<- c("id","status","datetime")
processed$datetime <- as.POSIXct(strptime(processed$datetime, "%Y-%m-%dT%H:%M:%S")) 
processed["event"] <- c("processed")

total <- rbind(subset(processed,select = c("id","datetime","event")),rbind(subset(create,select = c("id","datetime","event")),publish))

aggr <- aggregate(id~datetime+event, FUN=length, data=total)

dfgran <- aggregate(id~event+strftime(cut(aggr$datetime, "60 sec"), "%H:%M:%S"), FUN=length, data=aggr)
names(dfgran)<- c("event","time","count")

plot_ly(dfgran, x=~dfgran$time, y=~dfgran$count, color=dfgran$event, type = 'scatter', mode = 'lines') %>%
layout(title = 'Events per minute',
      xaxis = list(title = 'Elapsed time'),
      yaxis = list(title = 'Number of items'),
      margin = list(l = 50,
  r = 50,
  b = 100,
  t = 100,
  pad = 4))

as.datatable(formattable(total))
```

Conclusie is wat mij betreft dat R je prima mogelijkheden geeft om tot complexe data analyses te komen. Al dan niet in samenhang met een geautomatiseerd performance test framework. Heb jij ervaring met R, of juist met een ander, vergelijkbaar tool? We zien jouw ervaringen graag als reactie tegemoet!

De in deze blog besproken ‘data-analyse met R’ is een voorbeeld van één van de innovaties die PerformanceArchitecten samen met haar klanten ontwikkeld. Innovatie is iets waar de omstandigheden steeds vaker om vragen gezien de snelle ontwikkeling binnen het vakgebied. Al deze innovaties komen samen in de aanpak Quality Engineering (QE) van PerformanceArchitecten. QE ondersteunt klanten met het opzetten van een integrale kwaliteitsaanpak in een DevOps en CI/CD omgeving. Het draagt bij aan een sneller ontwikkelproces met een betere kwaliteit. Zowel op functioneel gebied als op non-functioneel gebied. Mocht je hier vragen over hebben of mocht je hier gewoon eens over willen sparren, zien we graag je reactie!

Dit bericht is geplaatst in Performancetesten Quality Engineering en getagd in Agile CI/CD Data analyse R Innovatie

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Nieuws

Blijf op de hoogte

Gatling simulaties in een executable jar

07/08/2020

Performance testen: Een handleiding voor het produceren van een fat jar uit een gatling framework.

Don’t be a fool, get the right tool!

30/06/2020

Heb jij weleens een keuze gemaakt voor een tool die achteraf gezien toch niet de verstandigste bleek? Helaas een ervaring die veel IT professionals weleens opdoen. En gezien de tools in de moderne ontwikkelomgevingen niet meer aan te slepen zijn, denk ik dat dit nog weleens vaker het geval gaat zijn.. Als testautomatiseerders hebben wij […]

Performance en de cloud

27/05/2020

Eén van de meest genoemde voordelen van de cloud is de in theorie oneindige schaalbaarheid. Zo zou het niet meer nodig zijn om als organisatie veel reservecapaciteit in te richten om pieken op te vangen en de performancerisico’s zouden helemaal verdwijnen. Maar is dat wel altijd zo? Wanneer wel, wanneer niet? Duidelijk is, dat wanneer […]

Ervaringen Performance.Now() 2019

13/12/2019

Ervaringen conferentie PerfNow

Performance test in de pipeline

25/10/2019

In deze blog geef ik kort en bondig neer in welke opzet en met welke tooling ik performancetesten heb geïntegreerd in de pijplijn bij mijn huidige opdracht.

Circle-CI, van code naar webserver met één klik.

13/09/2019

Wanneer je ‘vroeger’ een website had, waren er altijd flink wat handelingen nodig om files via een FTP client op een webserver te krijgen. Vandaag de dag, met behulp van een verscheidenheid aan tooltjes, is dat een fluitje van een cent. Daarnaast krijg je een arsenaal aan mogelijkheden mee als builden, testen, etc.. In deze […]

Een korte intro in data-analyse met R

10/07/2019

Een blog over hoe je met behulp van R grote hoeveelheden data kan analyseren. Een tool dat je helpt bij de analyse van bijvoorbeeld load- en stresstestresultaten.

Installatie Oracle ATS op Windows

28/03/2019

Handleiding over hoe je Oracle ATS installeert op Windows (Versie 13.x of hoger)

Postman API testen in CI

01/02/2019

beschrijving van hoe je jouw Postman collectie laat draaien vanuit Jenkins en hoe je hierbij een praktisch JUnit test report krijgt.

Workshop ‘Stop de Magie!’ bij Qquest

04/12/2018

In het kader van de 4e techday van Qquest heeft Chris met ondersteuning van HenkJaap een workshop gegeven. Basis was de presentatie en demo ‘No more magic’ van Bas en Chris, welke al een groot succes was op de TestAutomationDay en TestNet. Centraal bij het onderwerp ‘No more Magic’ staat het idee dat er bij […]

Visual Regression Testing – Wat is het en wat heb je eraan?

07/11/2018

Visual Regression Testing, of visuele regressie testen, is een categorie van testen die zich focust op het identificeren van visuele wijzigingen tussen iteraties of versies van een website. Dit kan handmatig door schermen of schermafdrukken te vergelijken, maar het is beter herhaalbaar en sneller te testen door dit automatisch te doen. Het mooiste is om deze testen als een […]

Meer efficiency en flexibiliteit in API’s

04/10/2018

Er wordt steeds meer gebruik gemaakt van GraphQL API. Tijdens mijn laatste opdracht heb ik hier dan ook mee gewerkt.. Graag deel ik mijn ervaringen hierover in een aantal blogs. In deze eerste blog wil ik het graag hebben over de uitdagingen met REST API en hoe GraphQL deze oplost. Maar eerst even een korte […]