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:
pip install pytest-pyramid-server
# or..
easy_install pytest-pyramid-server
Enable the fixture explicitly in your tests or conftest.py (not required when using setuptools entry points):
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:
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 ``path`` object to the running config file (see https://path.readthedocs.io/)
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:
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.read_text()
# Server should now be dead
assert server.dead
pytest-webdriver and PageObjects 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:
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.8.0 (2024-10-??)
- All: Drop support for Python 2 and <3.6, removing compatibility code.
- All: Use stdlib unittest.mock instead of mock package.
- All: Removed usage of path.py and path in favour of pathlib. #174 #224
- pytest-devpi-server: Run devpi-init for initialisation. #179
- pytest-server-fixtures: BREAKING CHANGE: Removed RethinkDB support, as the project is no longer maintained.
- pytest-server-fixtures: Allowed passing through HTTP headers to the server. #149
- pytest-server-fixtures: Fixed threading log debug messages. #146
- pytest-server-fixtures: Removed usage of deprecated Thread.setDaemon. #202
- pytest-server-fixtures: Explicitly close initial Mongo client. #198
- pytest-server-fixtures: Don't use context manager for CREATE DATABASE #186
- pytest-shutil: Removed contextlib2 requirement. #144
- pytest-shutil: Fixed forcing color through termcolor. #217
- pytest-shutil: Replaced deprecated imp module #219
- pytest-profiling: Added support to hide/show the full path of file. #95
- pytest-profiling: Fixed SVG file generation on Windows. #93
- pytest-profiling: Remove pinning of more-itertools. #194
- pytest-profiling: Add support to define element number for print_stats() #96
- pytest-profiling: Fix mock in test_writes_summary #223
- pytest-virtualenv: Modernised package. #188 #185 #182 #163
- pytest-virtualenv: Fixed virtualenv creation on Windows. #142
- pytest-virtualenv: Added delete_workspace parameter to VirtualEnv. #195
- pytest-virtualenv: Removed extras_require. #240
- ci: Remove usage of deprecated distutils. #189
- ci: Disabled jenkins server tests on CircleCI to improve build time.
- ci: Fixed
collectionsimport for py 3.11 compatibility #222
1.7.1 (2019-05-28)
- pytest-profiling: Fix pytest-profiling to profile fixtures. #48
- pytest-devpi-server: Fixed Python 3.4 support updating "ruamel.yaml" requirements. #138
- ci: Added PYTEST_DONT_REWRITE in order to suppress module already imported. #123
1.7.0 (2019-02-21)
- All: Support pytest >= 4.0.0
- All: Support Python 3.7
- pytest-server-fixtures: if host not defined on your machine, default to localhost
- pytest-server-fixture: Pin to rethinkdb < 2.4.0 due to upstream API changes
- pytest-verbose-parametrize: Add support for revamped marker infrastructure
- pytest-verbose-parametrize: Fix integration tests to support pytest >= 4.1.0
- pytest-virtualenv: Add virtualenv as install requirement. Fixes #122
- pytest-webdriver: Fix RemovedInPytest4Warning using getfixturevalue
- circleci: Fix checks by skipping coverall submission for developer without push access
- wheels: Generate universal wheels installable with both python 2.x and 3.x
- dist: Remove support for building and distributing *.egg files
- VagrantFile: Install python 3.7 and initialize python 3.7 by default
- Fix DeprecationWarning warnings using "logger.warning()" function
1.6.2 (2019-02-21)
- pytest-server-fixtures: suppress stacktrace if kill() is called
- pytest-server-fixtures: fix random port logic in TestServerV2
1.6.1 (2019-02-12)
- pytest-server-fixtures: fix exception when attempting to access hostname while server is not started
1.6.0 (2019-02-12)
- pytest-server-fixtures: added previously removed TestServerV2.kill() function
- pytest-profiling: pin more-itertools==5.0.0 in integration tests, as that's a PY3 only release
1.5.1 (2019-01-24)
- pytest-verbose-parametrize: fixed unicode parameters when using
@pytest.mark.parametrize
1.5.0 (2019-01-23)
- pytest-server-fixtures: made postgres fixtures and its tests optional, like all other fixtures
- pytest-server-fixtures: reverted a fix for pymongo deprecation warning, as this will break compatibility with pymongo 3.6.0
- pytest-server-fixtures: dropped RHEL5 support in httpd
1.4.1 (2019-01-18)
- pytest-server-fixtures: server fixture binary path specified in ENV now only affect server class 'thread'
1.4.0 (2019-01-15)
- Fixing python 3 compatibility in Simple HTTP Server fixture
- Fixed broken tests in pytest-profiling
- Pinned pytest<4.0.0 until all deprecation warnings are fixed.
- pytest-webdriver: replaced deprecated phantomjs with headless Google Chrome.
- Add Vagrantfile to project to make test environment portable.
- Add .editorconfig file to project.
- pytest-server-fixtures: add TestServerV2 with Docker and Kubernetes support.
- pytest-server-fixtures: fix for an issue where MinioServer is not cleaned up after use.
- pytest-server-fixtures: fix deprecation warnings when calling pymongo.
- pytest-server-fixtures: close pymongo client on MongoTestServer teardown.
- pytest-server-fixtures: upgrade Mongo, Redis and RethinkDB to TestServerV2.
- coveralls: fix broken coveralls
1.3.1 (2018-06-28)
- Use pymongo list_database_names() instead of the deprecated database_names(), added pymongo>=3.6.0 dependency
1.3.0 (2017-11-17)
- Fixed workspace deletion when teardown is None
- Fixed squash of root logger in pytest-listener
- Added S3 Minio fixture (many thanks to Gavin Bisesi)
- Added Postgres fixture (many thanks to Gavin Bisesi)
- Use requests for server fixtures http gets as it handles redirects and proxies properly
1.2.12 (2017-8-1)
- Fixed regression on cacheing ephemeral hostname, some clients were relying on this. This is now optional.
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
Release files for pytest-pyramid-server 1.8.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pytest-pyramid-server-1.8.0.tar.gz | 11.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pytest_pyramid_server-1.8.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 21.8 kB
Release files / pytest-pyramid-server-1.8.0.tar.gz
| Download URL | pytest-pyramid-server-1.8.0.tar.gz |
|---|---|
| Size | 11.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a8be30902e5966715a2f537e19c9a7198656c081820bafd79003b8bb9cd0407b
|
|
BLAKE2b-256 checksum How to use checksums |
a7a5ccda55465faa722043a0b015b063720b8a23792e4ca25a7e96dbfe76849c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.1 CPython/3.11.0
|
Release files / pytest_pyramid_server-1.8.0-py3-none-any.whl
| Download URL | pytest_pyramid_server-1.8.0-py3-none-any.whl |
|---|---|
| Size | 10.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b0766eaaeb0ac8cb0cb95bcb5d2a42f6cd22813c585a029f3594181cb803b510
|
|
BLAKE2b-256 checksum How to use checksums |
4bb5b30710af07fc5e8d882427ac4fd48c74200a9ae31d29cee4454f3eac7ca9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.1 CPython/3.11.0
|