나는 몇 달 전에 같은 질문을 던졌고, 많은 개발자와 이야기하고 많은 연구를 한 결과, 이것은 내가 알아 낸 것입니다. JavaScript를 단위 테스트하고 작은 UI 통합 테스트 세트를 작성하고 레코드 및 재생 테스트 도구를 사용하지 않아야합니다. 더 자세히 설명해 드리겠습니다.
먼저 test pyramid을 고려해보십시오. 이것은 마이크 코 (Mike Cohn)가 작성한 재미있는 비유로서 어떤 종류의 테스트를해야할지 결정하는 데 도움이됩니다. 피라미드의 하단에는 견고하고 빠른 피드백을 제공하는 단위 테스트가 있습니다. 이것들은 테스트 전략의 기초가되어야하며 따라서 피라미드의 가장 큰 부분을 차지합니다. 상단에는 UI 테스트가 있습니다. Selenium처럼 UI와 직접 상호 작용하는 테스트입니다. 이러한 테스트가 버그를 찾는 데 도움이 될 수 있지만, 더 비싸고 피드백이 매우 느립니다. 또한 사용하는 도구에 따라 매우 취약 해 지므로 실제 생산 코드를 작성하는 것보다이 테스트를 유지하는 데 더 많은 시간을 소비하게됩니다. 중간에있는 서비스 계층에는 UI가 필요없는 통합 테스트가 포함되어 있습니다. 예를 들어 Rails에서는 DOM 요소와 상호 작용하는 대신 REST 인터페이스를 직접 테스트 할 것이다.
이제 질문에 답변하십시오. 자바 프로젝트에 대한 충분한 단위 테스트를 작성함으로써 Spring Roo (Java)로 작성된 웹 애플리케이션 인 Java 프로젝트의 버그 수를 크게 줄일 수 있다는 것을 알게되었습니다. 내 응용 프로그램에는 JS에 작성된 논리가 많이 있으며 여기에서 테스트하는 것은 일종의 종류입니다. 페이지가 실제로 어떻게 보이는지 또는 애니메이션이 제대로 작동하는지 걱정하지 않습니다. 요소 클래스가 올바르게 할당되고 오류 조건이 잘 처리되면 JS에서 작성한 모듈이 예상되는 논리를 실행하는지 테스트합니다. 이 테스트에서는 Jasmine을 사용했습니다. 이것은 훌륭한 도구입니다. 그것은 배우기가 매우 쉽고 스파이라고 불리는 좋은 조롱 능력을 가지고 있습니다. Jasmine-jQuery은 jQuery를 사용하는 경우 더 뛰어난 기능을 추가합니다. 특히, HTML 코드 스 니펫 (snippet) 인 조명기를 지정할 수 있으므로 DOM을 수동으로 조롱 할 필요가 없습니다. 이 도구를 maven과 통합했으며이 테스트는 CI 전략의 일부입니다.
특히 Selenium과 같은 녹음/재생 도구를 사용하는 경우 UI 테스트에주의해야합니다. UI가 자주 바뀌므로이 테스트는 계속 파괴되므로 테스트가 실제로 실패했는지 또는 구식인지 여부를 확인하는 데 많은 시간을 할애해야합니다. 또한 단위 테스트만큼 가치를 추가하지 않습니다. 실행 환경이 통합 된 환경이 필요하기 때문에 개발 완료 후 상황을 수정하는 비용이 더 많이 소요되는 경우에만 실행하는 것이 좋습니다.
그러나 연기/회귀 테스트의 경우 UI 테스트가 매우 유용합니다. 이러한 작업을 자동화해야하는 경우 몇 가지 위험을주의해야합니다. 테스트를 작성하고 기록하지 마십시오.. 기록 된 테스트는 대개 코드에서 수행하는 모든 작은 변화에 따라 자동으로 생성되는 xpaths에 의존합니다. Cucumber는 이러한 테스트를 작성하기위한 훌륭한 프레임 워크이며 WebDriver와 함께 브라우저 상호 작용을 자동화 할 수 있습니다. 테스트에 대한 코드 생각은입니다. UI 테스트에서는 복잡한 xpath를 사용하지 않아도되므로 요소를 쉽게 찾을 수 있어야합니다. 클래스와 id 요소를 추가하면 일반적으로 빈번하지 않을 것입니다. 모든 작은 코너 케이스에 대한 테스트를 작성하지 마십시오.이 테스트는 비용이 많이 들고 쓰기가 너무 오래 걸립니다. 대부분의 기능을 탐색하는 사례에 중점을 두어야합니다. 이 수준에서 너무 많은 테스트를 작성하면 이전에 단원 테스트에서 테스트 한 것과 동일한 기능을 테스트하게됩니다 (작성한 것으로 가정).
현재 프로젝트에서 Spock과 Geb를 사용하여 UI 테스트를 작성하고 있습니다. 나는이 공구가 굉장하다는 것을 발견한다. Groovy로 작성되었습니다. Java 프로젝트에 더 적합합니다.
[지속적인 테스트 : Ruby, Rails 및 JavaScript 사용] (http://www.amazon.com/Continuous-Testing-Ruby-Rails-JavaScript/dp/1934356700)에서 좋은 조언을 얻을 수 있습니다. . 나는이 책을 6 ~ 8 개월 전에 읽었고 노드로 재스민을 사용하여 브라우저를 조롱하는 방법에 대해 많은 도움을 주었다. 불행히도 실제로 연습 할 기회가 없었습니다. – Augusto
흥미 롭군요, 고마워 할 수도 있습니다 :) –