나는 Splinter (Selenium) 및 StoppableWSGIServer
을 사용하여 기능 테스트를 작성했습니다.Pyramid + 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
가 만들어 Configurator.make_wsgi_app
를 사용하여 : 여기 내 코드입니다.
내 FunctionalTest
을 사용하여 테스트 케이스를 실행하면 브라우저가 나타나고 서버가 데이터베이스 작동을 시작하고 테이블이 작성됩니다. 그러나 테스트 서버는 동일한 설정 파일을 사용하여 초기화 된 경우에도 테스트 사례에서 작성된 행에 액세스 할 수 없습니다.
내가 모두 DBSession
및 Base.metadata.bind
내 테스트 케이스 및 내보기 기능 모두에서 id()
바로 그가 내 models.py
및 views.py
이 방법으로 DBSession
및 engine
을 조롱 노력했다. (그럼, 내 이해, 매우 동일한 개체입니다) 그러나, 테스트 케이스에서 생성 된 행에 대한 쿼리는보기에서 []
을 반환하고 테스트가 실패합니다.
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
은 어떻게 테스트 서버는 테스트 케이스 코드에서 생성 된 행을 참조해야합니까 : 나는 행을 만들고 DBSession
이 같은 models.py
에 정의 된 후 DBSession.flush()
를 불렀다?
기능 테스트를 수행 할 때이 문제가 발생하지 않을까 걱정됩니다. 기능 테스트 웹 서버가 기본 테스트 코드와 다른 스레드에서 실행되어야하고 트랜잭션이 스레드 경계를 넘을 수 없기 때문입니다. –
데이터베이스에 따라 데이터베이스 최적화를 통해 테스트 속도를 높일 수 있습니다. –