Writing Tests

Throw, Log, and Test!

Steamship plugins execute remotely, automatically, and potentially at high-scale. This makes it critical that you:

  • Throw detailed exceptions eagerly
  • Log liberally
  • Write unit tests

Every plugin template comes with a detailed logging and testing setup.

Logging

We recommend that you log liberally within your plugin code. Use Python’s default logging library.

import logging
logging.info("Hi there!")

Throwing Errors

When something goes wrong in a plugin, the correct response is to throw a SteamshipError. This will result in an error message returned to the end-user.

from steamship import SteamshipError
raise SteamshipError(
   message="Some error message",
   error=optional_wrapped_error
)

Manual Testing

Your plugin template comes with a test/ folder that stores pytest tests. You can run them with:

pytest

Many templates additionally contain a test_data/ folder with data that is read in as part of testing.

On your local machine, any tests will run using the run using the STEAMSHIP_API_KEY environment variable, if available, or using the key specified in your user-global Steamship settings (~/.steamship.json).

Automated testing

Your plugin template comes configured to auto-test upon pull-requests to the main and staging branches. Testing will also be performed as part of the automated deployment.

  • Failing tests are will block any automated deployments
  • We recommend configuring your repository to block pull-request merges unless a passing test has been registered

Automated testing setup

Testing requires that you set a GitHub secret named steamship_key_test. This secret will be used to set the STEAMSHIP_API_KEY environment variable during test running.

Modifying or removing automated testing

Automated tests are run from the GitHub workflow located in your plugin project at .github/workflows/test.yml