2016-10-10 37 views
1

(基于硒)的功能测试。这里是我的代码:使用Configurator.make_wsgi_app访问测试数据库中为我已成功地创建使用分裂(硒)和<code>StoppableWSGIServer</code>功能测试金字塔+ SQLAlchemy的应用

... 

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

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

我试图嘲弄DBSessionengine在我models.pyviews.py和这样既DBSessionBase.metadata.bind在我的测试案例和我的看法功能都非常相同的id()。 (所以,我的理解,是非常相同的对象)然而,查询的测试用例创建的行返回视图[]和测试失败。

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

如何使测试服务器看到测试用例代码创建的行数:我已经创建了行和DBSessionmodels.py像这样定义之后调用DBSession.flush()

回答

1

这似乎这样的伎俩:

import trasaction 
transaction.commit() 

但是我不能绝对肯定我的实现,所以我仍然在等待答案。另外,这种方式我要DBSession.drop_all每个测试用例之前。

+0

恐怕是没有办法解决这个做功能测试时。因为功能测试Web服务器必须在与主测试代码不同的线程中运行,并且事务不能跨越线程边界。 –

+0

根据您的数据库上,你可以很可能实现一些特定数据库的优化,以加快测试。 –