【问题标题】:Running tests in Google App Engine package?在 Google App Engine 包中运行测试?
【发布时间】:2013-07-25 13:38:53
【问题描述】:

我有一个关于 Python 导入模块和在包中创建对象的方式的问题,我在 Google App Engine 上使用 Flask,但我认为这个问题更普遍。

我的应用具有以下结构:

app/
   application/
       __init__.py
       flaskr.py
       models.py
       mainConfig.py
       etc...
   tests/
       tests.py
       configtest.py
   apptest.py
   run.py

我正在使用 Google App Engine 启动器,并且大部分时间都可以正常工作。当我想运行应用程序时,我只需使用 dev_appserver.py。 Appserver 需要我的应用程序的路径作为参数,当它获取它时,它会从谷歌应用程序引擎文件夹中导入内容并执行我的应用程序。我对此很满意。

我遇到的问题与我的测试有关,最重要的是我遇到了测试在运行时加载其配置的方式。我有单独的测试配置,我不希望他们使用 mainConfig.py,他们应该使用 configTests.py。不幸的是,在我每次运行测试时,测试都使用默认的应用程序配置,而不是它们自己的特定选项——例如,它们将数据插入应用程序数据库,而不是测试它们在配置中硬编码的数据库。

我通过 apptest.py 运行测试,文件相当简单,看起来像这样:

#!/usr/bin/python
import optparse
import sys
import unittest2

USAGE = """%prog SDK_PATH TEST_PATH
Run unit tests for App Engine apps.

SDK_PATH    Path to the SDK installation
TEST_PATH   Path to package containing test modules"""


def main(sdk_path, test_path):
    sys.path.insert(0, sdk_path)
    import dev_appserver
    dev_appserver.fix_sys_path()
    suite = unittest2.loader.TestLoader().discover(test_path)
    unittest2.TextTestRunner(verbosity=2).run(suite)

if __name__ == '__main__':
    SDK_PATH = u"pathToGoogle\\Google\\google_appengine"   
    TEST_PATH = u"pathtoapp\\app\\tests\\" 
    main(SDK_PATH, TEST_PATH)

我正在尝试解决这个问题一段时间,在我的应用程序目录中移动测试,在我的测试 setUp 方法中编辑代码,但是我的摆弄毫无意义,因为我真的不明白发生了什么在这。

我知道 app 对象是在应用程序文件夹中的 init 中创建的,它从那里获取其设置。我可能应该提到,应用程序文件夹中的文件中硬编码的配置中没有任何内容,所有文件都通过简单地使用 app.config["DATABASE"] 加载数据库的名称(config 是一个类似字典的对象,在应用程序中随处可用)。 tests.py 中设置 app.test_client 的主线如下:

from application import app

class FlaskrTestCase(unittest.TestCase):
    def setUp(self):
        app.config.from_object('configtest')
        self.app = app.test_client()

这里发生了什么,如何解决?我应该怎么做才能强制 tests.py 从他们的文件夹中获取配置,而不是从应用程序文件夹中获取配置?

【问题讨论】:

    标签: python google-app-engine unit-testing flask


    【解决方案1】:

    我认为要解决此问题,您应该将 __init__.py 文件添加到测试文件夹以使其成为模块并将 app.config.from_object('configtest') 更改为 app.config.from_object('tests.configtest')

    【讨论】:

    • 感谢您的帮助,我会尝试看看是否能解决问题。
    • 不,不起作用。仍然从应用文件夹中的 init 加载配置。我只会在烧瓶 irc 频道问这个问题,也许他们会帮助我。
    猜你喜欢
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    相关资源
    最近更新 更多