ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 웹사이트 테스트 자동화
    기타/웹 2016. 7. 10. 19:11
    728x90

     요즘 python/django나 자바스크립트 등 웹 기술들을 공부해보고 있는대, 문득 든 생각이 '테스트는 어떻게 하지?' 였다. 회사에서야, 패치를 올리면, 자동으로 빌드해서, 기본적인 테스트를 돌려서 패치의 품질을 확인한다. 하지만, 웹사이트는? REST API는? 뭐로 테스트하는지 궁금해서 알아 보았다 이글의 제목에는 '웹사이트'라고 언급했지만, 대부분의 Android/iOS 앱들도 rest API를 사용해서, 서버와 통신한다. 이 경우에도 유용하게 사용될 것 같았다.

     이 때 사용할 수 있는 툴이 Selenium 이다. Selenium을 사용한 예제 코드는 github에 올려 누었다. 여기서 참고바란다.

    https://github.com/skysign/public/tree/master/WebsiteTest

    • Selenium
      • 웹사이트및 rest API의 테스트 목적으로 만들어진 오픈소스 툴이다
      • 브라우저를 실행하여, 웹사이트를 테스트 한다
      • 브라우저는 테스트 케이스 대로, 클릭, 텍스트 입력 등을 진행한다
      • 파이어폭스에 Selenium IDE를 확장기능으로 설치하여, 사용자의 마우스/키보드 클릭을 테스트 케이스로 만들 수 있다.
    • Selenium WebDriver
      • 테스트 케이스를 실제 브라우저로 보내주는 역할을 한다.
      • 드라이버는 각 브라우저 별로 존재 하며, 각 브라우저별 Driver 도 따로 존재한다.
      • Work Flow
        • test case(java) -> Selenium WebDriver(java) -> BrowserDriver(external process) -> Browser(클릭, 키보드 입력 발생함)
        • Selenium WebDriver와 각 브라우저별 Driver 가 호환성 문제가 많음으로, 호환되는 버전을 잘 맞춰서 사용해야 한다
     보통의 경우에 테스트를 진행한다면, 여러개의 테스트를 묶어서 한번에 실행해야 하며, 테스트 케이스별 리포트도 작성하여야 한다. 이러한 작업을 편리하게 하기 위해서, Maven과 Maven의 플러그인들을 사용한다.
    • Maven 의 장점
      • C/C++코드를 빌드 할 때 사용하는 Makefile 과 같은 역할을 하다
      • 자바 코드를 빌드한 뒤, 자동으로 테스트 케이스를 실행할 수 있다
      • 사용되는 라이브러리들을 적어 두면, 자동으로 라이브러리를 다운받아서 빌드를 해준다
    Maven실행 후, 실제 테스트가 이뤄질 때 까지, 아래와 같은 flow로 콜을 하며, 테스트 케이스가 실행된다

    Maven : pom.xml 파일에서 플러그인을 읽어서 실행함
    maven-surefire-plugin : maven플러그인의 하나로, 테스트 케이스 전체의 실행결과를 html형식의 리포트로 출력해준다.
    TestNG(JUnit을 사용할 수도 있음) : 테스트 케이스를 실행해주는 자바 라이브러리
    Selenium Webdriver : 브라우저를 실행하여 테스트를 진행함

    ( * github에 전체 코드가 올라가 있으니, 참고하세요.
    https://github.com/skysign/public/tree/master/WebsiteTest )

    1. Maven을 사용하려면, pom.xml 파일 부터 작성해야 합니다

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>SkysignTistoryCom</groupId>
      <artifactId>SkysignTistoryCom</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>jar</packaging>
    	<properties>
    		<project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
    		<project.reporting.outputEncoding>utf-8</project.reporting.outputEncoding>
    	</properties>
      <dependencies>
        <dependency>
          <groupId>org.testng</groupId>
          <artifactId>testng</artifactId>
          <version>6.8.8</version>
        </dependency>
        <dependency>
          <groupId>org.seleniumhq.selenium</groupId>
          <artifactId>selenium-java</artifactId>
          <version>2.40.0</version>
        </dependency>
      </dependencies>
    
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.17</version>
            <configuration>
              <suiteXmlFiles>
                <suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
              </suiteXmlFiles>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </project>
    • project.build.sourceEncoding OS의 인코딩을 따라가기 때문에, 영문이여도, non unicode 설정을 default로 Korean으로 해두면, 윈도우 커맨드라인이 cp949로 되며, 결과적으로 메이븐의 인코딩도 cp949를 사용함으로, utf-8로 변경합니다
    • project.reporting.outputEncoding 같은 이유로, utf-8
    • org.seleniumhq.selenium 2.40 으로 설치합니다, 최신버전 설치하면, RemoteDriver가 기본으로 동작하더라구요. (사실 이렇게 길게는 첨 써봐서, 디버깅은 여기까지만 하려고, 최신버전으로 안올렸다는.. ㅋㅋ)
    • maven-surefire-plugin 빌드가 완료 되기전에, 빌드의 테스트 리포트를 만들어주는 플러그인으로, 이 플러그인이 TestNG를 실행하비다
    • <suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile> 이 xml 파일에, 테스트할 테스트 케이스 들을 추가해 주면, mvn test 명령을 실행했을 때, 실행됩니다

    2. maven-surefire-plugin에서 실행할 TestNG 테스트 케이스를 testng.xml 파일에 작성합니다
    
    
    
      
        
          
        
      
    
    
    
    • SkysignTistoryCom.SkysignTistoryComTestng 여기서, SkysignTistoryCom이 패키지 이름이고, SkysignTistoryComTestng 테스트 케이스의 클래스 이름입니다

    mvn test 실행해서, 브라우저가 자동으로 동작하는 모습을 확인하세요 :D
    Selenium이 동작하는 모습을 보여드리기 위해서, 유튜브 링크를 첨부합니다
    4분 15초 부터 보세요


    * 주의사함
    'mvn test' 를 실행하기전에 브라우저 드라이버 실행파일( IE의 경우 IEDriverServer.exe)가 PATH에 추가되어 있어야, Selenium WebDriver(java)가 실행할 때, 브라우저 드라이버 실해파일을 실행할 수 있다.

    • Reference
      • http://www.seleniumhq.org/docs/
      • https://www.seleniumeasy.com
      • https://github.com/Ardesco/Selenium-Maven-Template
      • maven이 만들어주는 selenium template : 템플릿 1062번



    728x90
Designed by Tistory.