skip to navigation
skip to content

pytest-pyramid-server 1.3.0

Pyramid server fixture for py.test

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.


Install using your favourite package manager:

pip install pytest-pyramid
#  or..
easy_install pytest-pyramid

Enable the fixture explicitly in your tests or (not required when using setuptools entry points):

pytest_plugins = ['pytest_pyramid_server']


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:

              src/             # Project code is in here
             # Project
              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


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'/login', 'guest:password123').response_code == 200

    # ```` 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:

from pytest_pyramid import PyramidTestServer

def test_custom_server():
    with PyramidTestServer(
           # You can specify you own config directory and name

          # 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 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)
    assert webdriver.getCurrentUrl() == pyramid_server.uri + '/foo/bar'


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
  • 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

1.2.7 (2017-2-20)

  • More handling for older versions of
  • 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 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
  • 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 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 to not use a subshell for security reasons
  • Corrected method to handle arguments the same as the parent method
  • Removed deprecated ‘–distribute’ from virtualenv args

1.0.1 (2015-12-23)

  • Packaging bugfix

1.0.0 (2015-12-21)

  • Initial public release
File Type Py Version Uploaded on Size
pytest-pyramid-server-1.3.0.tar.gz (md5) Source 2018-03-08 11KB
pytest_pyramid_server-1.3.0-py2-none-any.whl (md5) Python Wheel py2 2018-03-08 11KB
pytest_pyramid_server-1.3.0-py2.7.egg (md5) Python Egg 2.7 2018-03-08 7KB