Dependency Management for Automated Tests

For folk working in highly automated environments, meaning a mature CI/CD pipeline and automated testing through all levels of the pyramid, I’m interested in how folk are managing their dependencies across the team.

I work in an environment where testers write and maintain automated tests using appropriate tools for their project.

Many tools are shared e.g. Gradle, but many are discreet and specific to the task at hand e.g. Cypress.

If it is your responsibility to standardise tooling, I’m interested to hear how you approach this.

Do you simply have a wiki page to set out approved tool versions? Do you have base projects that can, for example, be unpacked from .jar files? Or are you using base Docker images; maybe using differently named or tagged images for specific needs? E.g. an image with node and Puppeteer, an image with Gradle, Junit, Java…

You can use any type of versioning, but I prefer https://semver.org.

Technical part:

  1. I use git tag within a git repository
  2. I usually apply versions to a final artifact I deliver. So, if it is a Docker image, then I use Docker tag. For JAR files, update the version in maven/gradle build file. And so on.
  3. I publish release logs on a wiki. So, this simplifies the understanding of what is changed, especially, if I deliver an artifact and someone else uses it.

And, finally, if you use versioning, you should use the only versioned versions of the test or dependencies during test runs.

P.S. This is a short answer. If any details are needed, I’ll be happy to share them.