
Andrew Hanna

Andrew Hanna

Om Apex-tests parallel te draaien zonder flaky failures laat je elke test zijn eigen data aanmaken, schrijf je nooit naar records die buiten de test bestaan en genereer je unieke waarden voor velden zoals gebruikersnamen. Onderzoek een resterende flaky test door die klasse apart opnieuw te draaien: slaagt hij alleen en faalt hij parallel, dan heb je een isolatieprobleem, geen bug. Parallel testen org-breed uitzetten verbergt het symptoom en vertraagt elke run.
Standaard draait Salesforce asynchrone testklassen gelijktijdig, waardoor twee tests op hetzelfde moment om dezelfde resource kunnen strijden. De fouten vallen in drie oorzaken uiteen:
UNABLE_TO_LOCK_ROW teruggeeft, en die limiet is niet aan te passen,
zoals
Xappex uitlegt. Parent-records worden stilletjes gelockt bij updates van master-detail-children,
bij herberekening van roll-up summaries en tijdens sharingverwerking.
[email protected] invoegen
falen met DUPLICATE_USERNAME, een patroon dat
Salesforce Central beschrijft.
@isTest(SeeAllData=true) leest en schrijft echte records die andere
tests tegelijk kunnen raken.
Geen van deze problemen verschijnt als een klasse alleen draait, en daarom lijkt de suite willekeurig te falen.
UNABLE_TO_LOCK_ROW,
DUPLICATE_USERNAME en andere duplicate-value-fouten op testdata wijzen
op gelijktijdigheid.
--synchronous draait de testmethodes van één Apex-klasse synchroon,
volgens de
documentatie van plugin-apex.
@TestSetup of een data factory en schrap SeeAllData=true.
Tests die hun eigen data bouwen, strijden niet om org-records.
@isTest(isParallel=true) toe om klassen te markeren die parallel kunnen
draaien zonder de standaardlimieten voor gelijktijdigheid, zoals
FishOfPrey beschrijft. Voeg het
alleen toe aan klassen die herhaaldelijk slagen in parallelle runs.
Alleen als noodoplossing. De instelling staat onder Setup, Apex Test Execution, Options, en draait asynchrone tests één voor één. Dat haalt de gelijktijdigheidsflakes weg, maar in orgs met veel testklassen duurt een volledige run veel langer. Sommige tools leunen op dezelfde schakelaar: de documentatie van Gearset meldt dat de test monitors de Tooling API gebruiken en tests dus parallel draaien, tenzij je de instelling aanzet.
Zie het vinkje als een schuldmarkering. Zet het aan om een release vrij te spelen, repareer daarna de boosdoeners en zet het weer uit.
sf apex run test --test-level RunLocalTests geeft je dezelfde
parallelle run die je productiedeploys zien.
--result-format junit --output-dir toe zodat je pipeline fouten per
klasse over tijd volgt, en --code-coverage om de dekking zichtbaar te
houden.
Blind opnieuw proberen is verleidelijk, maar maakt van echte defecten groene builds. Dezelfde discipline geldt als je van tooling wisselt, zoals beschreven in overstappen op een andere Salesforce DevOps-tool zonder je pipeline te breken en onze gids over migreren van Gearset naar Serpent zonder downtime.
Point-and-click-releases lopen tegen dezelfde fouten aan, omdat de tests bij een deploy nog steeds draaien. Onze click-deploy-checklist beschrijft wat je eerst controleert, en meer how-to's vind je in SF Guides.
Tekunda is het Salesforce-consultancy- en productbedrijf dat Serpent bouwt, een Salesforce DevOps-platform met versiebeheer via GitHub en geautomatiseerde deploymentpipelines. Houden flaky tests je releases op, vergelijk dan de abonnementen op onze prijspagina.
Draait Salesforce Apex-tests standaard parallel?
Ja, asynchrone testruns voeren klassen gelijktijdig uit, tenzij Disable Parallel Apex Testing in Setup aanstaat.
Wat veroorzaakt UNABLE_TO_LOCK_ROW in Apex-tests?
Twee transacties willen hetzelfde record, vaak een parent die gelockt is door een master-detail-update, roll-up summary of sharingherberekening. De wachtende transactie faalt na 10 seconden.
Moet ik flaky Apex-tests automatisch opnieuw draaien?
Eén keer, synchroon, en alleen bij gelijktijdigheidsfouten. Log elke flake en repareer de klasse in plaats van op herhalingen te vertrouwen.
Is isParallel=true genoeg om flaky tests op te lossen?
Nee. Het markeert een klasse alleen als geschikt voor parallelle uitvoering. De test moet nog steeds zijn eigen data maken en unieke waarden gebruiken.
Vrijblijvend.