Virtualenv fixture for py.test
Project description
# Py.test Virtualenv Fixture
Create a Python virtual environment in your test that cleans up on teardown.
The fixture has utility methods to install packages and list what's installed.
## Installation
Install using your favourite package installer:
```bash
pip install pytest-virtualenv
# or
easy_install pytest-virtualenv
```
Enable the fixture explicitly in your tests or conftest.py (not required when using setuptools entry points):
```python
pytest_plugins = ['pytest_virtualenv']
```
## Configuration
This fixture is configured using the following evironment variables
| Setting | Description | Default
| ------- | ----------- | -------
| VIRTUALENV_FIXTURE_EXECUTABLE | Which virtualenv executable will be used to create new venvs | `virtualenv`
## Fixture Attributes
Here's a noddy test case to demonstrate the basic fixture attributes.
For more information on `path.py` see https://pythonhosted.org/path.py
```python
def test_virtualenv(virtualenv):
# the 'virtualenv' attribute is a `path.py` object for the root of the virtualenv
dirnames = virtualenv.virtualenv.dirs()
assert {'bin', 'include', 'lib'}.intersection(set(dirnames))
# the 'python' attribute is a `path.py` object for the python executable
assert virtualenv.python.endswith('/bin/python')
```
## Installing Packages
You can install packages by name and query what's installed.
```python
def test_installing(virtualenv):
virtualenv.install_package('coverage', installer='pip')
# installed_packages() will return a list of `PackageEntry` objects.
assert 'coverage' in [i.name for i in virtualenv.installed_packages()]
```
## Developing Source Checkouts
Any packages set up in the *test runner's* python environment (ie, the same runtime that
``py.test`` is installed in) as source checkouts using `python setup.py develop` will be
detected as such and can be installed by name using `install_package`.
By default they are installed into the virtualenv using `python setup.py develop`, there
is an option to build and install an egg as well:
```python
def test_installing_source(virtualenv):
# Install a source checkout of my_package as an egg file
virtualenv.install_package('my_package', build_egg=True)
```
## Running Commands
The test fixture has a `run` method which allows you to run commands with the correct
paths set up as if you had activated the virtualenv first.
```python
def test_run(virtualenv):
python_exe_path = virtualenv.python
runtime_exe = virtualenv.run("python -c 'import sys; print sys.executable'", capture=True)
assert runtime_exe == python_exe_path
```
## Running Commands With Coverage
The test fixture has a `run_with_coverage` method which is like `run` but runs the command
under coverage *inside the virtualenv*. This is useful for capturing test coverage on
tools that are being tested outside the normal test runner environment.
```python
def test_coverage(virtualenv):
# You will have to install coverage first
virtualenv.install_package(coverage)
virtualenv.run_with_coverage(["my_entry_point", "--arg1", "--arg2"])
```
## Changelog
### 1.2.11 (2017-7-21)
* Fix for OSX binding to illegal local IP range (Thanks to Gavin Bisesi)
* Setup and Py3k fixes for pytest-profiling (Thanks to xoviat)
* We no longer try and bind port 5000 when reserving a local IP host, as someone could have bound it to 0.0.0.0
* Fix for #46 sourcing gprof2dot when the local venv has not been activated
### 1.2.10 (2017-2-23)
* Handle custom Pytest test items in pytest-webdriver
### 1.2.9 (2017-2-23)
* Add username into mongo server fixture tempdir path to stop collisions on shared multiuser filesystems
### 1.2.8 (2017-2-21)
* Return function results in shutil.run.run_as_main
### 1.2.7 (2017-2-20)
* More handling for older versions of path.py
* Allow virtualenv argument passing in pytest-virtualenv
### 1.2.6 (2017-2-16 )
* Updated devpi server server setup for devpi-server >= 2.0
* Improvements for random port picking
* HTTPD server now binds to 0.0.0.0 by default to aid Selenium-style testing
* Updated mongodb server args for mongodb >= 3.2
* Corrections for mongodb fixture config and improve startup logic
* Added module-scoped mongodb fixture
* Handling for older versions of path.py
* Fix for #40 where tests that chdir break pytest-profiling
### 1.2.5 (2016-12-09)
* Improvements for server runner host and port generation, now supports random local IPs
* Bugfix for RethinkDB fixture config
### 1.2.4 (2016-11-14)
* Bugfix for pymongo extra dependency
* Windows compatibility fix for pytest-virtualenv (Thanks to Jean-Christophe Fillion-Robin for PR)
* Fix symlink handling for pytest-shutil.cmdline.get_real_python_executable
### 1.2.3 (2016-11-7)
* Improve resiliency of Mongo fixture startup checks
### 1.2.2 (2016-10-27)
* Python 3 compatibility across most of the modules
* Fixed deprecated Path.py imports (Thanks to Bryan Moscon)
* Fixed deprecated multicall in pytest-profiling (Thanks to Paul van der Linden for PR)
* Added devpi-server fixture to create an index per test function
* Added missing licence file
* Split up httpd server fixture config so child classes can override loaded modules easier
* Added 'preserve_sys_path' argument to TestServer base class which exports the current python sys.path to subprocesses.
* Updated httpd, redis and jenkins runtime args and paths to current Ubuntu spec
* Ignore errors when tearing down workspaces to avoid race conditions in 'shutil.rmtree' implementation
### 1.2.1 (2016-3-1)
* Fixed pytest-verbose-parametrize for latest version of py.test
### 1.2.0 (2016-2-19)
* New plugin: git repository fixture
### 1.1.1 (2016-2-16)
* pytest-profiling improvement: escape illegal characters in .prof files (Thanks to Aarni Koskela for the PR)
### 1.1.0 (2016-2-15)
* New plugin: devpi server fixture
* pytest-profiling improvement: overly-long .prof files are saved as the short hash of the test name (Thanks to Vladimir Lagunov for PR)
* Changed default behavior of workspace.run() to not use a subshell for security reasons
* Corrected virtualenv.run() method to handle arguments the same as the parent method workspace.run()
* Removed deprecated '--distribute' from virtualenv args
### 1.0.1 (2015-12-23)
* Packaging bugfix
### 1.0.0 (2015-12-21)
* Initial public release
Create a Python virtual environment in your test that cleans up on teardown.
The fixture has utility methods to install packages and list what's installed.
## Installation
Install using your favourite package installer:
```bash
pip install pytest-virtualenv
# or
easy_install pytest-virtualenv
```
Enable the fixture explicitly in your tests or conftest.py (not required when using setuptools entry points):
```python
pytest_plugins = ['pytest_virtualenv']
```
## Configuration
This fixture is configured using the following evironment variables
| Setting | Description | Default
| ------- | ----------- | -------
| VIRTUALENV_FIXTURE_EXECUTABLE | Which virtualenv executable will be used to create new venvs | `virtualenv`
## Fixture Attributes
Here's a noddy test case to demonstrate the basic fixture attributes.
For more information on `path.py` see https://pythonhosted.org/path.py
```python
def test_virtualenv(virtualenv):
# the 'virtualenv' attribute is a `path.py` object for the root of the virtualenv
dirnames = virtualenv.virtualenv.dirs()
assert {'bin', 'include', 'lib'}.intersection(set(dirnames))
# the 'python' attribute is a `path.py` object for the python executable
assert virtualenv.python.endswith('/bin/python')
```
## Installing Packages
You can install packages by name and query what's installed.
```python
def test_installing(virtualenv):
virtualenv.install_package('coverage', installer='pip')
# installed_packages() will return a list of `PackageEntry` objects.
assert 'coverage' in [i.name for i in virtualenv.installed_packages()]
```
## Developing Source Checkouts
Any packages set up in the *test runner's* python environment (ie, the same runtime that
``py.test`` is installed in) as source checkouts using `python setup.py develop` will be
detected as such and can be installed by name using `install_package`.
By default they are installed into the virtualenv using `python setup.py develop`, there
is an option to build and install an egg as well:
```python
def test_installing_source(virtualenv):
# Install a source checkout of my_package as an egg file
virtualenv.install_package('my_package', build_egg=True)
```
## Running Commands
The test fixture has a `run` method which allows you to run commands with the correct
paths set up as if you had activated the virtualenv first.
```python
def test_run(virtualenv):
python_exe_path = virtualenv.python
runtime_exe = virtualenv.run("python -c 'import sys; print sys.executable'", capture=True)
assert runtime_exe == python_exe_path
```
## Running Commands With Coverage
The test fixture has a `run_with_coverage` method which is like `run` but runs the command
under coverage *inside the virtualenv*. This is useful for capturing test coverage on
tools that are being tested outside the normal test runner environment.
```python
def test_coverage(virtualenv):
# You will have to install coverage first
virtualenv.install_package(coverage)
virtualenv.run_with_coverage(["my_entry_point", "--arg1", "--arg2"])
```
## Changelog
### 1.2.11 (2017-7-21)
* Fix for OSX binding to illegal local IP range (Thanks to Gavin Bisesi)
* Setup and Py3k fixes for pytest-profiling (Thanks to xoviat)
* We no longer try and bind port 5000 when reserving a local IP host, as someone could have bound it to 0.0.0.0
* Fix for #46 sourcing gprof2dot when the local venv has not been activated
### 1.2.10 (2017-2-23)
* Handle custom Pytest test items in pytest-webdriver
### 1.2.9 (2017-2-23)
* Add username into mongo server fixture tempdir path to stop collisions on shared multiuser filesystems
### 1.2.8 (2017-2-21)
* Return function results in shutil.run.run_as_main
### 1.2.7 (2017-2-20)
* More handling for older versions of path.py
* Allow virtualenv argument passing in pytest-virtualenv
### 1.2.6 (2017-2-16 )
* Updated devpi server server setup for devpi-server >= 2.0
* Improvements for random port picking
* HTTPD server now binds to 0.0.0.0 by default to aid Selenium-style testing
* Updated mongodb server args for mongodb >= 3.2
* Corrections for mongodb fixture config and improve startup logic
* Added module-scoped mongodb fixture
* Handling for older versions of path.py
* Fix for #40 where tests that chdir break pytest-profiling
### 1.2.5 (2016-12-09)
* Improvements for server runner host and port generation, now supports random local IPs
* Bugfix for RethinkDB fixture config
### 1.2.4 (2016-11-14)
* Bugfix for pymongo extra dependency
* Windows compatibility fix for pytest-virtualenv (Thanks to Jean-Christophe Fillion-Robin for PR)
* Fix symlink handling for pytest-shutil.cmdline.get_real_python_executable
### 1.2.3 (2016-11-7)
* Improve resiliency of Mongo fixture startup checks
### 1.2.2 (2016-10-27)
* Python 3 compatibility across most of the modules
* Fixed deprecated Path.py imports (Thanks to Bryan Moscon)
* Fixed deprecated multicall in pytest-profiling (Thanks to Paul van der Linden for PR)
* Added devpi-server fixture to create an index per test function
* Added missing licence file
* Split up httpd server fixture config so child classes can override loaded modules easier
* Added 'preserve_sys_path' argument to TestServer base class which exports the current python sys.path to subprocesses.
* Updated httpd, redis and jenkins runtime args and paths to current Ubuntu spec
* Ignore errors when tearing down workspaces to avoid race conditions in 'shutil.rmtree' implementation
### 1.2.1 (2016-3-1)
* Fixed pytest-verbose-parametrize for latest version of py.test
### 1.2.0 (2016-2-19)
* New plugin: git repository fixture
### 1.1.1 (2016-2-16)
* pytest-profiling improvement: escape illegal characters in .prof files (Thanks to Aarni Koskela for the PR)
### 1.1.0 (2016-2-15)
* New plugin: devpi server fixture
* pytest-profiling improvement: overly-long .prof files are saved as the short hash of the test name (Thanks to Vladimir Lagunov for PR)
* Changed default behavior of workspace.run() to not use a subshell for security reasons
* Corrected virtualenv.run() method to handle arguments the same as the parent method workspace.run()
* Removed deprecated '--distribute' from virtualenv args
### 1.0.1 (2015-12-23)
* Packaging bugfix
### 1.0.0 (2015-12-21)
* Initial public release
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 Distributions
Close
Hashes for pytest_virtualenv-1.2.11-py2.7.egg
Algorithm | Hash digest | |
---|---|---|
SHA256 | eba7e6027bbaabc2bbe4f49b58b6820b76a828ccccaaed3f4c760ce68611bb92 |
|
MD5 | 0e4cc2c032ed0620fb22d4db6a6e3199 |
|
BLAKE2b-256 | 9091d4ca3acb883da5da92cc9284db4579cf8c3e00fe14a21030662add18d35b |
Close
Hashes for pytest_virtualenv-1.2.11-py2-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2f8fc17280b436998bbcc677079fbc3b9677669c4481d20faaa220579b41c962 |
|
MD5 | 2c19dc26fc98ec94de59bd9c5d7d1621 |
|
BLAKE2b-256 | 8312333d6fbdd719eaeb1832ebb04d4ab030c40b322db5c97c5485ce510c7f6d |