Child pages
  • Selenium과 Cucumber를 활용해 웹 테스트 자동화하기 1
Skip to end of metadata
Go to start of metadata
내 관심사 중의 하나는 테스트 자동화를 통해 사람이 하는 수동 테스트를 최대한 줄이는 것이다. 2년 동안 개발하고 아키에이지 게임의 웹 서비스에도 테스트 자동화를 시도하고 싶었지만 우선순위에 밀려 계속 미루고 있었다. QA 업무를 담당하는 친구에게 기본적인 사용 방법을 가르쳐 주고 자동화된 테스트를 만들라고 했지만 소프트웨어 개발에 경험이 많지 않다보니 혼자서 문제점을 찾아 해결하고 개선하는데 한계가 있다 보니 자동화된 테스트 환경을 구축하기 힘들었다.

그렇게 2년이 넘게 흘러왔다. 하지만 더 이상 미룰 수 있는 상태가 아니라 기본적인 테스트 환경을 구축하고 자동화된 테스트 환경을 조금씩 만들어 가는 시도를 하고 있다. 몇 일 동안 자동화된 테스트 환경을 만들기 위해 고민한 내용을 공유하려 한다.

처음 웹에 대한 테스트를 자동화하기 위해 선택한 도구는 Selenium이었다. Selenium이 2.0으로 버전업하면서 WebDriver와 통합도 한 상태여서 선택했다. 1.0에서는 크로스 도메인 이슈가 있어서 사용하기 열나 짜증 났다. 때려치고 싶어서 WebDriver, Watij등 다른 놈들도 기웃 거렸지만 그닥 만족스러운 놈을 찾지 못했다. 그래서 Selenium 2.0이 WebDriver와 통합한다길래 Selenium을 쓰게 되었다.

먼저 Selenium과 Page Object Design Pattern 활용해 웹 테스트 자동화를 시도했다. Selenium을 활용해 브라우저를 띄우는데 좀 시간이 걸렸지만 어렵지 않게 단위 테스트 코드 만들 수 있었다. 그렇게 조금씩 코드 추가하면서 달려오다가 Cucumber라는 놈을 알게 되었다. Cucumber는 여기 저기 테스트 관련 문서들 보다가 자꾸 등장하길래 BDD(Behavior Driven Development)를 학습하기 위한 목적으로 조금씩 학습했다. 그러다가 Cucumber와 Selenium이 통합된 문서들을 보면서 이 둘을 통합해 활용하면 좋겠다는 생각이 들어 적용했다.

Selenium 관련해서는 먼저 Selenium IDE를 활용해 테스트를 해보면 "아 이런 놈이구나!"하고 감이 올 것이다. Selenium IDE를 통해 생성할 수 있는 자바 소스 코드를 활용하면 Junit 코드에 넣어 웹 테스트를 자동화할 수 있다.

다음으로 Cucumber가 뭐하는 놈인지 잘 모르겠다고 생각하면 먼저 Cucumber-Jvm with Cucumber-Java + Cucumber-JUnit Example 문서를 활용해 실습해 보기 바란다. Cucumber-JVM Example Continued – Refactoring 문서는 앞의 예제 소스를 리팩토링해서 한 단계 발전시킨 내용이다. 문서로 보기 보다는 동작하는 모습을 직접 보면서 이런 저런 시도를 해보면 금방 감을 잡을 수 있다.
Selenium과 Cucumber에 대한 기본적인 개념을 잡았다면 다음은 두 도구를 통합하는 시도를 해보자. 제일 먼저 Testing a web application with Selenium 2 문서를 통해 Selenium과 Cucumber에 통합하는 방법을 알 수 있다. 이 문서를 보면 Page Object Design Pattern을 어떻게 구현하는 것인지를 예제를 통해 확인할 수 있다.  Testing a web application with Selenium 2 문서 정말 잘 정리되어 있다. Selenium, Cucumber, Page Object Design Pattern과 더불어 각 소스별 디렉토리 구조까지 개발자들이 궁금해할 부분을 정리해 놓고 있다.
이 외에도 INTEGRATION TESTS WITH CUCUMBER-JVM, SELENIUM AND MAVEN 문서도 참고 했다. 만약 개발 환경 세팅하는 방법을 단계적으로 알고 싶다면 BDD framework to test Selenium test cases using Cucumber jvm, Junit, Selenium Server, Selenium web driver, Maven, Eclipse, Ruby mine 문서도 참고할 만하다.
내가 몇 일 동안 Selenium과 Cucumber를 통합하기 위한 과정과 참고 문서를 공유했다. 사실 이 문서들을 찾고 각 문서의 예제를 실행하는데는 짬짬이 시간을 내면 하루, 이틀이면 가능하다. 이 놈들이 뭐하는 놈인지 감을 잡는 것은 쉽다. 하지만 이 놈들을 실무 프로젝트에 적용하려면 그 때부터 불편함이 보이고, 막히는 부분이 발생한다. 이런 부분들을 해결할 수 있는 방법이 있느냐가 이 도구들을 계속 사용할 것인지를 결정하는데 중요한 결정 요소가 된다. 
이 글에서는 이 정도로 마치고 다음 글에서는 실무 프로젝트에서 적용하면서 발생한 이슈들과 이 이슈들을 어떻게 해결했는지를 공유하도록 하겠다. 역시나 책이나 문서의 예제들만 보면 정말 좋은 도구이고 바로 적용할 수 있을 듯하다. 하지만 현실은 그렇게 녹녹하지 않다.