Package and Distribute Your Test Suite
Automated test suites must be packaged for installation and distributed just like your other build artifacts. They are not some special things that live in a code repository (repo) separate from the rest of your code.
My team was writing tests and keeping them all in a git repo. The repo would be cloned and then PyTest would run these tests. All users of tests - from developers to Continuous Integration (CI) and everyone else in between - would run steps akin to:
git clone git@github.com:username/testrepo.git cd testrepo git checkout main pip install -r requirements.txt py.test tests/
This worked for a while but was not a good fit as time progressed for these reasons:
All users had to muck around with git
There was no way to release the test suite at release time
Only the current state of tests could be used with no good option to rollback to a previous state
My team set out to create a process more like:
Release automated test suite as an installable artifact from CI
All users do a
pip install --upgrade testsuite
and execute scriptrun_test_suite
When this new process was implemented it gave us many benefits:
Tests are released as installable Python packages multiple times a day
Each project - production code or tests - is treated the same and goes through the same CI pipeline; no special snowflakes
The test suite itself is run through CI more easily and accepted or rejected
Teams can leverage CI to create custom test suites
During product release tests get released as well
It's easy to pick and choose the state of test suite to use based on release versioning
Users can install and uninstall test suites just like any other software; less cognitive load
Based on my experience I highly recommend your teams to write automated test suites to be packaged, released, distributed, and installed like any other software component.
P.S. I'm planning to write a more technical post (over on Code Ghar) on how we release and use our automated test suite. I'll link to it here when it's written.