我设法使用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
运行测试用例时,浏览器显示,服务器启动数据库工作,创建表。但是,测试服务器无法访问在测试用例中创建的行,即使两者都使用相同的设置文件进行初始化。
我尝试在DBSession
和engine
中模仿models.py
和views.py
,这样DBSession
和Base.metadata.bind
都有同样的效果我的测试用例和视图函数中都有id()
。 (所以,根据我的理解,它们是完全相同的对象)然而,查询在测试用例中创建的行会在视图中返回[]
,并且测试失败。我在创建行后调用了DBSession.flush()
,并在DBSession
中定义models.py
,如下所示:
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
如何让测试服务器查看在测试用例代码中创建的行?
答案 0 :(得分:1)
这似乎可以解决问题:
import trasaction
transaction.commit()
但是我并不完全确定我的实施,所以我还在等待答案。此外,这种方式我必须在每个测试用例之前DBSession.drop_all
。