Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

WebDriver 발표 자료

WebDriver에 대해서는 작년에 알게 되었습니다. 이번에 프론트앤드 개발자 모임에서(이부분에 대해서는 추후에 좀더 자세히 공유하도록 하겠습니다.) 발표를 하게 되어 주제에 대해서 고민을 하다가 WebDriver를 자세히 알지는 못하지만  다른 사람들은 어떻게 생각하는지 궁금하기도 하고 이런 툴이 있다 정도의 공유차원에서 발표주제로 선택했습니다.

아래가 후다닥 만들었던 발표자료입니다. PT가 영어로 된 것은 의도한 바는 아니고 Prezi가 한글을 받아들이지 않아서 별수 없이 영어로 작성한 것입니다. (내용은 아주 간단합니다. ^^)


웹드라이버는 UI테스트 툴입니다. UI개발에서 UI는 테스트하기 상당히 어려운 부분중 하나이고 특히 테스트를 자동화하기 어려운 부분이기도 합니다. UI Testing도구로는 Watij, HttpUnit, HtmlUnit, jWebUnit등이 있습니다만 그래도 가장 많이 사용하는 것은 Selenium이 아닌가 합니다.

Selenium은 오픈소스로 쉽게 설치하고 동작시킬 수 있으며 다양한 브라우저를 지원한다는 장점이 있지만 HTML형태의 마크업으로 테스트를 관리하기 때문에 테스트소스를 관리하기가 쉽지 않고 리펙토링하기도 용이치 않습니다. 더군다나 웹브라우저에서 Javascript를 구동시키는 방식으로 동작하기 때문에 웹브라우저의 보안모델(sandbox)을 넘어서는 테스트(크로스도메인이나 파일업로드 등)는 할 수 없습니다.

WebDriver는 Selenium과는 전혀 다른 형태의 접근을 하고 있습니다. Java로 작성하여 코드관리가 쉬우면서 브라우저 자체를 직접 제어하기 때문에 브라우저 보안모델을 뛰어 넘을수 있으면 OS에서 제공하는 자원을 그대로 이용할 수 있습니다.

WebDriver의 목표는 아래와 같습니다.

  • 웹테스트를 위한 잘 디자인된 표준 프로그래밍 인터페이스를 제공
  • 여러 브라우저 간에 일관성을 향상시킴
  • Selenium 1.0에서 지원하지 못하던 테스트 문제들을 기능적으로 추가함


작년 5월정도에 WebDriver를 처음 구경해 보고 이번에 다시 자료를 찾아보니 그 사이에 WebDriver의 창시자인 Simon Stewart와 Selenium의 컨트리뷰터들과 의견이 모아져서 WebDriver와 Selenium 1.0이 합쳐져 Selenium 2.0이 개발중에 있으며 현재 alpha 4까지 릴리즈 된 상태입니다. Simon Stewart는 2개의 프로젝트가 합쳐진 이유를 다음과 같이 말하고 있습니다.

왜 프로젝트를 합치는가? 부분적으로 웹드라이버는 셀레니움의 단점들(예를 들면 Javascript 샌드박스의 bypass)을 처리하고 셀레니움은 웹드라이버의 단점들(더 넓은 범위의 브라우저 지원 같은)을 처리하기 때문이고 셀레니엄 컨트리뷰터들과 나는 가장 좋은 프레임웍을 제공하는 가장 좋은 방법이라고 느끼기 때문이다.

WebDriver에서는 HTMLUnit Driver, Firefox Driver, Internet Explorer Driver, Chrome Driver, IPhone Driver, Android Driver를 제공하고 있으며(Android Driver는 현재 개발중에 있습니다.) HTMLUnit Driver는 동작이 보이지는 않는 상태에서 UI를 테스트하고 결과값 또는 페이지의 엘리먼트를 검사할 수 있습니다. 그 외의 브라우저는 실제 동작을 보면서 테스트할 수 있도록 할수 있으며 Firefox Driver로 Java 애플리케이션을 구동시키면 실제로 파이어폭스가 시작되면서 자동으로 UI테스트를 진행하게 됩니다. 테스트코드는 동일하기 때문에 Driver만 교체하면 다양한 브라우저에서 테스트를 진행할 수 있습니다. 테스트코드에 대해서는 5분 Getting Started Guide를 참고하면 확인해 보실 수 있으며 Whiteship님의 블로그에서도 정리된 내용을 확인할 수 있습니다.



관련해서 테스트한 관련 이클립스 프로젝트 소스입니다. lib안에 있는 jar파일들을 빌드패스에 추가해 주셔야 제대로 동작됩니다. Example1,2,3은 Getting Started에 있는 간단한 예제이며 demo의 Pacman은 구글사이트의 팩맨게임을 키보드로 동작시키는 테스트입니다. demo2의 WebMailTest는 live.com메일과 yahoo메일에 로그인해서 메일을 보내는 테스트이면 TestNG로 작성되어 있어서 이클립스에서 돌릴려면 플러그인을 설치한후 TestNG로 Run해야 합니다. WebMailTest는 로그인할 수 있는 계정의 이메일과 패스워드를 소스에 입력하여야 테스트가 동작하며 live.com테스트는 정상적으로 동작하지만 yahoo.com테스트는 야후의 UI가 변경된 것인지 중간에 테스트가 실패합니다.

위 demo소스는 직접 작성한 것은 아니며 SeleniumExamples에 올라와 있는 소스(1, 2)를 사용한 것입니다.(일부 수정)
2010/06/01 03:41 2010/06/01 03:41