Pytest plugin for managing environment variables with interpolation and .env file support.
Project description
🔧 pytest-envx
pytest-envx is a powerful and user-friendly plugin for pytest, allowing you to easily manage environment variables from configuration files like pyproject.toml and pytest.ini.
🚀 Features
- ✔️ Environment variable interpolation via templates
- ✔️ Load variables from
.envfiles - ✔️ Compatible with both
pyproject.tomlandpytest.ini - ✔️ Easy to configure and use
- ✔️ Flexible support for overriding and loading order
⚡️ Installation
pip install pytest-envx
📦 Quick Start
Create a configuration file — either pyproject.toml ⚙️ or pytest.ini ⚙️
By default, pytest prioritizes pytest.ini ⚙️
✅ Example 1: Simple Variable
| pyproject.toml ⚙️ | pytest.ini ⚙️ |
|---|---|
[tool.pytest.ini_options]
env = [
"HELLO='WORLD'"
]
|
[pytest]
env =
HELLO="WORLD"
|
test_example.py 🐍:
import os
def test_env_var():
assert os.getenv("HELLO") == "WORLD"
✅ Example 2: Load from .env 🔐 files with override
| .env-template 🔐 | .env 🔐 |
|---|---|
NAME=ALICE
LASTNAME=BAILER
|
NAME=BOB
|
| pyproject.toml ⚙️ | pytest.ini ⚙️ |
|---|---|
[tool.pytest.ini_options]
envx_metadata = { paths_to_load = [".env-template", ".env"], override_load = true }
env = [
"GREETING='Hello'"
]
|
[pytest]
envx_metadata = {"paths_to_load": [".env-template", ".env"], "override_load": True}
env =
GREETING="Hello"
|
test_env_load.py 🐍:
import os
def test_env_loading():
assert os.getenv("NAME") == "BOB"
assert os.getenv("LASTNAME") == "BAILER"
assert os.getenv("GREETING") == "Hello"
✅ Example 3: Load from .env 🔐 files without override
| .env.default 🔐 | .env.dev 🔐 |
|---|---|
MODE=default
|
MODE=development
LEVEL=DEV
|
| pyproject.toml ⚙️ | pytest.ini ⚙️ |
|---|---|
[tool.pytest.ini_options]
envx_metadata = { paths_to_load = [".env.default", ".env.dev"], override_load = false }
|
[pytest]
envx_metadata = {"paths_to_load": [".env.default", ".env.dev"], "override_load": False}
|
test_priority.py 🐍:
import os
def test_env_priority():
assert os.getenv("MODE") == "default"
assert os.getenv("LEVEL") == "DEV"
✅ Example 4: Variable Interpolation
| .env 🔐 |
|---|
USER=john
PASS=secret
HOST=db.local
PORT=5432
|
| pyproject.toml ⚙️ | pytest.ini ⚙️ |
|---|---|
[tool.pytest.ini_options]
envx_metadata = { paths_to_interpolate = [".env"] }
env = [
"DB_URL_WITH_INTERPOLATION='postgresql://{%USER%}:{%PASS%}@{%HOST%}:{%PORT%}/app'",
"WITHOUT_INTERPOLATION={'value': '{%USER%}', 'interpolate': False}",
"NOT_FOUND='{%NOT_FOUND%}'"
]
|
[pytest]
envx_metadata = {"paths_to_interpolate": [".env"]}
env =
DB_URL_WITH_INTERPOLATION="postgresql://{%USER%}:{%PASS%}@{%HOST%}:{%PORT%}/app"
WITHOUT_INTERPOLATION={"value": "{%USER%}", "interpolate": False}
NOT_FOUND = "{%NOT_FOUND%}"
|
test_interpolation.py 🐍:
import os
def test_interpolated_value():
assert os.getenv("DB_URL_WITH_INTERPOLATION") == "postgresql://john:secret@db.local:5432/app"
assert os.getenv("WITHOUT_INTERPOLATION") == "{%USER%}"
assert os.getenv("NOT_FOUND") == "{%NOT_FOUND%}"
assert os.getenv("USER") != "john"
assert os.getenv("PASS") != "secret"
assert os.getenv("HOST") != "db.local"
assert os.getenv("PORT") != "5432"
⚙️ envx_metadata
| Parameter | Type | Description |
|---|---|---|
paths_to_load |
list | Paths to .env files to load environment variables from (loaded in order) |
override_load |
(bool, default=True) | Whether to override existing environment variables during load |
paths_to_interpolate |
list | Paths to files for value interpolation |
override_interpolate |
(bool, default=True) | Whether to override variables during interpolation |
📄 License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pytest_envx-2.0.0.tar.gz.
File metadata
- Download URL: pytest_envx-2.0.0.tar.gz
- Upload date:
- Size: 13.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bbccf3c1a2c375ff6810613a0f24767eabf93334e0577c578f06194638fec842
|
|
| MD5 |
13835c1926451178bd650072933cc908
|
|
| BLAKE2b-256 |
d3128d1a4bd4b12af896c709f2ce11436158a64616e4f96ec4cbc3495326a5a5
|
File details
Details for the file pytest_envx-2.0.0-py3-none-any.whl.
File metadata
- Download URL: pytest_envx-2.0.0-py3-none-any.whl
- Upload date:
- Size: 7.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9ae0fcc2a6c9870a5ab51fc56e628f0f9c5b22e9beae28f8ad957eee6da23a11
|
|
| MD5 |
a2cd276237b08814d59494e593181e0e
|
|
| BLAKE2b-256 |
d8c8fa2ad8d78f71aa3b7773302102f4997f5cbebc4c0c211894b937cadd7503
|