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.2.tar.gz (4.5 kB view details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for pytest-terra-fixt-0.5.2.tar.gz
Algorithm Hash digest
SHA256 7b3e5b1922f42072d39d814fdd54c5dd5bb0f832d6f9272497143e77d566a73e
MD5 99aee024a1a80233d0a93eaec9bfc82c
BLAKE2b-256 89f81e809f07bf0b7ccb4dacb2b02cbe9af11b0cb10d6b34a35b70627b2b3b06

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pytest_terra_fixt-0.5.2-py3-none-any.whl
Algorithm Hash digest
SHA256 864b06c7018ee439f2387e0c91faad93d9b804287bee83b8a5a25450955f81de
MD5 ef9d103a72ab840e18721778147077f1
BLAKE2b-256 d0c4a18810ee28fbb82e203bf7f0b681bae2252fc31e7100a07cee2697afa2d2

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