When I think in an environment to running tests, I recall in my company, we're always having problems related with running some tests. We test an application developed in Windows and the test must be run in a Windows platform also.
We have around 7 machines exclusively used to running tests, we called them Minions.j
They have different versions of Intel Core2Duo processors and 4GB RAM memory. Running Windows 7 and Windows 10
Also, we have a Windows Server Machine with Core2Duo processor and 10GB RAM memory.
The first thing we tried was the simplest one, execute one test per physical machine. The faced troubles are, as you can imagine, concurrency, and running multiple test in parallel.
The application wasn't designed to have multiple instances of it running at the same time, so we tried to do a workaround copying some XML's and changing the configuration of the application.
Yep, I know, we've modified the application, so the test are not legal at all.
The path for this try was very short. The machines have a low-end and obsolete chip, so running multiple VMs on them became in a nightmare.
Containers, oh containers!
Yes, containers are the future, and many many people is using it. Thinking on them is not crazy at all.
Starting with Windows Server
We created the Dockerfile and run the first test within the container succesfully after some modifications and configurations, but without modifying the application itself.
Yeah, our automation life will be easier
Trying over Windows 10
Thinking in pretty ideas is good, but we found our biggest problem. We couldn't launch Docker engine in Windows 10 because of the Minions chip.
After a large research, we saw that the chips doesn't have the SLAT capability, so the hypervisor can't be started at all and Docker will never run without this feature.
As my company is a big one and has the Microsoft Gold Partner status I asked Microsoft why the same processor can run Docker on Windows Server but not in Windows 10.
The response was clear, Container feature needs a bare-metal hypervisor under Windows OS layer and they found performance problems in high end GPUs so, they decided to delete this kind of hypervisor in their non enterprise OS.
The virtualization is not the same in Server and non-Server versions
Money is always the solution... We've bought new machines in order to run Docker.
Intel Core i3 should be enough.
We are investigating how to launch multiple tests over the same container images in a large amount of hosts running Docker through JenkinsCI.
In other words, launch ephemeral Containers running the tests in a short-lived container within predefined Docker cluster.
Recurring problem here is the lack of information around the Docker for Windows environment. Kubernetes, for example doesn't have an implementation for Windows containers.
I've defined a solution for solving this problem and I'll describe it in the next post.