在使用测试环境时,Google App Engine如何设置用户

13 投票
2 回答
2064 浏览
提问于 2025-04-16 18:54

我正在使用GAE的测试环境,当我运行users.get_current_user()时,返回的是None,也就是说:

>>> import sys
>>> sys.path.append("/usr/local/google_appengine") # for Mac OS X
>>> from google.appengine.api import users
>>> from google.appengine.ext import testbed
>>> testbed = testbed.Testbed()
>>> testbed.activate()
>>> testbed.init_user_stub()
>>> users.get_current_user() == None
True

这是预期的结果。不过,我想在运行一些单元测试时登录一个假用户。

如果可以的话(我觉得应该可以),那么在命令行运行testbed时,怎么才能登录一个用户,让get_current_user()返回一个实际的用户呢?

谢谢你的阅读。

2 个回答

3

经过一些尝试,下面的做法对我有效:

>>> os.environ['USER_EMAIL'] = 'a@b.c'
>>> os.environ['USER_ID'] = '123'
>>> users.get_current_user()
users.User(email='a@b.c',_user_id='123')

希望这个方法不错,也希望这个回答能帮助下一个遇到这个问题的人。

补充说明:相关变量

为了避免出现 /google/appengine/api/users.py:115 - AssertionError: assert _auth_domain 这个错误:

>>> os.environ['AUTH_DOMAIN'] = 'testbed'

根据Elliot de Vries的评论,对于一个管理员用户:

>>> os.environ['USER_IS_ADMIN'] = '1'
18

为了模拟一个管理员用户的登录,你可以在测试函数的任何地方调用以下代码:

self.testbed.setup_env(
    USER_EMAIL = 'test@example.com',
    USER_ID = '123',
    USER_IS_ADMIN = '1',
    overwrite = True)

请注意,你需要使用 overwrite=True 这个参数!

撰写回答