E2exe: How we solved Windows desktop automation for enterprise scale

There’s a good reason why testing Windows desktop apps was one of the most requested features from customers: no one in the world has the infrastructure to parallelize thousands of runs per month.

Web testing infrastructure is relatively easy: a headless browser starts inside a Linux container in a couple seconds, costs a fraction of a cent to run, and gets thrown away when the test ends. There’s no equivalent for testing a Windows desktop app.

When testing Windows apps:

  • Every test needs a full VM because Windows containers don’t include a graphical desktop to run the app.
  • The machines are slow to start. A cold Windows VM takes 2 to 3 minutes to boot. A browser container takes seconds.
  • Someone has to be logged in. Windows UI Automation (UIA), the accessibility interface that test tools use to find buttons and fields, only works inside an active, logged-in desktop session. A machine that's merely switched on isn't enough.
  • Machines remember things. Installed files, registry keys, user profiles, saved logins and stray processes all survive between runs.
  • Every app brings its own world. Installers, admin prompts, licensed dependencies, first-run dialogs, sign-ins, etc.
  • There's no built-in visibility. A browser hands you traces, logs and screenshots. A remote Windows machine hands you nothing unless you build it.
  • The tooling assumes Linux. Kubernetes, CI runners and most test infrastructure were designed around Linux containers.