在(基于Selenium)功能测试中访问Pyramid + sqlalchemy应用程序中的测试数据库

时间:2016-10-10 14:17:22

标签: python selenium sqlalchemy pyramid functional-testing

我设法使用Splinter(Selenium)和StoppableWSGIServer创建功能测试。这是我的代码:

...

engine = engine_from_config(settings, prefix='sqlalchemy.')
DBSession.configure(bind=engine)
Base.metadata.create_all(engine)

...

class FunctionalTest(...):
    ...

    def setUp(self):
        ...
        self.server = http.StopableWSGIServer.create(app)
        self.server.wait()
        self.browser = splinter.Browser("chrome")

    def tearDown(self):
        ...
        self.browser.quit()
        self.server.shutdown()

使用app创建Configurator.make_wsgi_app

使用我的FunctionalTest运行测试用例时,浏览器显示,服务器启动数据库工作,创建表。但是,测试服务器无法访问在测试用例中创建的行,即使两者都使用相同的设置文件进行初始化。

我尝试在DBSessionengine中模仿models.pyviews.py,这样DBSessionBase.metadata.bind都有同样的效果我的测试用例和视图函数中都有id()。 (所以,根据我的理解,它们是完全相同的对象)然而,查询在测试用例中创建的行会在视图中返回[],并且测试失败。我在创建行后调用了DBSession.flush(),并在DBSession中定义models.py,如下所示:

DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))

如何让测试服务器查看在测试用例代码中创建的行?

1 个答案:

答案 0 :(得分:1)

这似乎可以解决问题:

import trasaction
transaction.commit()

但是我并不完全确定我的实施,所以我还在等待答案。此外,这种方式我必须在每个测试用例之前DBSession.drop_all