I have automated end-to-end OS testing. It's basically a small bash script which spins up a number of VMs in various network configurations (since my OS is only useful in a cluster, as it provides Ceph and a cloud API to KVM). One of the fully automated tests is even an upgrade test where the previous release is installed and then the currently built version is constructed into a patch, installed, and verified that all the VMs it started pre-upgrade are still running, then builds some more VMs (these are nested VMs since the test systems themselves are VMs). It's pretty simple, it starts by installing the ISO and driving the systems over their console.
(Speaking as someone who's trying to imagine OSs with automated end-to-end tests: https://github.com/akkartik/mu)