Integration of zope.testrunner-style test layers into pytest framework
Project description
The gocept.pytestlayer distribution
Integration of zope.testrunner-style test layers into the pytest framework
This package is compatible with Python versions 3.6 - 3.9 including PyPy3.
Quick start
Make sure your test files follow the conventions of pytest’s test discovery
In particular, a file named tests.py will not be recognised.
Add a buildout section to create the pytest runner:
[buildout] parts += pytest [pytest] recipe = zc.recipe.egg eggs = gocept.pytestlayer pytest <YOUR PACKAGE HERE>
gocept.pytestlayer registers itself as a pytest plugin. This way, nothing more is needed to run an existing Zope or Plone test suite.
Advanced usage
Version 2.1 reintroduced fixture.create() to be able to define the name of the generated to pytest fixtures. So it is possible to use them in function style tests.
Example (Code has to be in contest.py!):
from .testing import FUNCTIONAL_LAYER import gocept.pytestlayer.fixture globals().update(gocept.pytestlayer.fixture.create( FUNCTIONAL_LAYER, session_fixture_name='functional_session', class_fixture_name='functional_class', function_fixture_name='functional'))
This creates three fixtures with the given names and the scopes in the argument name. The session and class fixtures run setUp() and tearDown() of the layer if it has not been run before while the function fixture runs testSetUp() and testTearDown() of the layer. The function fixture depends on the session one. The fixtures return the instance of the layer. So you can use the functional fixture like this:
def test_mymodule__my_function__1(functional): assert functional['app'] is not None
Not supported use cases
Inheriting from a base class while changing the layer. See commit f879f9e.
Mixing classes inheriting unittest.TestCase and a test_suite() function (e. g. to create a DocTestSuite or a DocFileSuite) in a single module (aka file).
This is a limitation of the pytest test discovery which ignores the doctests in this case.
Solution: Put the classes and test_suite() into different modules.
A doctest.DocFileSuite which does not have a layer is silently skipped. Use the built-in doctest abilities of pytest to run those tests.
Developing gocept.pytestlayer
- Author:
gocept <mail@gocept.com>, Godefroid Chapelle <gotcha@bubblenet.be>
- PyPI page:
- Issues:
- Source code:
- Current change log:
https://raw.githubusercontent.com/gocept/gocept.pytestlayer/master/CHANGES.rst
Change log for gocept.pytestlayer
8.0 (2021-12-13)
Use GitHub actions as CI.
Add support for Python 3.9 and 3.10.
Drop support for Python 3.6.
Add a workaround for #4: Use gcoept.pytestlayer.doctest.DocTestSuite instead of doctest.DocTestSuite to circumvent the issue.
7.0 (2020-08-03)
Backwards imcompatible changes
Drop support for Python 2.7 and 3.5 and pytest < 5.0. (#8)
Features
Support pytest >= 6.0. (#8)
6.3 (2020-05-15)
Ensure compatibility with pytest > 5.4.2. We need a _explicit_tearDown on our LayeredTestCaseFunction now.
6.2 (2020-03-20)
Ensure compatibility with pytest > 5.4. We need a _needs_explicit_tearDown on our LayeredTestCaseFunction now.
6.1 (2020-02-20)
Fix tests to run with pytest >= 4.2.0.
Migrate to Github.
Do not break when rerunning a doctest using pytest-rerunfailures.
Add support for Python 3.8.
6.0 (2018-10-24)
Add support for Python 3.6, 3.7 and PyPy3.
Drop support for Python 3.4.
Fix tests to run with pytest >= 3.9.1.
Release also as universal wheel.
Update to new pytest fixture API to avoid DeprecationWarnings. (#10)
5.1 (2016-12-02)
Make installation process compatible with setuptools >= 30.0.
5.0 (2016-08-23)
Fix tests to pass if pytest >= 3.0 is used for testing.
4.0 (2016-04-27)
Support Python 3.4, 3.5 and PyPy.
Use tox as testrunner.
3.0 (2016-04-14)
Claim compatibility with py.test 2.9.x.
Drop Python 2.6 support.
2.1 (2014-10-22)
Update handling of keywords and doctest testnames for py.test-2.5. [wosc]
Re-introduce gocept.pytestlayer.fixture.create() method, to allow giving created fixtures a non-random name, so other fixtures can depend on them. [tlotze, wosc]
Generate session-scoped fixtures from layers in addition to class-scoped ones, if a session-scoped one is required somewhere, the class-scoped ones are simply ignored. [tlotze, wosc]
2.0 (2013-09-19)
Remove need to explicitely create fixtures. [gotcha]
Add plone.testing.layered test suites support. [gotcha]
Made tests a bit more robust. [icemac]
1.0 (2013-08-28)
Initial release. [tlotze, icemac, gotcha]
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 Distribution
Hashes for gocept.pytestlayer-8.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f497e2498eeded249b6b36e487159b3cfe9956fc615123ee82a380c6b3691d7f |
|
MD5 | b656bb2ddc75905660c9d145e0a3bbc3 |
|
BLAKE2b-256 | 85a2b431a70b00cf3e003c278ade4033268f2d80a46142c5bfe1349d42904edd |