셀레늄IDE는 레코딩된 html 테스트케이스를 자바 코드로 변환해주는 놀라운 기능을 제공합니다.

그러나 이렇게 자동으로 만들어진 JUnit3 기반 테스트케이스 코드는 약간 아쉬운 점이 있습니다.

  • 테스트케이스 실행전 먼저 셀레늄 RC 서버를 별도로 띄워놓아야 한다.
  • 셀레늄IDE에서 제공하는 clickAndWait와 같은 xxxAndWait 류의 커맨드에 해당하는 메소드가 없다.
  • JUnit 4 나온지가 언젠데 아직도 JUnit 3 이냐. -.-
  • 하나의 테스트메소드 실행시마다 브라우저 열기/닫기를 반복하기 때문에 테스트 수행시간이 오래걸린다. (테스트케이스의 setUp과 tearDown에 브라우저를 띄우고 종료하는 코드가 있음)

다행히 누가 시킨것도 아닌데 이런 아쉬움을 극복하는 방법을 정리해서 올리신 분들이 계십니다.

먼저 http://ajesse.wordpress.com/category/selenium 사이트.

위 사이트에는 셀레늄RC서버 자동시작/종료, clickAndWait류의 메소드제공, JUnit4기반코드, 테스트케이스 단위로 브라우저를 열고닫는 등 모든 해법이 설명되어 있습니다.

테스트스위트에서는 셀레늄RC서버를 관리합니다.

  1. import org.junit.AfterClass;
    import org.junit.BeforeClass;

  2. public abstract class SeleniumTestSuite {

  3.     @BeforeClass
        public static void setUpBeforeClass() throws Exception {
            SeleniumServerControl.getInstance().startSeleniumServer();
        }

  4.     @AfterClass
        public static void tearDownAfterClass() throws Exception {
            SeleniumServerControl.getInstance().stopSeleniumServer();
        }
    }

 

공통 테스트케이스 클래스는 브라우저를 콘트롤하는 기능과 xxxAndWait 유틸리티 메소드를 제공합니다.

  1. import org.junit.AfterClass;
    import org.junit.BeforeClass;

  2. import com.thoughtworks.selenium.DefaultSelenium;
    import com.thoughtworks.selenium.Selenium;

  3. public abstract class SeleniumTestCase {

  4.     public static final String BROWSER = "*iexploreproxy";

  5.     public static final int SELENIUM_SERVER_PORT = 4444;

  6.     public static final String PAGE_LOAD_TIMEOUT = "3000";

  7.     public static final String START_URL = http://myserver.com:xxxx;

  8.     protected static Selenium seleniumStatic;

  9.     protected Selenium browser = null;

  10.     public SeleniumTestCase() {
            this.browser = seleniumStatic;
        }

  11.     @BeforeClass
        public static void setUpBeforeClass() throws Exception {
            seleniumStatic = new DefaultSelenium("localhost", SELENIUM_SERVER_PORT, BROWSER, START_URL);
            seleniumStatic.start();
        }

  12.     @AfterClass
        public static void tearDownAfterClass() throws Exception {
            seleniumStatic.stop();
        }

  13.     public void submitAndWait(String formLocator) {
            browser.submit(formLocator);
            browser.waitForPageToLoad(PAGE_LOAD_TIMEOUT);
        }

  14.     public void clickAndWait(String elementLocator) {
            browser.click(elementLocator);
            browser.waitForPageToLoad(PAGE_LOAD_TIMEOUT);
        }

  15.     public void openAndWait(String url) {
            browser.open(url);
            browser.waitForPageToLoad(PAGE_LOAD_TIMEOUT);
        }

추가로 JUnit4 사용환경에서 테스트 실패시 자동으로 화면을 캡쳐하는 방법에 대한 힌트가 http://rockhoppertech.com/blogs/archives/45 여기에 언급되어 있습니다. JUnit4에 org.junit.runner.notification.RunListener 클래스가 있네요.

 

ps. 이 글을 정리하면서 Simplium 이라는 것을 발견했습니다. Simple test framework for Selenium의 약자이군요. 사이트에 소개된 코드를 대략 보니 일단 맘에 듭니다. 시간나면 Simplium을 좀더 테스트해봐야겠습니다.

이 글은 스프링노트에서 작성되었습니다.

Posted by 에코지오
,