Let me tell you a story. When AtomicJar started, our CEO Sergei got himself a shiny new Apple M1-based laptop. He was eager to start developing the prototype, and of course, as a conscious developer, his first lines of code were followed by an even bigger amount of Testcontainers-based tests… but that didn’t work! Apparently, the world, or at least one of its subsets in the form of the Docker ecosystem, wasn’t ready for ARM. And there are many stories of developers using their own products, but nothing can beat a developer who cannot run their tests! Therefore, ever since then, our focus at AtomicJar has been to make it easy to run Testcontainers-based tests anywhere. For ourselves, and, well, a few hundred thousand other developers out there.
This is why we’re excited to announce Testcontainers Cloud! Testcontainers Cloud is the developer-first SaaS platform for modern integration testing with real databases, message brokers, cloud services, or any other component of application infrastructure. Built for the existing Testcontainers family of libraries, Testcontainers Cloud brings the same unit testing-like experience even to the most constrained development and CI environments. We’re expanding on what development environments are able to use Testcontainers and how teams can use integration tests with the real technologies their applications will use in production.
Let us share more details about Testcontainers Cloud and some feedback we got from the early users.
Welcome Testcontainers Cloud
One of the more common approaches to integration testing is running your applications against real instances of databases and other service dependencies locally on developer machines or CI workers. Testcontainers libraries are a popular choice to manage Docker containers with those dependencies and seamlessly integrate them into the tests’ lifecycle. Testcontainers Cloud runs everything that is supported by the Testcontainers library: Cassandra, Cockroach, Couchbase, DB2, MariaDB, MongoDB, MySQL, Neo4j, Oracle Database, PostgreSQL and many other databases using JDBC and R2DBC, as well as modules for popular technologies like Elasticsearch, Kafka, Nginx, RabbitMQ, Solr, Toxiproxy, and Hashicorp Vault.
While the experience of using integration tests with Testcontainers became almost indistinguishable from unit tests, it imposes various environment restrictions and heavily taxes developer machines.
Testcontainer Cloud eliminates all those limitations. It runs containers remotely and doesn’t burden the local machine with heavy memory and CPU load. Instead, Testcontainers Cloud provides plenty of on-demand compute power for every container it runs which makes tests snappier to start, faster to execute, and developer workstations more responsive.
Testcontainers Cloud is Fast
A typical microservice depends on a few external services, and spinning them up on a single developer workstation or a CI worker machine requires a lot of CPU and RAM.
On an average developer machine, your Docker installation has access to 2 cores and 7-8GB of memory, which you have to split between all services. Similarly if you want your laptop not to stall while running a test, you need to severely limit the resources you allocate to the containers. It makes tests slow and the whole experience sluggish.
Testcontainers Cloud uses powerful machines with plenty of resources so your containers start fast and run fast, all while your machine has free resources to run the apps you actually need.
Here’s what developers are saying about their Testcontainers Cloud experience:
Testcontainers Cloud shields you from not having a powerful machine, poor internet connection, or not enough space for Docker images and allows you to run fast and repeatable integration tests as a continuous part of your workflow.
And if you are wondering about the latency – don’t worry, Testcontainers Cloud is closer to you than you think 😉
Testcontainers Cloud is Accessible Everywhere
Testcontainers Cloud is designed to support your existing test suites no matter where you run your tests.
Even more – there are various environments where it’s awkward to run Docker workloads! There are continuous integration platforms and solutions that restrict the types of containers that they can run, or require hacky workarounds to allow containers to be run at all. Or you may not want to over-provision your Cloud IDE if you just need to change a couple of lines of code.
ARM based processors are more popular than ever, starting from M1 Macs, to most major cloud providers shifting more and more workloads to these cheaper and more energy efficient compute offerings. While it’s possible to run Docker on ARM you are often limited to what images are stable or even available for the ARM architecture.
Testcontainers Cloud decouples your execution environment from the Docker engine allowing you to effortlessly run your CI jobs no matter what is used to execute them: an ultrabook, Cloud IDEs, Docker-less Jenkins nodes, Tekton Kubernetes pods, cost efficient ARM build nodes, CI providers that are lacking Docker support and much more – the only limit is your imagination.
Here Serkan Özal, AWS Serverless Hero and the CTO at Thundra – an APM for CI/CD that integrates with Testcontainers, describes their own experience with it:
Testcontainers Cloud is Ready to Help
The Testcontainers Cloud client application is a standalone binary “one curl away” from being installed into your CI environments and a drag-&-drop installable application for Windows, Mac, and Linux. Enabling it for your Testcontainers workloads requires no code changes and it’s easy to share with your team too.
The Community
Testcontainers would not be the same without the large community of projects that support it and people who endorse it. Besides being excited about the future of integration testing ourselves, we wanted to make sure that the whole community shares our feeling about what Testcontainers Cloud brings to existing and future users of Testcontainers.
One example of the synergy between Testcontainers and the modern Java development is Quarkus.
Quarkus Dev Services enables using Testcontainers during development when the framework will create and manage containers for the dependencies your application uses. Testcontainers Cloud works with the Dev Services out of the box, lifting the heavy service dependencies to the cloud and making development with Quarkus impressively lightweight.
Here’s a first look video with John Clingan from Red Hat, where you can see how effortlessly Testcontainers Cloud supports Quarkus Dev Services use cases:
We truly believe that Testcontainers Cloud will help many Quarkus users and are looking forward to even deeper integration!
And of course we couldn’t live without feedback from James Ward, who often inspires the Java community to create better integration tests (with Testcontainers, of course!) and to enjoy tools which provide excellent developer experience.
Last but not least, we are actively working on getting Testcontainers Cloud integrated into projects in other languages. We believe that every developer in the world should be happy and have access to effortless integration testing, no matter what programming language they are using.
Accessing Testcontainers Cloud
Testcontainers Cloud is currently under development. We’re grateful to our earliest users who helped us to test and refine the initial versions of the product. We’re now open to more feedback and improving support for more diverse usage patterns. You can sign up to join the waitlist for the private beta here. And we can’t wait to let everyone start using Testcontainers Cloud once it is publicly available, as we are sure that you will enjoy using it as much as we do (literally!)