7

previous question과는 대조적으로 필자는 요구 사항을 제시하려고합니다. 자동화 된 테스트, 바람직하게는 C#을 사용, 비주얼 스튜디오에 기록을 작성하는기능/통합 테스트 및 데이터베이스 롤백을 자동화하는 방법

  • 능력 :

    나는 다음에 딱 맞는 몇 가지 프레임 워크/방법론/"일"을 찾기 위해 노력하고있다.
  • 테스트는 사용자가하는 것처럼 웹 브라우저를 구동하고 SUT와 상호 작용해야합니다.
  • 테스트는 DB에서 테스트 시나리오를 설정할 수 있어야합니다.
  • 테스트는 사용자 상호 작용이 예상되는 효과를 DB에 가지고 있다고 주장 할 수 있어야합니다.
  • 테스트가 완료되면 DB에서 수행 한 모든 변경 사항을 롤백 할 수 있어야합니다.

내 첫 번째 시도는 셀레늄 (그리고 그 전에 Watin)를 구동하기 위해 NUnit과 테스트를 사용했지만, 셀레늄 기반 브라우저 변경을 롤백하여 TransactionScope를 사용하는 동안 나는 약간의 문제 (위의 링크를 확인을) 직면 DB에서 했어.

"현실 세계"에서 이와 비슷한 작업을 한 사람이 있습니까? Google을 통해 몇 가지 참조 문헌을 찾았지만이를 구현하는 방법에 대한 구체적인 예를 찾을 수 없었습니다. 만약 내가 단위 테스트를하고 있다면 아무런 문제가 없을 것입니다. 이 경우 TransactionScope로 충분할 것입니다.

편집 : R. Harvey는 내 상황과 거의 동일한 this 질문을 지적했습니다.

그러나 그 질문은 단지 거의 동일합니다. 내 응용 프로그램은 서비스 세트의 일부이며, 모두 동일한 데이터베이스 테이블 세트에 액세스합니다. 필요한 테스트 데이터의 양은 drop/create-scripts의 효율적인 사용을 허용하지 않으므로 이에 대한 대안이 있습니까?

우리는 SQL Server 2005를 사용하고 있으며 데이터베이스 매직에는 능숙하지 않으므로 drop/create 이외의 SQL 스크립팅을 사용하는 방법이 있다면 옵션이 될 수 있습니다.

편집 2 : 답변 몇 가지 추가 머리를 긁적을 바탕으로

, 우리는 개발자를위한 경량 데이터베이스에 갈 것이다는 통합 - 및 기능 테스트를 단위 - 수행 할 수 있습니다. 이를 통해 우리는 SQL 스크립트를 사용하여 테스트를 설정하고 해체 할 수 있습니다.

+0

도움이 될 수도 있습니다 : http://stackoverflow.com/questions/768944/rollback-database-after-integration-selenium-tests –

+0

예, 셀레늄 자체에 문제가 없습니다. 훌륭한 도구가 될 것 같습니다! 변경 사항을 롤백하는 데 문제가 있습니다. 셀레늄으로 구동되는 broser가 db로 이동합니다. – juarola

+0

오, 이런, 어떻게 그리울 수 있겠 어. 이 글을 게시하기 전에 광범위한 검색을 시도했지만이 질문의 시나리오는 거의 복제본입니다. 자신의 상황과 차별화하기 위해 질문에 하나의 포인트를 추가하겠습니다 ... – juarola

답변

7

트랜잭션에서 변경 한 내용은 해당 트랜잭션 내에서만 볼 수 있습니다. 또한 가능한 경우 트랜잭션 범위에서 테스트를 래핑하면 테스트가 매우 중요한 측면 (트랜잭션)에서 실제와 다르게 작동하게됩니다.

모든 테스트 스위트 전에 복원하는 데이터베이스 이미지를 사용하는 것이 훨씬 좋습니다. 스위트가 완료되고 검증이 끝나면 테스트 데이터베이스를 삭제합니다. 다음 번 실행에서는 제품군을 설정하는 동안 테스트 할 준비가 된 원시 상태로 저장된 이미지에서 데이터베이스가 다시 작성됩니다. 더 나은 방법은 데이터베이스를 처음부터 배포하고 스위트 설치 중에 해당 스크립트를 실행하는 스크립트를 작성하는 것입니다.

Btw는 모든 테스트를 수행하기 전에 초기 상태로 복원 할 수 없습니다. 긴 개별 테스트 설정 및 정리 단계가 더 일반적으로 가능하지 않습니다.더 많은 테스트를 추가하면 테스트간에 데이터베이스를 테스트 준비 상태로 복원하는 데 소요되는 시간이 관리하기 어려워집니다. 수백 개의 테스트를 거친 스위트는 매우 일반적이며 수만 번의 테스트를 통해 전체 테스트를 실행하면 테스트를 위해 데이터베이스를 복원하는 데 단지 몇 시간이 소요될 것입니다. 독립적으로 실행할 수 있도록 개별 테스트를 설계하십시오. 테스트 N은 테스트 N-1이 실패한 경우에도 유효한 결과를 산출해야합니다.

또 다른 고려해야 할 사항은 실패 조사입니다. 의미있는 정보 에 대해 조사 할 수있는 상태로 실패한 테스트를 실행하여 후속 테스트를 실행하고 유효한 결과를 생성하고자 할 것입니다. 때로는 이러한 요구 사항들이 서로 모순이 될 수 있지만, 고려해야 할 사항들이 있습니다.

+0

통찰력, 특히 실패 조사에 대한 부분을 가져 주셔서 감사합니다. 내가 처음에 생각한 것이 실제적인 해결책이 아니라는 것에 동의하는 경향이 있기 때문에 나는 이것을 대답으로 표시 할 것입니다. – juarola

+0

오래 전부터 확실하게 접근 방법을 선택했지만, 실패한 테스트를 항상 재현하고 디버거를 사용하여 단계별로 테스트 할 수 있어야합니다. 그래서 나는 데이터베이스 상태를 유지하는 문제를 만들지 않을 것이다. –

7

데이터베이스를 양호한 상태로 복원하는 데 필요한 데이터의 양이 스크립트 삭제/작성을 금지하고 개발자 또는 SQL 2005의 엔터프라이즈 버전에서 테스트를 실행중인 경우 creating a database snapshot 상태 및 각 테스트 전에 reverting to it. 이것은 전체 복원보다 상당히 빠르지 만 수백 개의 테스트가있는 경우 시간이 너무 많이 걸릴 수 있습니다.

+0

답장을 보내 주셔서 감사합니다! 이것이 우리 부서의 표준 실습입니다. 내 목표는 개발자가 코드를 qa로 보내기 전에 사용할 수있는 가벼운 대안을 찾는 것이 었습니다. 우리는 개발을 위해 신속하게 테스트 할 수있는 충분한 데이터를 가질 수 있도록 데이터베이스의 "개발"컨텐트를 찾아야한다고 생각합니다. – juarola