从INI文件获取设置和配置以进行金字塔功能测试

Let*_*t4U 6 python pylons configparser pyramid

在一个真正的金字塔应用程序中,它不适用于每个文档http://docs.pylonsproject.org/projects/pyramid//en/latest/narr/testing.html:

class FunctionalTests(unittest.TestCase):
    def setUp(self):
        from myapp import main
        app = main({})
Run Code Online (Sandbox Code Playgroud)

例外:

Traceback (most recent call last):
  File "C:\projects\myapp\tests\model\task_dispatcher_integration_test.py", line 35, in setUp
    app = main({})
  File "C:\projects\myapp\myapp\__init__.py", line 207, in main
    engine = engine_from_config(settings, 'sqlalchemy.')
  File "C:\projects\myapp\ve\lib\site-packages\sqlalchemy\engine\__init__.py", line 407, in engine_from_config
    url = options.pop('url')
KeyError: 'url'
Run Code Online (Sandbox Code Playgroud)

原因很简单:传递一个空字典main,虽然看起来在运行真实应用程序(从__init__.py)时它会settings预先填充来自/的[app:main]部分的值:development.iniproduction.ini

settings {'ldap_port': '4032', 'sqlalchemy.url': 'postgresql://.....}
Run Code Online (Sandbox Code Playgroud)

是否有某种方法settings可以轻松地从.ini文件中进行功能测试?

Ant*_*ala 11

pyramid.paster.get_appsettings 是你唯一需要的东西:

from pyramid.paster import get_appsettings

settings = get_appsettings('test.ini', name='main')
app = main(settings)
Run Code Online (Sandbox Code Playgroud)

test.ini可以包含另一个.ini文件的所有设置,如下所示:

[app:main]
use = config:development.ini#main
Run Code Online (Sandbox Code Playgroud)

然后你只需要覆盖那些改变的键(我猜你想要对一个单独的DB进行测试):

[app:main]
use = config:development.ini#main
sqlalchemy.uri = postgresql://....
Run Code Online (Sandbox Code Playgroud)

  • 另请参阅下文,现在您可能需要使用 '' app = main({}, **settings) '' 代替。 (3认同)