Automated end-to-end testing in South Africa: Every deploy, green‑lit.

We write the end-to-end tests your team never gets round to. They open a real browser and click through your real product, and they run in your CI, so a broken sign-up, checkout or dashboard gets caught before a customer sees it.

  • Fixed price in rand
  • Tests live in your repo
  • No lock-in
  • AI-assisted, engineer-reviewed
  • ✓ sign-up & email verification
  • ✓ login & 2FA
  • ✓ password reset
  • ✓ checkout & payments
  • ✓ promo codes
  • ✓ onboarding wizards
  • ✓ role permissions
  • ✓ search & filters
  • ✓ file uploads
  • ✓ invoices & PDFs
  • ✓ booking calendars
  • ✓ multi-step forms
  • ✓ subscription upgrades
  • ✓ admin dashboards
Sound familiar?

Manual QA testing doesn’t scale. Your team’s patience doesn’t either.

Slow

Release day = click-through day

Someone spends hours clicking through the app before every release. It is boring, easy to rush, and it holds up deploys.

Risky

The bug is always in the flow nobody re-checked

A small change in one place breaks sign-up or checkout somewhere else, and customers find it before you do.

Stuck

"We should really write tests" is a backlog item

Your devs are shipping features. Nobody has the time or the specialist knowledge to set up a proper E2E suite.

What you get

A test suite your team can run, read and trust.

You don’t get a PDF or a dashboard subscription. You get real code in your repo that runs every time someone opens a pull request.

Runs on every pull request

Broken code can’t merge until the tests pass. The check runs across browsers and a phone-sized screen.

✓ All checks have passed 4 successful
✓e2e / chromium38s
✓e2e / firefox44s
✓e2e / webkit (Safari)41s
✓e2e / mobile · Pixel 736s
Merge pull request

Lives in your repo

Plain TypeScript. No platform, no licence fees.

  • ▸ tests/
  • auth.spec.ts
  • checkout.spec.ts
  • roles.spec.ts
  • ▸ fixtures/
  • playwright.config.ts
  • .github/workflows/e2e.yml
  • E2E_README.md

Stable by design

Before handover, the whole suite runs 20 times in a row. It must pass all 20.

20/20 consecutive green runs

Failures you can debug in seconds

Every failure comes with a video, a screenshot and a step-by-step trace, so your devs see exactly what broke and where.

checkout.spec.ts › applies promo codefailed
  1. ✓page.goto('/cart')
  2. ✓fill(getByLabel('Promo code'), 'SAVE50')
  3. ✓click(getByRole('button', { name: 'Apply' }))
  4. ✘expect(getByTestId('total')).toHaveText('R450.00')
▶ video.webm▣ screenshot.png⌁ trace.zip

Alerts where you work

Failures on your main branch are posted to Slack or Teams, with a link to the report.

GL
e2e-bot 09:41
main failed: 1 of 42 tests
checkout › applies promo code
View report →

Handed over, not handed off

A clear README, a recorded walkthrough and a live session, so your devs can add tests themselves.

# Running the E2E suite
$ npm run e2e
$ npm run e2e:ui # watch mode
## Adding a new test
1. Copy tests/_template.spec.ts…
Try it yourself

Try to sneak a bug past the tests.

This is a pretend online shop. Pick a change a developer might make and watch what happens. Harmless changes go straight through. Changes that would hurt your customers get stopped before anyone sees them.

Bugs stopped0
Safe releases0
Changes tried0

Pick a change a developer might make

Some are harmless and some would hurt your customers. Can you tell which will get through?

your-shop.co.za/checkout
Your basket ✓ Verified customer

2 × Pro seat · R250 each

SubtotalR500.00
Promo code SAVE50 −R50.00
VAT 15%R67.50
TotalR517.50
Pay R517.50
Something went wrong The checkout page crashed. Customers would see this instead of paying.
Pick a change to run the automatic checks
  1. Full checkout works, start to finish
  2. Promo codes work in lowercase too
  3. A total can never go below R0
  4. 15% VAT is added
  5. Unverified accounts can’t pay
  6. Baskets with several items add up
  7. Made-up promo codes are turned away
  8. SAVE50 takes R50 off
  9. An empty basket costs R0
  10. Totals are rounded to the cent
  11. Nobody can pay for an empty basket

How it works

From first call to green checks in about a month.

What we need from you
  1. 01 Day 1

    Free discovery call

    30 minutes. We map your product and pick the flows where a bug would hurt most.

  2. 02 ≤ 48 hrs

    Fixed quote & NDA

    A written scope listing every flow, the price in rand and a delivery date. The NDA is signed before we see any code.

  3. 03 Weeks 1–2

    Onboarding

    You give us repo access, a QA environment, locked test accounts and a short screen recording of each flow.

  4. 04 Weeks 2–7

    Build

    We write the tests in a branch of your repo, using AI to draft them and an engineer to review, run and stabilise every one. Every Friday you get a short demo of new tests passing.

  5. 05 Final 1–2 weeks

    Wire into CI

    The tests run on every pull request, and failures come with video, traces and screenshots.

  6. 06 Done ✓

    Handover

    A merged PR, a README and a live walkthrough, so your team can run, read and extend the suite.

The honest comparison

Cheaper than a hire. Faster than a backlog item.

Criteria Greenlight Hire in-house DIY with AI tools Keep testing manually
Cost to get a working suite From R18 500 once-off ≈ R40k–R70k / month salary + recruitment Your devs’ time, then more of it fixing what breaks Hours of staff time every release
Time to first tests in CI 2–3 weeks 2–3 months (hire + ramp-up) Days to generate, weeks to make reliable Never automated
Proven stable before you rely on it Yes, 20 green runs in a row Depends on the hire Rarely. Passing once isn’t the same as passing every time N/A
Runs on every pull request Yes Eventually If someone wires it up No
You own the code Yes, it lives in your repo Yes Yes N/A
Long-term commitment None. Optional monthly plan Permanent headcount None None

In-house figure is a rough 2026 range for a mid-level QA automation engineer in SA, before benefits.

Works with your stack

  • Playwright
  • TypeScript
  • Cypress (existing suites)
  • GitHub Actions
  • GitLab CI
  • Bitbucket Pipelines
  • Azure DevOps
  • Jenkins
  • Docker
  • axe-core
  • React · Vue · Angular
  • Next.js · Laravel · .NET · Django
Pricing

Fixed prices, in rand.

No hourly surprises. Pick a package, add a monthly plan if you want the suite kept green.

Smoke Suite

Your few make-or-break journeys, checked on every deploy.

R18 500 once-off
Scope
Up to 5 user flows
Timeline
3–4 weeks
Get a quote

Full Regression

Release-gate coverage for larger or regulated platforms.

from R89 000 once-off
Scope
30+ user flows
Timeline
12+ weeks
Get a quote
FAQ

Questions teams usually ask.

Something else? Just ask.

What is end-to-end testing?

End-to-end (E2E) testing checks a whole journey through your product the way a customer would do it: open the site, sign up, log in, pay, get the confirmation email. An automated E2E test does this in a real browser on every change, so if any step breaks, the change is blocked before it reaches your users.

We wrote a plain-English guide to end-to-end testing that explains how it differs from unit and manual testing.

Which tools do you use?

By default, Playwright with TypeScript. It is fast, free, and runs Chromium, Firefox and Safari (WebKit). If you already have a Cypress or Playwright suite, we can extend and stabilise it instead of starting over.

Do you use AI? Couldn’t we just have AI write our tests?

Yes, we use AI to draft tests faster, which is part of why we can get tests into your CI in weeks. But every test is read, run and stabilised by an engineer before it reaches your repo.

AI is good at writing a test that passes once. It isn’t good at deciding which flows matter most, setting up clean test data through your API, keeping tests independent of each other, or proving they pass 20 times in a row. That judgement is what you’re paying us for, and it’s the difference between a suite your team trusts and one they learn to ignore.

Can you test the AI features in our product?

Yes. Chatbots, AI search and generated content give slightly different answers every time, so we don’t check for exact wording. Instead we test the journey around them: the feature loads, responds within a sensible time, handles errors and empty answers, and returns something in the right shape. Ask about it on the call.

Who owns the tests?

You do. Everything is committed to your own repository. There are no licences, no platform fees and no lock-in. If we never speak again, the suite keeps running.

What happens when our UI changes?

Tests find elements by accessible roles and data-testid attributes, not by fragile CSS paths, so colour, layout and copy tweaks don’t break them.

When a flow changes for real, the README shows your devs how to update the test. Or a Keep Green plan means we handle it.

Will the tests be flaky?

We design against flakiness from the start: no fixed waits, test data set up through your API, and each test isolated from the others. Before handover, the whole suite runs 20 times in a row in CI and has to pass every time. Every package also includes a fix warranty.

Do you need access to production?

No, never. We work only against a QA or staging environment, using dedicated test accounts. See exactly what we need.

How do you handle confidentiality and POPIA?

We sign an NDA before we see your code. We only ask for the access we need, we never use real customer data, credentials are kept in your CI secrets and a password manager, and all our access is removed at handover. Your code is never pasted into public AI chatbots. We only use AI tools on business terms that don’t train on your code, and if you’d rather we use none at all on your project, just say so.

Can you test native mobile apps?

Mobile web and responsive layouts are included from Core Coverage upwards. Native iOS and Android apps (with Maestro or Appium) are quoted separately. Ask on the call.

How does payment work?

50% deposit to book your start date and 50% on handover, by EFT. Monthly plans are billed in advance and you can cancel with 30 days’ notice. International clients can pay in USD, EUR or GBP.

Next step

Find out what your first suite would look like.

A free 30-minute call. We pick your riskiest flows together and you get a fixed quote within 48 hours. No obligation.