Pyramid server fixture for py.test
Project description
# Py.test Pyramid Server Fixture
Pyramid server fixture for py.test. The server is session-scoped by default
and run in a subprocess and temp dir, and as such is a 'real' server that you
can point a Selenium webdriver at.
## Installation
Install using your favourite package manager:
```bash
pip install pytest-pyramid
# or..
easy_install pytest-pyramid
```
Enable the fixture explicitly in your tests or conftest.py (not required when using setuptools entry points):
```python
pytest_plugins = ['pytest_pyramid_server']
```
## Configuration
This fixture searches for its configuration in the current working directory
called 'testing.ini'. All .ini files in the cwd will be copied to the tempdir
so that paster-style config chaining still works. For example:
my-pyramid-app/
src/ # Project code is in here
setup.py # Project setup.py
development.ini # Development settings
production.ini # Production settings
testing.ini # Testing settings, will be used if tests
# are invoked using 'py.test' from this
# directory
## Example
Here's a noddy test case showing the main functionality:
```python
def test_pyramid_server(pyramid_server):
# This is the http://{host}:{port} of the running server. It will attempt to resolve
# to externally accessable IPs so a web browser can access it.
assert pyramid_server.uri.startswith('http')
# GET a document from the server.
assert pyramid_server.get('/orders/macbooks', as_json=True) == {'id-1234': 'MPB-15inch'}
# POST a document to the server.
assert pyramid_server.post('/login', 'guest:password123').response_code == 200
# ``path.py`` path object to the running config file
assert pyramid_server.working_config.endswith('testing.ini')
```
## `PyramidServer` class
Using this with the default `pyramid_server` py.test fixture is good enough for a lot of
use-cases however you may wish to have more fine-grained control about the server configuration.
To do this you can use the underlying server class directly - this is an implenentation of the
`pytest-server-fixture` framework and as such acts as a context manager:
```python
from pytest_pyramid import PyramidTestServer
def test_custom_server():
with PyramidTestServer(
# You can specify you own config directory and name
config_dir='/my/config',
config_fileme='my_testing.ini',
# You can set arbitrary config variables in the constructor
extra_config_vars={'my_config_section': {'my_dbname: 'foo',
'my_dbpass: 'bar'}}
) as server:
assert not server.dead
assert 'my_dbname = foo' in server.working_config.text()
# Server should now be dead
assert server.dead
```
## `pytest-webdriver` and [PageObjects](https://page-objects.readthedocs.org/en/latest/) integration
The `pytest-webdriver` plugin will detect when this plugin is active and set its default base
URL to the url of the running server. This is a nice way of avoiding lots of string manipulation
in your browser tests when using Page Objects:
```python
from page_objects import PageObject, PageElement
class LoginPage(PageObject):
username = PageElement(id_='username')
password = PageElement(name='password')
login = PageElement(css='input[type="submit"]')
def test_login_page(webdriver, pyramid_server):
page = LoginPage(webdriver)
page.login.click()
page.get('/foo/bar')
assert webdriver.getCurrentUrl() == pyramid_server.uri + '/foo/bar'
```
## 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
Pyramid server fixture for py.test. The server is session-scoped by default
and run in a subprocess and temp dir, and as such is a 'real' server that you
can point a Selenium webdriver at.
## Installation
Install using your favourite package manager:
```bash
pip install pytest-pyramid
# or..
easy_install pytest-pyramid
```
Enable the fixture explicitly in your tests or conftest.py (not required when using setuptools entry points):
```python
pytest_plugins = ['pytest_pyramid_server']
```
## Configuration
This fixture searches for its configuration in the current working directory
called 'testing.ini'. All .ini files in the cwd will be copied to the tempdir
so that paster-style config chaining still works. For example:
my-pyramid-app/
src/ # Project code is in here
setup.py # Project setup.py
development.ini # Development settings
production.ini # Production settings
testing.ini # Testing settings, will be used if tests
# are invoked using 'py.test' from this
# directory
## Example
Here's a noddy test case showing the main functionality:
```python
def test_pyramid_server(pyramid_server):
# This is the http://{host}:{port} of the running server. It will attempt to resolve
# to externally accessable IPs so a web browser can access it.
assert pyramid_server.uri.startswith('http')
# GET a document from the server.
assert pyramid_server.get('/orders/macbooks', as_json=True) == {'id-1234': 'MPB-15inch'}
# POST a document to the server.
assert pyramid_server.post('/login', 'guest:password123').response_code == 200
# ``path.py`` path object to the running config file
assert pyramid_server.working_config.endswith('testing.ini')
```
## `PyramidServer` class
Using this with the default `pyramid_server` py.test fixture is good enough for a lot of
use-cases however you may wish to have more fine-grained control about the server configuration.
To do this you can use the underlying server class directly - this is an implenentation of the
`pytest-server-fixture` framework and as such acts as a context manager:
```python
from pytest_pyramid import PyramidTestServer
def test_custom_server():
with PyramidTestServer(
# You can specify you own config directory and name
config_dir='/my/config',
config_fileme='my_testing.ini',
# You can set arbitrary config variables in the constructor
extra_config_vars={'my_config_section': {'my_dbname: 'foo',
'my_dbpass: 'bar'}}
) as server:
assert not server.dead
assert 'my_dbname = foo' in server.working_config.text()
# Server should now be dead
assert server.dead
```
## `pytest-webdriver` and [PageObjects](https://page-objects.readthedocs.org/en/latest/) integration
The `pytest-webdriver` plugin will detect when this plugin is active and set its default base
URL to the url of the running server. This is a nice way of avoiding lots of string manipulation
in your browser tests when using Page Objects:
```python
from page_objects import PageObject, PageElement
class LoginPage(PageObject):
username = PageElement(id_='username')
password = PageElement(name='password')
login = PageElement(css='input[type="submit"]')
def test_login_page(webdriver, pyramid_server):
page = LoginPage(webdriver)
page.login.click()
page.get('/foo/bar')
assert webdriver.getCurrentUrl() == pyramid_server.uri + '/foo/bar'
```
## 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-pyramid-server-1.2.11.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 905f339c8194ac665030e39f39eb025a8c7985e6cf7bba44865dbcab14aff492 |
|
MD5 | a24320ed2d0c7162d4cba765cc39ab1e |
|
BLAKE2b-256 | 114193ee7b2e1e50bf148f91fdf50395d9b173706cda99bebfb3f525bdf87340 |
Close
Hashes for pytest_pyramid_server-1.2.11-py2.7.egg
Algorithm | Hash digest | |
---|---|---|
SHA256 | a3d8e100be3c9867582d55e399d7a64c0c8c4eb44f4e1c28f07c1603156a1910 |
|
MD5 | c8793ffcb6f1d5aca66d3f26b6f8f8ff |
|
BLAKE2b-256 | ae9893aaef2d903a352229be1c6af57ed752b3cfe1edd4510b23eff52e3ddb2f |
Close
Hashes for pytest_pyramid_server-1.2.11-py2-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 00650e6caa3c65e9907f951f5ccad99765a6859fc81eded4c41f79e870f28da4 |
|
MD5 | 743b1c8de7a097f3952849d26ded2f2e |
|
BLAKE2b-256 | dd16f37e0c498d5fd8f4fff24d6b5cb46bb010e55bc20de5a1deb9cd61f9c06e |