Skip to main content
PyPI version Python versions See Build Status on Travis CI

Test configuration plugin for pytest.

Based on nose-testconfig by Jesse Noller. Rewritten for pytest by Wojciech Olejarz and Bartłomiej Skrobek.


This pytest plugin was generated with Cookiecutter along with @hackebrot’s cookiecutter-pytest-plugin template.

Features

pytest-testconfig is a plugin to the pytest test framework used for passing test-specific (or test-run specific) configuration data to the tests being executed.

Currently configuration files in the following formats should be supported:

The plugin is meant to be flexible, ergo the support of exec’ing arbitrary python files as configuration files with no checks. The default format is assumed to be ConfigParser ini-style format.

If multiple files are provided, the objects are merged. Later settings will override earlier ones.

The plugin provides a method of overriding certain parameters from the command line (assuming that the main “config” object is a dict) and can easily have additional parsers added to it.

A configuration file may not be provided. In this case, the config object is an emtpy dict. Any command line “overriding” paramters will be added to the dict.

Requirements

requires pytest>=3.5.0

Installation

You can install “pytest-testconfig” via pip from PyPI:

$ python3 -m pip install pytest-testconfig

Usage

Tests can import the “config” singleton from testconfig:

from pytest_testconfig import config

By default, YAML files parse into a nested dictionary, and ConfigParser ini files are also collapsed into a nested dictionary for foo[bar][baz] style access. Tests can obviously access configuration data by referencing the relevant dictionary keys:

from pytest_testconfig import config
def test_foo():
    target_server_ip = config['servers']['webapp_ip']

Warning: Given this is just a dictionary singleton, tests can easily write into the configuration. This means that your tests can write into the config space and possibly alter it. This also means that threaded access into the configuration can be interesting.

When using pure python configuration - obviously the “sky is the the limit” - given that the configuration is loaded via an exec, you could potentially modify pytest, the plugin, etc. However, if you do not export a config{} dict as part of your python code, you obviously won’t be able to import the config object from testconfig.

When using YAML-style configuration, you get a lot of the power of pure python without the danger of unprotected exec() - you can obviously use the pyaml python-specific objects and all of the other YAML creamy goodness.

Defining a configuration file

Simple ConfigParser style:

[myapp_servers]
main_server = 10.1.1.1
secondary_server = 10.1.1.2

So your tests access the config options like this:

from pytest_testconfig import config
def test_foo():
    main_server = config['myapp_servers']['main_server']
YAML style configuration::
myapp:
servers:

main_server: 10.1.1.1 secondary_server: 10.1.1.2

And your tests can access it thus:

from pytest_testconfig import config
def test_foo():
    main_server = config['myapp']['servers']['main_server']

Python configuration file:

import socket

global config
config = {}
possible_main_servers = ['10.1.1.1', '10.1.1.2']

for srv in possible_main_servers:
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((srv, 80))
    except:
        continue
    s.close()
    config['main_server'] = srv
    break

And lo, the config is thus:

from pytest_testconfig import config
def test_foo():
    main_server = config['main_server']

If you need to put python code into your configuration, you either need to use the python-config file faculties, or you need to use the !!python tags within PyYAML/YAML - raw ini files no longer have any sort of eval magic.

Command line options

After it is installed, the plugin adds the following command line flags to pytest:

--tc-file=TESTCONFIG  Configuration file to parse and pass to tests
                      [PY_TEST_CONFIG_FILE]
                      If this is specified multiple times, all files
                      will be parsed. In all formats except python,
                      previous contents are preserved and the configs
                      are merged.

--tc-format=TESTCONFIGFORMAT  Test config file format, default is
                              configparser ini format
                              [PY_TEST_CONFIG_FILE_FORMAT]

--tc=OVERRIDES        Option:Value specific overrides.

--tc-exact            Optional: Do not explode periods in override keys to
                      individual keys within the config dict, instead treat
                      them as config[my.toplevel.key] ala sqlalchemy.url in
                      pylons.

Contributing

Contributions are very welcome. Tests can be run with tox, please ensure the coverage at least stays the same before you submit a pull request.

License

Distributed under the terms of the Apache Software License 2.0 license, “pytest-testconfig” is free and open source software

Issues

If you encounter any problems, please file an issue along with a detailed description.

Release files for pytest-testconfig 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pytest-testconfig 0.2.0
File Size Uploaded
pytest-testconfig-0.2.0.tar.gz 10.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pytest-testconfig 0.2.0
File Interpreter ABI Platform
pytest_testconfig-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 21.4 kB

Release files / pytest-testconfig-0.2.0.tar.gz

Download URL pytest-testconfig-0.2.0.tar.gz
Size 10.5 kB
Tags Source
SHA-256 checksum
How to use checksums
0fa9e210bc2dd83d7408470cea8fb6e607576551bb3b1f9524cb51d8554a3da6
BLAKE2b-256 checksum
How to use checksums
467383394479f15d85b57c5f6d7db722c284d90ecf8c1521831c58ae4abcdec6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/39.1.0 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.6

Release files / pytest_testconfig-0.2.0-py3-none-any.whl

Download URL pytest_testconfig-0.2.0-py3-none-any.whl
Size 10.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0cfaaf4f47e0cf84358ec8dd2294df0358da2bc29730069aad2b4a2094c1a295
BLAKE2b-256 checksum
How to use checksums
13ffb5438d5ed588ce02353abdad010fa67409801b5adf13bf1f816362d4db24
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/39.1.0 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.6

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page