Skip to main content

Terraform and Terragrunt fixtures for pytest

Project description

pytest-terra-fixt

With the use of this plugin, users can run Terragrunt and Terraform commands within Pytest fixtures. Under the hood, the fixtures within this plugin use the awesome tftest Python package.

Fixtures

terra:

  • Scope: Function
  • Input: (passed within `pytest.mark.parametrize("terra", [{}]))
    • command: Terraform or Terragrunt command to run (e.g. init, plan, apply)
    • binary: Path to binary (must end with terraform or `terragrunt)
    • tfdir: Absolute or relative path to basedir
    • basedir: Base directory for tfdir (defaults to cwd)
    • env: Environment variables to pass to the command
    • skip_teardown: Skips running fixture's teardown logic
    • get_cache: If True, gets command output from terra_cache fixture
    • extra_args: Dictionary of extra arguments to pass to the command
  • Setup: Updates cache with selected kwargs provided
  • Yield: If get_cache is True, yields output for the input command from the terra_cache fixture. If get_cache is False, yields output from the execution of the command
  • Teardown: Runs terraform destroy -auto-approve on the input tfdir directory

terra_factory:

  • Scope: Session
  • Input: (passed within `pytest.mark.parametrize("terra", [{}]))
    • command: Terraform or Terragrunt command to run (e.g. init, plan, apply)
    • binary: Path to binary (must end with terraform or `terragrunt)
    • tfdir: Absolute or relative path to basedir
    • basedir: Base directory for tfdir (defaults to cwd)
    • env: Environment variables to pass to the command
    • skip_teardown: Skips running fixture's teardown logic
    • get_cache: If True, gets command output from terra_cache fixture
    • extra_args: Dictionary of extra arguments to pass to the command
  • Setup: Updates cache with selected kwargs provided
  • Yield: If get_cache is True, yields output for the input command from the terra_cache fixture. If get_cache is False, yields output from the execution of the command
  • Teardown: Runs terraform destroy -auto-approve on every factory instance's input tfdir directory

terra_cache:

  • Scope: Session
  • Setup: Runs terraform init on the specified directory
  • Yield: Factory fixture that returns a tftest.TerraformTest or tftest.TerragruntTest object that can run subsequent methods with
  • Teardown: Clears cache dictionary

CLI Arguments

--skip-teardown: Skips running terraform destroy -auto-approve on teardown and preserves the Terraform backend tfstate for future testing. This flag is useful for checking out the Terraform resources within the cloud provider console or for running experimental tests without having to wait for the resources to spin up after every Pytest invocation.

NOTE: To continually preserve the Terraform tfstate, the --skip-teardown flag needs to be always present, or else the `terra` or `terra_factory` fixtures' teardown may destroy the Terraform resources and remove the tfstate file.

Examples

Returns tftest object

terra

import pytest

@pytest.mark.parametrize("terra", [
   {
      "binary": "terraform",
      "tfdir": "bar",
      "env": {
         "TF_LOG": "DEBUG"
      },
      "skip_teardown": False,
   }
], indirect=['terra'])
def test_terra_param(terra):
   terra.apply(auto_approve=True)
   output = terra.output()
   assert output["doo"] == "foo"

Run commands within fixture:

terra

import pytest

@pytest.mark.parametrize("terra", [
   {
      "binary": "terraform",
      "command": "apply",
      "tfdir": "bar",
      "env": {
         "TF_LOG": "DEBUG"
      },
      "skip_teardown": False,
      "get_cache": False,
      "extra_args": {"state_out": "/foo"},
   }
], indirect=['terra'])
def test_terra_param(terra):
   assert terra == "zoo"

terra_factory

def test_terra_param(terra):
   plan = terra_factory(binary="terraform", command="plan", tfdir="bar", skip_teardown=True)
   assert plan["doo"] == "zoo"

Installation

Install via Pip:

pip install pytest-terra-fixt

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pytest-terra-fixt-0.5.1.tar.gz (4.5 kB view details)

Uploaded Source

Built Distribution

pytest_terra_fixt-0.5.1-py3-none-any.whl (4.9 kB view details)

Uploaded Python 3

File details

Details for the file pytest-terra-fixt-0.5.1.tar.gz.

File metadata

  • Download URL: pytest-terra-fixt-0.5.1.tar.gz
  • Upload date:
  • Size: 4.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for pytest-terra-fixt-0.5.1.tar.gz
Algorithm Hash digest
SHA256 4ef310b93e4b36c2ac6d5ce90d49b7c2334d4d3fe5670a97ed865c760c589f0b
MD5 584831ef659efacb90726325ab1cb343
BLAKE2b-256 8fbeceb021f48f11f127d9b94288db90cf3f96e7caa77998d56398d02c372d79

See more details on using hashes here.

File details

Details for the file pytest_terra_fixt-0.5.1-py3-none-any.whl.

File metadata

File hashes

Hashes for pytest_terra_fixt-0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ba6396884887db47edcfcf93a1c719549962dd3163baa57ea36f0c5e4b7c9191
MD5 19aac6561dca388ad4fc524f9ba18218
BLAKE2b-256 2bfb684158b357bde5f31c4d969ea538d40707a6cfd304fb72fde7549afab1c5

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page