Introductie
Heb je je geen moment in het leven afgevraagd waarom je doet wat je doet? Waarom is testautomation nu echt nodig en wat is de werkelijke waarde? In dit document ga ik proberen te begrijpen welke waarde testautomation kan hebben voor organisaties met één geschreven voorbeeld, een gesloten repo die ik aan het bouwen ben met partners voor implementatie bij verschillende klanten. Ik heb een strategische benadering, gebruikscase voor de gebruikersinterface voor testautomatisering, waarbij ik gebruik maak van het kosten- en efficiëntiemodel met vijf factoren, met een voorbeeld van toneelschrijver en Dynamics Business Central, maar dit kan in elke testtool of taal worden gedaan (bijvoorbeeld Robot framework, Katalon Studio)
Hieronder staan de vijf punten die volgens mij klanten kunnen helpen
Capaciteitsproblemen
Efficiënt gebruik van middelen:
- Uitdaging: Handmatig testen vergt veel mankracht, wat leidt tot hoge kosten en inefficiënt gebruik van gekwalificeerd personeel.
- Oplossing: Automatisering maakt het mogelijk om tests uit te voeren zonder voortdurende menselijke tussenkomst, waardoor de capaciteit van het testteam effectief wordt vergroot zonder dat er extra personeel nodig is.
Versnelling van testcycli:
- Uitdaging: Handmatige tests kunnen lang en arbeidsintensief zijn, waardoor de releasecycli worden vertraagd.
- Oplossing: Geautomatiseerde tests kunnen snel en frequent worden uitgevoerd, wat leidt tot snellere feedback en kortere releasecycli.
Tijdsbeperkingen
Verkorting van de testtijd:
- Uitdaging: Handmatig testen is tijdrovend, vooral voor regressietests die elke maand moeten worden herhaald.
- Oplossing: Het automatiseren van regressietests verkort de tijd die nodig is voor elke testcyclus aanzienlijk, waardoor ontwikkelingsteams meer tijd hebben voor andere kritieke taken.
Continue integratie en snelle validatie:
- Uitdaging: Het valideren van software na elke wijziging kan tijdrovend zijn met handmatige tests.
- Oplossing: automatiseringsscripts kunnen na elke build in een CI/CD-pipeline worden uitgevoerd, waardoor snelle validatie en vroegtijdige detectie van fouten mogelijk is.
Kennisbeperkingen
Kennis
Uitdaging: Handmatig testen vereist specifieke kennis en expertise, wat een risico vormt als teamleden vertrekken of ziek zijn.
Oplossing: Automatiseringsscripts kunnen door elk teamlid worden uitgevoerd, ongeacht hun expertise, waardoor kennisdeling en continuïteit worden bevorderd.
Opleiding en onboarding:
Uitdaging: Nieuwe teamleden hebben vaak een uitgebreide training nodig om handmatige tests correct uit te voeren.
Oplossing: Geautomatiseerde tests vereisen minder training omdat scripts en documentatie automatisch worden gegenereerd en bijgewerkt.
Kwaliteitsproblemen
Consistentie en nauwkeurigheid:
Uitdaging: Handmatige tests zijn gevoelig voor menselijke fouten en inconsistente uitvoering.
Oplossing: Geautomatiseerde tests voeren elke keer dezelfde stappen uit met dezelfde nauwkeurigheid, wat leidt tot consistentere en betrouwbaardere resultaten.
Verbeterde dekking:
Uitdaging: Het is een uitdaging om een uitgebreide testdekking te garanderen met beperkte handmatige testcapaciteit.
Oplossing: Dankzij automatisering kunnen teams een breder testbereik bereiken door meerdere tests in een kortere tijdspanne uit te voeren.
Documentatie en naleving
Documentatie in realtime:
Uitdaging: Het up-to-date houden van documentatie is tijdrovend en vaak achterhaald bij handmatige tests.
Oplossing: Geautomatiseerde testscripts kunnen dienen als levende documentatie, wat betekent dat de documentatie altijd actueel is en automatisch wordt bijgewerkt na elke testuitvoering.
Naleving en audittraject:
Uitdaging: Handmatige processen bieden mogelijk geen duidelijke controlesporen of voldoen altijd aan de nalevingsvereisten.
Oplossing: Automatisering zorgt voor gedetailleerde logbestanden en rapporten die eenvoudig kunnen worden gebruikt voor audits en nalevingsdoeleinden.
Voorbeeld
Laten we eens kijken naar een echt voorbeeld dat ik aan het bouwen ben voor een van mijn klanten in typoscript voor toneelschrijvers (let op: ik ga niet in detail op deze code in omdat deze gesloten is, neem voor meer informatie contact met mij op)
Vereisten die ik gebruik
- CSS/Json als json-waarde
- Toneelschrijver
- Annotatieklasse
- Testgegevens als code
Introductie:
Als tester/ontwikkelaar wil ik laten zien hoe „eenvoudig” het is om geautomatiseerde UI-tests van Dynamics Business Central in te stellen die eenvoudig kunnen worden onderhouden in een objectklassemodel voor gebruikspagina’s. Voor dit voorbeeld gebruik ik playwright en Microsoft Dynamics Business Central, en het zal de meeste opsommingstekens behandelen als je je scripts duidelijk instelt, waarbij de vijf „problemen” worden behandeld die kunnen worden opgelost met de testautomation UI.
Hoe is de structuur van de toneelschrijver georganiseerd
- Gegevens - Bewaar testgegevens in een gestructureerd formaat zoals JSON.
- PageObjects - Maak voor elk deel van de gebruikersinterface (formulieren, rasters, menu’s) een aparte klasse die alle bewerkingen en elementen van dat onderdeel omvat.
- Hulpprogramma’s - Voor herbruikbare methoden, zoals uw annotatiehulp of een CSS-injector.
- Tests - Testscripts die PageObjects en Data gebruiken om bewerkingen uit te voeren.
Beschouw dit json-object als het startpunt
{
"First Name": { "value": "John", "type": "text" },
"Last Name": { "value": "Engineering", "type": "text" },
"Job Title": { "value": "Male", "type": "text" }
},
{
"First Name": { "value": "Jane", "type": "text" },
"Last Name": { "value": "Marketing", "type": "text" },
"Job Title": { "value": "Female", "type": "text" }
}
]
Voor Dynamics, SAP en/of Salesforce kunt u voor bijna alle schermen een zeer modulaire aanpak genereren. Ik injecteer de masterdata in het script dat wel wordt doorgelust. Het script weet op basis van de informatie in de json precies naar welk scherm het moet gaan. Het enige dat je in je test moet schrijven is het belangrijkste: de test zelf ;-)
Ik gebruik een PageObject Model Utility-benadering waarbij ik op slimme wijze css injecteer in helperobjecten voor formulieren, rasters en menupagina’s, zodat ik de onderhoudbaarheid laag houd. In mijn test gebruik ik een annotatiehelper die in realtime wat context aan de schermafbeelding kan toevoegen. Dit kan extra input bieden voor het gebruik van werkinstructies, als je deze wilt gebruiken voor end-to-end flows.
import { test, expect } from '@playwright/test';
import { MenuPage } from './pageobjects/utilities/menupage';
import { FormPage } from './pageobjects/utilities/formpage';
import { AnnotationHelper } from './pageobjects/utilities/annotationhelper';
import formData from './testdata/test1_employeeformdata.json';
Wacht…, als ik aantekeningen kan maken voor mijn schermafbeeldingen, dan is het geen goed idee om dit te publiceren op een documentbeheersysteem zoals Confluence of Azure Devops Wiki, dat het educatieve en auditgedeelte van de vijf probleempunten kan behandelen. Laten we eens kijken naar de pseudocode die kan worden gebruikt om dit te integreren.
Oplossing 1: publiceer naar Azure Devops
const exec = require('child_process').exec;
// Git command to add screenshot to the repo
function gitAddFile(filePath, commitMessage) {
exec(`git add ${filePath} && git commit -m "${commitMessage}" && git push`, (err, stdout, stderr) => {
if (err) {
console.error(`exec error: ${err}`);
return;
}
console.log(`stdout: ${stdout}`);
console.error(`stderr: ${stderr}`);
});
}
// Assuming the screenshot is saved in the current directory
gitAddFile('example.png', 'Add screenshot');
Oplossing 2: publiceer naar Confluence Wiki
async function updateConfluencePage(confluenceUrl, pageId, title, content, auth, version) {
const body = {
type: 'page',
title: title,
body: {
storage: {
value: content,
representation: 'storage'
}
},
version: {
number: version + 1
}
};
const response = await axios.put(`${confluenceUrl}/rest/api/content/${pageId}`, body, {
headers: {
'Content-Type': 'application/json',
'Authorization': `Basic ${Buffer.from(auth).toString('base64')}`
}
});
return response.data;
}
// New content to include an image
const content = `<p>This is an updated page with an image:</p>
<img src="/wiki/download/attachments/${pageId}/example.png" alt="Example Screenshot" />`;
updateConfluencePage(confluenceUrl, pageId, "Updated Page Title", content, auth, currentVersion)
.then(data => console.log(data))
.catch(error => console.error(error));
Conclusie:
Het opzetten van een testautomatiseringssysteem met documentatiefuncties vergt in het begin veel werk en teaminspanning. De voordelen die u later krijgt, maken het echter de moeite waard. Door taken die steeds opnieuw worden uitgevoerd te automatiseren, ervoor te zorgen dat de resultaten van hoge kwaliteit zijn en gedetailleerde documentatie bij te houden, kunnen bedrijven efficiënter werken en hoge normen handhaven. Dit helpt hen om te voldoen aan de regelgeving, de productkwaliteit op peil te houden en concurrerend te blijven op de markt. Deze geplande aanpak voegt echte waarde toe aan een bedrijf door ervoor te zorgen dat technische maatregelen helpen om bedrijfsdoelstellingen te bereiken, en door een cultuur te bevorderen waarin efficiëntie en voortdurende verbetering belangrijk zijn. De sjabloon kan ook worden gekopieerd voor toepassingen in SAP, Salesforce, Exact Software en Cash (Visma). Als je hierbij ondersteuning wilt, neem dan contact met me op via linkedin voor een offerte.