셀레늄IDE는 레코딩된 html 테스트케이스를 자바 코드로 변환해주는 놀라운 기능을 제공합니다.
그러나 이렇게 자동으로 만들어진 JUnit3 기반 테스트케이스 코드는 약간 아쉬운 점이 있습니다.
- 테스트케이스 실행전 먼저 셀레늄 RC 서버를 별도로 띄워놓아야 한다.
- 셀레늄IDE에서 제공하는 clickAndWait와 같은 xxxAndWait 류의 커맨드에 해당하는 메소드가 없다.
- JUnit 4 나온지가 언젠데 아직도 JUnit 3 이냐. -.-
- 하나의 테스트메소드 실행시마다 브라우저 열기/닫기를 반복하기 때문에 테스트 수행시간이 오래걸린다. (테스트케이스의 setUp과 tearDown에 브라우저를 띄우고 종료하는 코드가 있음)
다행히 누가 시킨것도 아닌데 이런 아쉬움을 극복하는 방법을 정리해서 올리신 분들이 계십니다.
먼저 http://ajesse.wordpress.com/category/selenium 사이트.
위 사이트에는 셀레늄RC서버 자동시작/종료, clickAndWait류의 메소드제공, JUnit4기반코드, 테스트케이스 단위로 브라우저를 열고닫는 등 모든 해법이 설명되어 있습니다.
테스트스위트에서는 셀레늄RC서버를 관리합니다.
-
import org.junit.AfterClass;
import org.junit.BeforeClass; -
public abstract class SeleniumTestSuite {
-
@BeforeClass
public static void setUpBeforeClass() throws Exception {
SeleniumServerControl.getInstance().startSeleniumServer();
} -
@AfterClass
public static void tearDownAfterClass() throws Exception {
SeleniumServerControl.getInstance().stopSeleniumServer();
}
}
공통 테스트케이스 클래스는 브라우저를 콘트롤하는 기능과 xxxAndWait 유틸리티 메소드를 제공합니다.
-
import org.junit.AfterClass;
import org.junit.BeforeClass; -
import com.thoughtworks.selenium.DefaultSelenium;
import com.thoughtworks.selenium.Selenium; -
public abstract class SeleniumTestCase {
-
public static final String BROWSER = "*iexploreproxy";
-
public static final int SELENIUM_SERVER_PORT = 4444;
-
public static final String PAGE_LOAD_TIMEOUT = "3000";
-
public static final String START_URL = http://myserver.com:xxxx;
-
protected static Selenium seleniumStatic;
-
protected Selenium browser = null;
-
public SeleniumTestCase() {
this.browser = seleniumStatic;
} -
@BeforeClass
public static void setUpBeforeClass() throws Exception {
seleniumStatic = new DefaultSelenium("localhost", SELENIUM_SERVER_PORT, BROWSER, START_URL);
seleniumStatic.start();
} -
@AfterClass
public static void tearDownAfterClass() throws Exception {
seleniumStatic.stop();
} -
public void submitAndWait(String formLocator) {
browser.submit(formLocator);
browser.waitForPageToLoad(PAGE_LOAD_TIMEOUT);
} -
public void clickAndWait(String elementLocator) {
browser.click(elementLocator);
browser.waitForPageToLoad(PAGE_LOAD_TIMEOUT);
} -
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을 좀더 테스트해봐야겠습니다.
이 글은 스프링노트에서 작성되었습니다.
'Build&Deploy' 카테고리의 다른 글
[Hudson] 독립적인 프로세스 띄우기 (0) | 2009.10.13 |
---|---|
[Ant] 프로퍼티 오버라이딩? (3) | 2009.10.13 |
[셀레늄] HTML 기반 테스트와 JUnit기반 테스트 간단비교 (3) | 2009.04.21 |
[셀레늄] assertAlertPresent 오류 및 대안 (0) | 2009.04.20 |
[셀레늄] verify와 assert의 차이점 (1) | 2009.04.20 |