我正在使用Google App
Enginetestbed
框架编写带有模拟对象的测试用例。这在此处记录。我已经使用模拟数据库(Testbed.init_datastore_v3_stub
)使数据存储区测试正常运行,这使我的测试用例可以在快速,新鲜的数据库上运行,并针对每个测试用例进行了重新初始化。现在,我要测试取决于当前用户的功能。
还有另一个名为的测试平台服务Testbed.init_user_stub
,可以激活该服务以获取“伪造”用户服务。不幸的是,这似乎没有任何文档。我正在像这样激活和使用它:
import unittest
from google.appengine.ext import testbed
from google.appengine.api import users
class MyTest(unittest.TestCase):
def setUp(self):
self.testbed = testbed.Testbed()
self.testbed.activate()
self.testbed.init_user_stub()
def testUser(self):
u = users.get_current_user()
self.assertNotEqual(u, None)
问题是我还没有找到任何方法来告诉“伪造”用户服务来认证“伪造”用户。因此,运行该测试,我(可以预测)
AssertionError: None == None
意味着假用户服务告诉我的应用程序当前用户尚未登录。我如何告诉假用户服务假装用户已登录?理想情况下,我希望能够指定假用户的昵称,电子邮件,user_id以及他们是否是管理员。似乎这是一件很普通的事情(因为您需要测试以下情况下应用程序的行为:a)没有人登录,b)用户登录,c)管理员登录),但是在谷歌搜索“
init_user_stub”几乎不返回任何内容。
注意:如果要测试上述程序,则需要将其添加到顶部:
import sys
sys.path.append('/PATH/TO/APPENGINE/SDK')
import dev_appserver
dev_appserver.fix_sys_path()
这到底部:
if __name__ == '__main__':
unittest.main()
好吧,我认为没有官方的方法可以做到这一点,但是我一直在阅读源代码,并且发现了一种“
hack”的方法,到目前为止效果很好。(通常我会担心使用未记录的行为,但这是一个测试套件,因此仅在开发服务器上有效时才有意义。)
开发服务器会根据以下三个环境变量确定当前登录的用户:
您可以os.environ
像设置任何其他环境变量一样使用它们来设置它们,它们会立即生效( 显然,这在生产服务器上将不起作用
)。但是您可以将它们与测试床的user_stub一起使用,并且当您停用测试床时,它们将被重置(您应该在上执行此操作tearDown
,以便为每个测试用例获得全新的环境)。
由于设置环境变量有点笨拙,因此我编写了一些包装器函数来打包它们:
import os
def setCurrentUser(email, user_id, is_admin=False):
os.environ['USER_EMAIL'] = email or ''
os.environ['USER_ID'] = user_id or ''
os.environ['USER_IS_ADMIN'] = '1' if is_admin else '0'
def logoutCurrentUser():
setCurrentUser(None, None)
问题内容: 有没有一种简单的方法可以在模拟器内部模拟低内存?我有兴趣执行类似于此帖子的资源清理 问题答案: 从外壳调用命令。 这会将当前内存限制设置为10000 Kb,这样以后从此Shell调用的所有应用程序将无法访问更多内存。
问题内容: 我正在使用felixge的客户端。我没有使用ORM。 我正在用Vows进行测试,并希望能够模拟我的数据库(可能使用Sinon)。由于除之外我本身还没有DAL ,因此我不确定如何执行此操作。我的模型大多是带有许多吸气剂的简单CRUD。 关于如何实现此目标的任何想法? 问题答案: 使用sinon,您可以在整个模块上放置一个模拟或存根。例如,假设模块具有一个功能: ,是您期望的输入。是您期望
问题内容: 我正在使用felixge的客户端。我没有使用ORM。 我正在用Vows进行测试,并且希望能够使用Sinon来模拟我的数据库。由于除之外我本身还没有DAL ,因此我不确定如何执行此操作。我的模型大多是带有很多吸气剂的简单CRUD。 关于如何做到这一点的任何想法? 问题答案: 使用sinon,您可以在整个模块上放置一个模拟或存根。例如,假设模块具有一个功能: ,是您期望的输入。是您期望的输
问题内容: 我有与请求对象或用户对象进行交互的Django代码。例如: 如果要使用django python shell进行测试或在单元测试中进行测试,您将在其中传递什么?这里只是一个User对象即可,但是对模拟请求对象的需求也经常出现。 对于外壳或单元测试: 您如何嘲笑用户? 您如何模拟请求? 问题答案: 对于请求,我将使用Django随附的RequestFactory。 对于用户,我将按照@o
我正在创建一个通过EWS在Office 365 (Exchange online)中管理会议的应用程序。该应用程序应使用专用(服务)帐户,这将模拟组织者的帐户,并创建会议请求。该应用程序现在可以工作了,但我不确定在Office 365中创建服务帐户的最佳方式是什么,以及在这种情况下它需要的最低权限是什么。 目前,我在Office 365中创建了一个新用户,并在Exchange Admin中授予其<
问题内容: 上述代码的结果是: 开启。服务帐户客户ID已在GSuite中使用适当的范围进行了授权。 该服务帐户可用于普通凭据。它仅不适用于委托凭证。 我在我们的域中尝试了不同的API(作用域)和不同的用户。 我有一个同事尝试从头开始编写示例,他得到了同样的东西。 问题答案: 我认为您的问题是,在调用Calendar API 之前,您没有对凭据进行授权,但是我在自己的实现中使用了一些区别 使用以下导