2016-10-10 38 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

根據您的數據庫上,你可以很可能實現一些特定數據庫的優化,以加快測試。 –