https://github.com/kaste/pytest-beds
Fixtures for testing Google Appengine (GAE) apps
https://github.com/kaste/pytest-beds
app-engine google-appengine
Last synced: 8 months ago
JSON representation
Fixtures for testing Google Appengine (GAE) apps
- Host: GitHub
- URL: https://github.com/kaste/pytest-beds
- Owner: kaste
- License: mit
- Created: 2014-04-28T14:29:43.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2016-06-07T19:55:08.000Z (over 9 years ago)
- Last Synced: 2025-04-21T12:44:40.924Z (9 months ago)
- Topics: app-engine, google-appengine
- Language: Python
- Homepage:
- Size: 12.7 KB
- Stars: 10
- Watchers: 2
- Forks: 5
- Open Issues: 1
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
Awesome Lists containing this project
README
Convenience plugin on top of the testbed the Google Appengine (GAE) SDK already provides.
.. image:: https://travis-ci.org/kaste/pytest-beds.svg?branch=master
:target: https://travis-ci.org/kaste/pytest-beds
Install
=======
``pip install pytest-beds``
After that the plugin is enabled by default. You can use specific fixtures (see below) to activate the Testbed and stub specific services.
Options
=======
``--no-gae``
Disable the plugin, esp. do not change the python paths and try to import dev_appserver.
``--sdk-path PATH``
The plugin assumes it can just ``import dev_apserver``. If that fails it looks up the SDK path in the environment variable ``GAE``. Otherwise, you can specify the path to the SDK by using the ``--sdk-path PATH`` option.
``--project-root PATH``
Secondly, the plugin assume that your current path is the projects root folder, t.i. the dirctory which holds the app.yaml. You can specify a different path using ``--project-root PATH``.
``--noisy-tasklets``
By default the plugin shortens the tracebacks when using ndb tasklets, so they don't include the eventloop's internal noise.
Use this switch to make ndb noisy again.
Fixtures
========
The plugin provides fixtures to stub the different services. Usage is therefore simple and straightforward::
# Say, if you create a Foo you hit the database and put some work on queue
def test_foo(ndb, taskqueue):
foo = Foo.create()
assert Foo.query().fetch() == [foo]
List of builtin fixtures::
bed
mailer
channel
urlfetch
memcache
taskqueue
blobstore
ndb
users
Users
-----
There are two fixtures ``anonymous`` and ``login`` to handle the users-stub.
``anonymous``
Prepares the user stub so that ``users.get_current_user()`` will return None
``login``
Prepares the user stub and returns a function to login actual users::
def test_login(login):
# at this point users.get_current_user() will return None
login(id=1, email='foo@gmail.com')
# now users.get_current_user() will return a user
login.logout()
# now users.get_current_user() will return None again
Deferreds
---------
The ``deferreds`` fixture inits the taskqueue stub, but returns a useful object, so you can actually run the deferred functions::
def test_work(deferreds):
deferred.defer(work, 'to be done')
deferreds.consume()
assert 'work has been done'