Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Running tests as usual against docker containers or dockerize tests?

I'm new to Docker and was reading up on Docker. It's a great way to test systems in a self contained and reproducible standardized configuration (when done correctly).

However, in all the things I've read, there doesn't seem to be too much emphasis on how the testing should occur with docker containers. The docker is used to "contain" the infrastructure and application (code) for easy testing (as well as deployment). But sometimes test codebases are be large and not so simple too. And one can have a test codebase for API tests, another for UI, etc.

What is or should be (as determined at some point) the standard practice for testing docker containers/deployments of your applications/infrastructure? Should:

  • the test code be deployed the old conventional way, as file repository you pull from somewhere and just then run on Jenkins server/slave or one's localhost for dev/QA testing/debugging, with the tests targeting apps in docker container?
  • dockerize the whole test code base as a self contained container and then using that container to launch/execute tests against the other containers that have the app code/system infrastructure?
  • combine the tests as part of the individual docker containers themselves to be run when/as needed. But I would think this works best only for unit tests that really pair with the container that holds the matching app code. Integration, UI, system level tests are different in association to app modules within the system.

The only reason I can think of that make dockerizing tests perhaps useful is that it's a single container with all the tests you need and the matching test infrastructure (all the test platform/language dependencies) so that one can deploy and run tests anywhere together with the matching app code containers. Saves one from having to set up test infrastructure when/as needed. But no seems to have blogged about such a thing for dockerized tests.

like image 273
David Avatar asked Jul 03 '15 00:07

David


People also ask

Is Docker container provides testing environment to test the build features?

Dockers allow you to test in containers and isolate your tests for both development and deployment. Testing becomes predictable, which assures you that when something works on your system, it will also work for your end users.

What is an advantage of running end to end tests with Docker?

At a high level, Docker makes it faster and easier to spin up services using a variety of configurations. This translates into a number of advantages when running your tests in Docker: You can keep server configuration in code. Any developer or CI environment will run the exact same setup.

Is Docker good for testing?

Top advantages of Docker for testers Teams can repeatedly spin up a Docker container from an image and produce the same, unmodified application on every startup. This means Docker containers are reproducible, reusable and, therefore, well suited for destructive testing.


1 Answers

I prefer your option (3) i.e. to include test code in the production deployable artifact (the docker image)

Will quote Alister Scott from GTAC 2015 which I attended:

Don’t be afraid to add testability specific features to your app that don’t serve a functional purpose. I recently had to get new tyres on my car and realized that a lot of tyres have testability features called tread indicators. These don’t serve a functional purpose

For integration and e2e tests, i.e. tests that require more than 1 docker image to be used, I prefer CI tool that, through docker-compose, and a separate git repo for these tests, orchestrates the creation of all containers that are needed for the larger test. Again the docker images used should be the exact same as for production except what varies is the configuration (e.g. environment variables) that make the tests point to test data and/or staging services.

like image 112
Leo Gallucci Avatar answered Sep 30 '22 04:09

Leo Gallucci