메인 컨텐츠로 가기

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

Sahi로 웹 애플리케이션 테스트 자동화

Gang Li, 소프트웨어 엔지니어 멤버, IBM
Gang Li
Gang Li는 현재 IBM CDL에서 근무하고 있으며, 자동화 테스트의 기초를 마련하는 작업에 초점을 맞추면서 IBM Initiate 제품의 품질 보증을 책임지고 있다.

요약:  웹 애플리케이션의 자동화된 테스트를 위한 상용 도구와 오픈 소스 프레임워크는 많이 있다. 그 중에서도, 웹 애플리케이션 테스트를 자동화하기 위한 도구인 Sahi가 인기를 얻고 있다. Sahi는 여러 브라우저 간의 기록 및 재생을 허용하는 오픈 소스 도구입니다. Sahi는 테스트 스크립트를 쓰기 위한 다양한 언어 드라이버를 제공하고, Ajax 및 매우 동적인 웹 애플리케이션을 지원한다. 이 기사에서는 샘플 애플리케이션과 테스트 사례를 이용해 Sahi에 대해 살펴봅니다. Junit에 대한 스크립트를 형식화하고 Apache Ant로 테스트하는 방법을 배워보자.

기사 게재일:  2011 년 9 월 27 일
난이도: 중급 원문:  보기 PDF:  A4 and Letter (137KB | 12 pages)Get Adobe® Reader®
페이지뷰:  1526 회
의견:  


소개

QTP, RFT(Rational Functional Tester), Selenium 및 Webdrive는 웹 애플리케이션의 자동화된 테스트를 위한 수많은 상용 도구와 오픈 소스 프레임워크의 몇 가지 예에 불과하다. 이 기사에서는 자동화된 테스트의 영역에서 인기를 얻고 있는 Sahi라는 도구에 대해 알아본다. Sahi는 여러 브라우저 간의 기록 및 재생을 위한 강력한 기능, 테스트 스크립트를 쓰기 위한 다양한 언어 드라이버(Java, Ruby), Ajax 및 매우 동적인 웹 애플리케이션을 위한 지원을 제공하는 오픈 소스 도구이다. Sahi는 https 및 NTLM 인증도 지원한다. 그림 1에서는 Sahi가 시뮬레이션된 사용자 조작에 적합한 이유를 보여준다.


그림 1. 시뮬레이션된 사용자 조작
사용자 요청을 실제 애플리케이션으로 전달하고 응답을 받는 프록시 서버로 작동하는 Sahi

Sahi 정보

Sahi에는 다음과 같은 여러 가지 강력한 기능이 있다.

Sahi 제어기(IDE)
여러 브라우저에 걸쳐 작동하고 Sahi 또는 Java 형식의 두 가지 모드에서 스크립트를 기록한다.

강력한 오브젝트 식별
HTML 구조와는 무관하다. nearin method와 같은 Sahi의 직관적 API는 페이지가 약간만 변경되어도 브라우저 요소를 찾는 데 도움이 될 수 있으므로, (이해하기 어려울 수 있는) XPath의 요구사항이 제거된다.

암시적 대기
AJAX 및 페이지 로드에 대해서도 대기 구현 문제를 다룰 필요가 없다. 테스터가 애플리케이션의 내부 정보를 알 필요가 없다.

Sahi를 이용한 테스트

이 기사의 나머지 부분에서는 샘플 애플리케이션을 살펴보면서 Sahi를 사용하여 테스트하는 방법을 보여준다. 따라서 실습할 수 있는 샘플 애플리케이션과 테스트 사례를 다운로드할 수 있다.

설치 및 구성

Sahi를 설치하고 구성하려면 다음을 수행한다.

  1. 최신 빌드(참고자료 참조)를 다운로드하고 파일의 압축을 푼다. Sahi에는 Java 1.5 이상이 필요하다.
  2. Sahi의 프록시 서버를 시작한다. 시작 스크립트는 <sahi_root>\userdata\bin에 있다.
    • Windows: start_dashboard.bat
    • Linux: start_dashboad.sh
    그림 2에 표시된 것처럼, 브라우저 아이콘을 선택하여 사용하려는 브라우저를 시작할 수 있다.

    그림 2. Sahi 대시보드
    Sahi 대시보드: 이 대시보드로 구성을 수정할 수 있음

    이 예제의 경우, 브라우저 구성에 대해 걱정할 필요가 없다. 다른 방법으로 Sahi에서 브라우저를 시작할 수 있는 GUI 도구를 제공하기도 한다. start_sahi.bat/start_sahi.sh를 실행하여 Sahi를 시작한 다음, 브라우저 아이콘을 클릭하여 프록시 서버와 브라우저 프로세스를 시작한다.
  3. Ant와 같은 빌드 도구의 도움을 받아 자동 실행하는 데 필요한 start_sahi.bat/start_sahi.sh를 입력한다.

    참고: IE(Internet Explorer)의 경우 Sahi의 프록시를 사용하려면 브라우저를 수동으로 구성해야 한다. 또는 Sahi에서 제공하는 도구를 사용하여 Sahi 프록시 서버를 시작하면서 브라우저의 프록시를 설정할 수 있다. 프록시 호스트와 포트는 localhost:9999이다. (<sahi_root>\config\sahi.properties를 통해 포트를 수정할 수 있다.)

Java 형식으로 테스트 스크립트 기록

Sahi는 Sahi와 Java의 두 가지 스크립트 형식을 기본 제공한다. <sahi_root>\config\sahi.properties에서 기본 옵션인 Sahi를 수정할 수 있다. Sahi 형식은 Sahi Java 스크립트 엔진 내부에서만 작동하는 Java 스크립트 같은 형식이다. 이런 스크립트는 대형 테스트 프로젝트를 위한 다른 테스트 도구 및 프레임워크와 손쉽게 통합할 수 있기 때문에, 이 기사의 예제에서는 더욱 일반적인 Java 형식을 사용한다. Java 형식에는 Junit 및 TestNG와 같은 도구와 통합될 수 있는 공통 Java 코드 스니펫이 포함된다.

간단한 테스트를 실행하려면 다음을 수행한다.

  1. 테스트할 웹 애플리케이션을 연다. ALT 키를 누르고 페이지를 두 번 클릭한다. (데모에는 Firefox 3이 사용되었다.)
  2. 그림 3에 표시된 것처럼 Record를 선택한다.

    그림 3. 기록을 위한 Sahi 제어기
    모든 실행 내용을 기록하기 위한 Sahi 제어기의 스크린샷

    그러면 Stop 단추로 바뀐다.
  3. 웹 애플리케이션에서 몇 가지 조작을 수행한 다음, Stop을 선택한다. 그림 4에 표시된 것처럼, 애플리케이션에서 실행한 모든 단계가 기록된다.

    그림 4. 제어기에 의해 기록된 스크립트
    스크립트를 기록하는 Sahi 제어기의 스크린샷

    실행한 조작에서 기록 중인 동안 원한다면 몇몇 어설션을 삽입할 수 있다. 또한, 도구에서 삽입을 위한 몇 가지 옵션이 제공되지만, 수동으로 추가하는 것이 좋다.

Junit과의 통합

단위 테스트 프레임워크인 JUnit은 테스트를 바탕으로 한 개발을 설정하는 데 매우 중요하다. 많은 경우, 편리성과 보고를 위해 Junit 형식의 테스트 스크립트를 작성할 수 있다. 이전 예제에서는 Java 형식으로 테스트 스크립트를 기록했다.

위 스크립트를 Junit 스타일로 형식화하려면 Eclipse에서 Java 프로젝트를 작성한 다음, <sahi_root>\lib에 있는 junit4 library 및 sahi.jar를 추가한다. Junit4 형식 테스트 스크립트를 작성할 때, Sahi 환경에 필요한 몇 가지 변수를 초기화해야 한다. 이 기사의 예제에서는 이 클래스를 확장하여 다른 모든 테스트 사례를 실행할 수 있도록 BaseTestCase.java를 확장한다.

demo4sahi 클래스는 BaseTestCase 클래스를 확장하여 Sahi 프록시와 관련된 모든 초기화 태스크를 구현한 후, 다음 두 가지 사항을 확인한다.

  • 이메일 형식이 올바른 경우 OK가 표시된다.
  • 이메일 형식이 틀린 경우 Error가 표시된다.

목록 1은 Junit4 형식으로 된 전형적인 테스트 스크립트를 나타낸 것이다.


리스트 1. Junit4 형식의 테스트 스크립트
			
public class test4demo extends BaseTestCase {

    @Before
    public void setUp() {
        login();
    }
 
    @After
    public void tearDown() {
        logout();
    }
   
    @Test
    public void testDemo1() {
        browser.textbox("email").setValue("demo for sahi");
        browser.submit("Submit").click();
        assertTrue(browser.label("error").exists());
    }
   
    @Test
    public void testDemo2() {
        browser.textbox("email").setValue("demo@sahi.com");
        browser.submit("Submit").click();
        assertTrue(browser.label("ok").exists());
    }
}

테스트 스크립트를 자동으로 실행하려면 Sahi 런타임에 대한 모든 초기화 및 종료 프로세스를 구현해야 한다. 표 1에서 보는 바와 같이, 4가지의 기본적인 초기화 파트가 있다.


표 1. Sahi 환경 초기화
BaseTestCase의 메소드설명
createConn()SAHI_BASE_PATH, USER_DATA_PATH 및 브라우저 유형을 초기화하고 브라우저 프로세스를 작성한다.
delConn()브라우저 프로세스를 정리하고 시스템을 최초 상태로 되돌린다.
setIEProxy()테스트를 실행하기 전에 IE 프록시를 설정한다. 이 메소드는 IE에 대해서만 사용한다.
login(), logout() 및 상위 레벨 유틸리티에 공통적으로 사용되는 다른 메소드모든 스크립트에 대한 공용 메소드


BaseTestCase는 모든 테스트 스크립트의 상위 클래스로서, 브라우저를 열어 사용자의 조작을 시뮬레이션할 수 있도록 다른 모든 메소드에 앞서 런타임 중에 createConn 메소드를 호출한다. 목록 2에는 BaseTestCase에 대한 코드 중 일부가 표시되어 있다.


리스트 2. BaseTestCase
			
public class BaseTestCase {
	protected Browser browser;
	protected Proxy proxy;
	protected boolean isProxyInSameProcess = false;
	protected String browserType = "firefox";
	@Before
	public void createConn() throws Exception {
		Configuration.initJava("f://Program/sahi", "f://Program/sahi/userdata/");
		if (isProxyInSameProcess) {
			proxy = new Proxy();
			proxy.start(true);
		}
		browser = new Browser(this.browserType);
		browser.open();
	}
	@After
	public void delConn() throws Exception {
		browser.setSpeed(100);
		browser.close();
		if (isProxyInSameProcess) {
			proxy.stop();
		}
	}
	public void login(){
		browser.navigateTo("http://localhost:8080/demo");
		browser.textbox("username").setValue("ligang");
		browser.password("password").setValue("welcome");
		browser.submit("Login").click();
	}
		/**
	 * Setting IE's proxy during testing environment initialization
	 * 
	 * @param enable
	 */
	public void setIEProxy(boolean enable) {
		try {
			Runtime.getRuntime().exec(
			new String[] {
				SetEnv.sahiBasePath
					+ "\\tools\\toggle_IE_proxy.exe",
				(enable ? "enable" : "disable") });
			Thread.sleep(1000);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
    ......
}


Ant를 이용한 테스트

공통 빌드 도구인 Apache Ant는 특히 Java 기반 프로젝트에 사용된다. Sahi 프레임워크에는 build.xml 파일에서 사용할 수 있는 Ant용 JAR 파일이 포함된다. 하지만, 기본 제공되는 이 컴포넌트는 Sahi의 구조에 적합하게 설계되었다. Junit을 사용하여 전체 인프라를 설정하고 싶을 수도 있겠지만, 이런 방법은 유연성이 떨어지거나 그다지 좋은 방법이 아니다. 예제 프로젝트의 회귀 테스트를 위해, 다음을 포함하는 build.xml이 작성되었다.

  • 목록 3과 4는 Sahi 프록시 서버를 시작하고 중지하는 방법을 나타낸 것이다.

    리스트 3. Sahi 프록시 서버 시작
    			
    <target name="start_sahiserver">
    	<echo message="starting sahi server" />
    		<java fork="true" spawn="true" classname="net.sf.sahi.Proxy">
    			<classpath>
    				<fileset dir="${sahi.dir}">
    					<include name="**/*.jar" />       
    				</fileset>
    			</classpath>
                <arg value="${sahihome.dir}" />
                <arg value="${sahiuser.dir}" />
            </java>
            <antcall target="proxyon" />
    </target>
    



    리스트 4. Sahi 프록시 서버 중지
    			
    <target name="stop_sahiserver">
    	<echo message="going to stop Sahi server" />
    	<sahi stop="true" sahihost="localhost" sahiport="9999" /v
    	<antcall target="proxyoff" />
    </target>
    

  • 목록 5는 IE 프록시 설정을 열고 닫는 방법을 나타낸 것이다.

    리스트 5. IE 프록시 열기/닫기
    			
    <target name="proxyon">
    	<exec executable="${sahihome.dir}/tools/toggle_IE_proxy.exe">
    		<arg value="enable" />
    	</exec>
    </target>
    <target name="proxyoff">
    	<exec executable="${sahihome.dir}/tools/toggle_IE_proxy.exe">
    		<arg value="disable" />
    	</exec>
    </target>
    

  • 보고.

Eclipse IDE에서의 손쉬운 디버깅을 위해 별도로 조치를 실행할 수 있다.


고급 주제

웹 애플리케이션 테스트에서는 오브젝트를 효과적으로 식별하는 것이 매우 중요하다. 다른 많은 테스트 도구와 달리, Sahi에는 웹 페이지에 있는 오브젝트를 찾기 위한 몇 가지 강력한 API가 있다. 표 2 에 몇 가지 예를 제시한다. 전체 목록을 포함한 온라인 문서를 볼 수 있는 링크는 참고자료 섹션을 참조한다.


표 2. 특수한 찾기 메소드
기능메소드샘플 코드
정규식 지원거의 모든 요소 IDbrowser.link(/Link to .*/)
DOM 관계를 기반으로 한 찾기near, in browser.button("delete").in(browser.cell("item1")).click()

browser.button("delete").near(browser.cell("item1")).click()

위치 관계를 기반으로 한 찾기underbrowser.button("delete").under(browser.cell("item1"))


요약

이 기사에서는 웹 애플리케이션 테스트를 자동화하기 위한 도구인 Sahi에 대해 살펴보았다. Sahi는 여러 브라우저 간의 기록 및 재생을 허용하는 오픈 소스 도구이다. 이 기사에서는 테스트 스크립트를 쓰기 위한 다양한 언어 드라이버에 대해 학습했다. 샘플 애플리케이션과 테스트 사례를 통해 Junit에 대한 스크립트를 형식화하고 Apache Ant로 테스트하는 방법을 보여주었다. Sahi의 고급 API에 대해서도 개술했다.



다운로드 하십시오

설명이름크기다운로드 방식
Sample web applicationwebapp4sahi.zip7KBHTTP
A Sahi test exampleDemo4SahiTest.zip287KBHTTP

다운로드 방식에 대한 정보


참고자료

교육

  • Sahi: 웹 애플리케이션 테스트의 자동화를 위한 비즈니스용 도구인 Sahi에 대한 모든 것을 알아보자. 각종 문서, 튜토리얼 및 지원 포럼에 액세스할 수 있다.

  • Sahi: Sahi에 대한 추가 정보를 읽어보자.

  • developerWorks 웹 개발 영역: 다양한 웹 기반 솔루션을 다루고 있는 기사를 찾아보자.

  • developerWorks technical events and webcasts: developerWorks 기술 행사 및 웹 캐스트를 통해 최신 정보를 얻을 수 있다.

제품 및 기술

  • Sahi: Sahi를 다운로드할 수 있는 웹 페이지이다.

  • IBM 시험판 소프트웨어: 다운로드하거나 DVD로 제공받을 수 있는 IBM 시험판 소프트웨어를 사용하여 후속 개발 프로젝트를 구현해 보자.

토론

필자소개

Gang Li

Gang Li는 현재 IBM CDL에서 근무하고 있으며, 자동화 테스트의 기초를 마련하는 작업에 초점을 맞추면서 IBM Initiate 제품의 품질 보증을 책임지고 있다.

잘못된 도움말 신고

부정사용 신고

감사합니다. 이 항목은 운영자가 관심을 표시했습니다.


잘못된 도움말 신고

부정사용 신고

제출실패 신고. 나중에 다시 실행해주세요.


디벨로퍼웍스 로그인


IBM ID가 필요하세요?
IBM ID를 잊으셨습니까?


비밀번호를 잊으셨습니까?
비밀번호 변경

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

화면상에 보여지는 닉네임을 정하세요.

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

3개의 &이나 대쉬를 포함해주시고 31글자내로 제한해주세요.


developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


아티클 순위

의견

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=20
Zone=웹 개발
ArticleID=761619
ArticleTitle=Sahi로 웹 애플리케이션 테스트 자동화
publish-date=09272011

태그

Help
검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오.

태그를 더 많이 보거나 적게 보기 위해 슬라이더 막대를 사용하십시오.

인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다.

내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.

검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오. 인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다. 내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.