2009-04-20 4 views
9

Selenium과 같은 통합 테스트 프레임 워크에서 데이터베이스 트랜잭션을 롤백하는 것이 가장 좋습니다.통합 (셀레늄) 테스트 후 롤백 데이터베이스

우리의 현재 상황은 다음과 같습니다. 단위 테스트 환경에서 잘 작동하는 단위 테스트가있는 .net 웹 프로젝트가 있습니다. 각 테스트는 [SetUp]에서 트랜잭션을 열고 부모 클래스를 상속합니다. [TearDown]에서 거래를 다시하십시오. 각 테스트 후에 단위 테스트 데이터베이스가 원래 상태로 복원됩니다.

그러나 통합 환경에 도달하면 상황이 바뀝니다. 우리의 지속적인 통합 서버는 커밋을 자동으로 컴파일하고 테스트 서버에 푸시하여 서버가 항상 최신 코드로 실행되도록합니다. 또한 사이트와의 사용자 상호 작용을 자동화하기 위해 Selenium 인스턴스를 설정했습니다. 셀렌 테스트는 기본적으로 기존의 Selenium 서버와 통신하고 서버에 "브라우저를 시작하고 http://testsite/TestPage.aspx으로 이동 - id 필드가 'def'인 텍스트를 'abc'로 입력합니다 - 새 페이지에 'xyz'

각 테스트는 바닐라 단위 테스트와 비슷한 방식으로 실행되지만 중요한 예외가 있습니다. 셀레늄으로 인한 모든 변경 사항은 완전히 다른 스레드/응용 프로그램에서 수행되므로 우리는 , 적어도) 시험 teardown에서 그들을 롤백 할 수 없습니다.

우리는 아직이 문제를 해결하기위한 좋은 해결책을 찾지 못했습니다. 지금 우리는 SqlCommand를 사용하여 데이터베이스를 백업하기 위해 SQL 문을 실행하는 시점에 있습니다. 테스트가 끝나면 데이터베이스를 단일 사용자로 설정하고 현재 데이터베이스를 삭제하고 데이터베이스를 복원하는 중입니다. DB에 첨부 된 응용 프로그램을 효과적으로 없애고 다시 응용 프로그램을 다시 초기화해야하기 때문에 이전 복사본이 이상적이지 않습니다.

이 문제가 이전에 해결 되었습니까? 어떤 충고도 굉장합니다.

감사합니다.

답변

3

모든 테스트를 수행하기 전에 드롭/작성 테이블 스크립트를 실행하고 있습니다. 이것은 매우 빠르며 이전 테스트에서 남은 것이 없음을 보증합니다.

추 신 : 우리는이 스크립트를 즉시 생성하고 메모리의 Sqlite에 대한 테스트를 실행하는 NHibernate를 사용하고 있습니다. 이것은 속도입니다. 그러나 SqlServer로 전환하면 여전히 매우 빠릅니다.

+0

감사합니다. Stefan, 이것은 최상의 솔루션 인 것 같습니다. 테이블을 자르고 다시로드하는 것입니다. 모든 테스트가 끝난 후 설비는 실제로 그 * 세금이 부과되지 않으며 잘 작동하는 것처럼 보입니다. 다시 한번 감사드립니다. – matt

+1

이 작업을 롤백 할 수 없으므로 oracle에서 잘릴 수 있습니다. 스크립트는 우리 상황에서는 쉽고, 스크립트는 이미 사용 가능하며, 다른 것을 유지할 필요가 없습니다. –

+0

이 스크립트는 모든 테스트 방법이나 테스트 사례보다 먼저 실행됩니까? 모든 테스트 방법을 가정합니다 .... 또한이 스크립트는 어떻게 실행됩니까? 백엔드에 서비스 API가 있습니까? – HDave

3

힘든 문제이며 솔루션은 일반적으로 모든 앱마다 고유합니다. 주요 프레임 워크가 "권장 접근 방식"을 채택 할 때까지 이것은 계속 고통을 줄 것입니다.

내 권장 사항 : 앱을 시작할 때이 사용법을 계획하십시오. DB가 앱 아래에서 재설정 된 후에 정리하는 API를 포함합니다 (예 : 캐시 재설정).