用google的appengine编写应用程序的pytest插件

pytest_gae的Python项目详细描述


比重瓶

pytest插件帮助您测试 用google的AppEngine编写的应用程序。

选项

  • –使用GAE:打开此插件
  • –gae路径:appengine的根目录(默认值google\u appengine
  • –GAE项目路径:项目的根目录(默认值./

限制

插件不会阻止您使用 环境拒绝执行。因此,您可以轻松地执行以下操作:

import socket
import numpy

测试刚刚通过。但不能在appengine环境中运行此代码, 因为沙拳。见:AppEngine Docs

这个插件使用内部appengine的代码,不能保证 谷歌不会改变它。

其他

这个项目的灵感来自nose gae插件nose

http://code.google.com/p/nose-gae/

用法示例

假设我们有一个类似的目录

./
|-- gae               # AppEngine's root
|   |-- ...
|-- src               # Your project's root
|   |-- app.yaml
|   |-- index.yaml
|   |-- main.py
|-- tests             # Tests' dir
    |-- test_handlers.py
    |-- test_models.py

main.py:

#!/usr/bin/env python
from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
from google.appengine.ext.webapp.util import login_required
from google.appengine.api import users
from google.appengine.ext import db


class MyModel(db.Model):
    my_field = db.StringProperty(required=False)


class IndexHandler(webapp.RequestHandler):
    def get(self):
        self.response.out.write('Index')


class UsersHandler(webapp.RequestHandler):

    @login_required
    def get(self):
        if users.is_current_user_admin():
            self.response.out.write('Admin')
        else:
            self.response.out.write('User')


def make_application():
    return webapp.WSGIApplication([('/index', IndexHandler),
                                   ('/users', UsersHandler)], debug=True)


def main():
    application = make_application()
    util.run_wsgi_app(application)


if __name__ == '__main__':
    main()

测试模型

测试模型.py:

from google.appengine.ext import db
import pytest

from main import MyModel


def test_basic():
    m = MyModel(my_field='Foo')
    assert 'Foo' == m.my_field


def test_new_model():
    m = MyModel(my_field='Foo')
    pytest.raises(db.NotSavedError, lambda: m.key())


def test_saved_model():
    m = MyModel(my_field='Foo')
    m.put()
    assert m.key()

与webtest一起使用

我们可以在WebTest库的帮助下测试处理程序。

我们将创建三个funcargs函数,允许我们测试应用程序:

  • 从匿名用户的角度来看
  • 从授权用户的角度来看
  • 从管理角度看

我们可以通过改变os.environment

测试处理器.py:

import os

from webtest import TestApp
from main import make_application


def pytest_funcarg__anon_app(request):
    os.environ.update({'USER_EMAIL': '',
                       'USER_ID': '',
                       'AUTH_DOMAIN': 'google',
                       'USER_IS_ADMIN': '0'})
    return TestApp(make_application())


def pytest_funcarg__user_app(request):
    os.environ.update({'USER_EMAIL': 'simple@google.com',
                       'USER_ID': '1',
                       'AUTH_DOMAIN': 'google',
                       'USER_IS_ADMIN': '0'})
    return TestApp(make_application())


def pytest_funcarg__admin_app(request):
    os.environ.update({'USER_EMAIL': 'admin@google.com',
                       'USER_ID': '2',
                       'AUTH_DOMAIN': 'google',
                       'USER_IS_ADMIN': '1'})
    return TestApp(make_application())


def test_index(anon_app):
    assert "Index" in anon_app.get('/index')


def test_user_with_user(user_app):
    assert "User" in user_app.get('/users')


def test_user_with_anon(anon_app):
    assert '302 Moved Temporarily' == anon_app.get('/users').status


def test_user_with_admin(admin_app):
    assert "Admin" in admin_app.get('/users')

运行

py.test tests --with-gae --gae-path=gae --gae-project-path=./src/ :
platform linux2 -- Python 2.7.12, pytest-2.9.2, py-1.4.31, pluggy-0.3.1
collected 7 items

tests/test_handlers.py ....
tests/test_models.py ...

============ 7 passed in 0.64 seconds ============

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JavaBridge errno=10054被Remotehost关闭   javafx如何在每次调用方法中的变量时更新它?(爪哇)   java mod_群集在发现后未平衡负载   Java软件编辑器/语法高亮   java为什么不能强制转换数组的结果。asList()到ArrayList?   java HIBERNATE:无法使用HIBERNATE从MySQL中提取数据   java在Google地图片段上添加布局   java在AbstractTableModel中执行setValueAt之前,我如何做一些事情?   java在整个Tomcat运行时保存变量   java如何在Thymeleaf模板中获取环境变量的值?   java Selenium Chrome驱动程序针对属性的标签   java正则表达式捕获未知数量的重复组