* 출처 : http://wiki.gurubee.net/pages/viewpage.action?pageId=6259762
Added by
김정식, last edited by
김정식 on 11월 03, 2010
Selenium을 이용한 UI 테스트
1. Selenium 개요
1.1 Selenium이란
1.2 Selenium Components
1.2.1 Selenium IDE
- Selenium Test Case를 만들고 실행하기 위한 통합 개발 환경
- 파이어폭스 확장 플러그인으로 제공되며, Selenium Test Case를 쉽게 작성할 수 있도록 도와준다
- 레코딩이 쉽고, 재생을 지원한다.
- 브라우저 내의 사용자의 행동을 저장하여 다양한 언어(C#, Java, Perl, PHP, Python, Ruby 등)로 변환 가능 하다.
- 참고 : http://seleniumhq.org/projects/ide/
1.2.2 Selenium Core
1.2.3 Selenium RC(Remote Control)
1.2.4 Selenium GRID
2. Selenium IDE의 사용
2.1 Selenium IDE 설치
2.1.1 다운로드 및 설치
2.1.2 설치 확인
- "Fire Fox > 도구" 메뉴 에서 설치 확인
2.1.3 Selenium IDE Toolbar
- 1. Speed Control : 테스트 케이스의 속도 재생 속도 조절
- 2, Run All : Test Suite를 재생
- 3. Run : Test Case를 재생
- 4. Pause/Resume : 테스트 케이스의 정지와 리스타트
- 5. Step : 클릭 시 한번에 한 라인씩 수행
- 6. TestRunner Mode : 브라우저 내에서 테스트 실행 및 결과를 HTML Table 형식으로 볼 수 있음 (Firefox 3.6에서 잘 안 됨)
- 8. Record : 유저 브라우저의 액션을 레코딩 시작/정지 버튼
2.2 Selenium IDE 테스팅 예제
- Selenium IDE에서 Recording 후 저장된 테스트코드를 수행하면 된다.
2.2.1 Recording
- ① Firefox를 열어서 도구 => Selenium IDE를 선택해서 IDE를 활성화 시킨다
- ② Test하기 원하는 사이트로 이동 한다. 또는 Base URL 입럭
- ③ 빨강색 Record버튼을 누른다.
- ④ Firefox창에서 원하는 액션을 수행하면 해당내용이 자동으로 저장된다.
- ⑤ 원하는 테스트가 끝났으면 다시 빨강색 Record버튼을 눌러서 종료시킨다.
2.2.2 저장된 테스트코드 수행
- ① 테스트 수행속도를 설정한다.
- ② Play 버튼을 눌러서 테스트를 수행한다.
2.2.3 테스트를 자바코드로 전환
- Selenium IDE에서 테스트 작성 후 IDE 메뉴에서 Options => Format 으로 원하는 언어를 선택하면 된다.
- 아래는 JUnit4 기반의 테스트 코드 예제이다.
- 테스트 코드의 "Untitled" 와 "change-this-to-the-site-you-are-testing"를 수정하면 된다.
package com.example.tests;
import com.thoughtworks.selenium.*;
import java.util.regex.Pattern;
public class Untitled extends SeleneseTestCase {
public void setUp() throws Exception {
setUp("http:, "*chrome");
}
public void testUntitled() throws Exception {
selenium.open("/home/index.nhn");
selenium.type("query", "리쌍");
selenium.click(");
selenium.waitForPageToLoad("30000");
verifyTrue(selenium.isTextPresent("개리"));
}
}
2.2.4 간단 데모
3. Selenium RC의 사용
3.1 다운로드 및 설치
3.1 Selenium RC 예제
3.1.1 Selenium RC 서버 Start
- java -jar selenium-remote-control-1.0.3\selenium-server-1.0.3\selenium-server.jar
3.1.2 JUnit 테스트
- 아래는 Selenium IDE로 저장한 자바코드를 Selenium RC를 이용해 테스트하는 예제이다.
import com.thoughtworks.selenium.SeleneseTestCase;
public class SimpleRCTest extends SeleneseTestCase {
public void setUp() throws Exception {
setUp("http:, "*firefox");
}
public void testSearch() throws Exception {
selenium.open("/home/index.nhn");
selenium.type("query", "리쌍");
selenium.click(");
selenium.waitForPageToLoad("30000");
verifyTrue(selenium.isTextPresent("개리"));
}
}
- Selenium관련 maven 빌드 설정
-- repository 설정
<repositories>
<repository>
<id>selenium-repository</id>
<url>http: </repository>
</repositories>
-- dependency 설정
-- 아래서 WebDriver 간단설명 예정으로 WebDriver 포함 버전으로 설정했음.
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium</artifactId>
<version>2.0a4</version>
<scope>provided</scope>
</dependency>
</dependencies>
3.1.3 간단 데모
4. WebDriver를 이용한 UI 테스트
4.1 WebDriver 개요
4.1.1 WebDriver란?
- 단순한 API들로 구성된 개발자 중심의 웹 UI 테스트 자동화 도구 이다.
- 다양한 브라우저(FireFox, Internet Explorer, Safari, Chrome...)에서 일관성 있는 테스트를 할 수 있다.
- Selenium 1.0에서 지원하지 못하던 테스트 기능 문제를 개선하였다.
- multiple frames, multiple browser windows, popups, and alerts, Page navigation, Drag-and-drop, AJAX-based UI elements등 테스트 가능하다
- 현재 Selenium과 통합되어 2.0a 버전이 개발되고 있다.
4.1.2 WebDriver 장점
- Driver 변경만으로 다양한 환경에서 테스트 수행이 가능 하다.
- 표준 API 지원을 통해 개발자 UI 테스트에 최적화 되어 있다.
- Real browser 외에도 HtmlUnitDriver 지원을 통한 빠른 테스트 피드백이 가능 하다.
- 현재 Selenium과 연계를 통해 장단점 상호 보완 중이다.
4.1.3 WebDriver 단점
- 개발자 중심의 UI 테스트 도구인 관계로 초기 학습 시간 및 비용에 대한 부담이 발생한다.
- 시나리오에 기인한 테스트케이스의 작성이 까다롭고 불명확할 수 있다.
4.2 WebDriver 예제
4.2.1 간단 예제
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
public class Example {
public static void main(String[] args) {
WebDriver driver = new HtmlUnitDriver();
driver.get("http:);
WebElement element = driver.findElement(By.name("q"));
element.sendKeys("Cheese!");
element.submit();
System.out.println("Page title is: " + driver.getTitle());
}
}
문서정보