SW 개발도구연계 Git - Selenium - Maven - Jenkins
목차 Intro Git Selenium Maven Jenkins
Intro
연계도구 분산형형상관리시스템 가벼운브랜치를활용한개발생산성향상 GitHub 등다양한웹기반저장소서비스 웹브라우저상의테스팅자동화 Selenium IDE 를통한브라우저액션녹화 다양한언어및테스팅프레임워크지원 자바기반의빌드자동화 편리한의존성관리 플러그인을통해다양한작업을빌드작업에포함가능 웹기반의지속적통합도구 작업스케줄러또는컨테이너역할 플러그인을통해다양한도구와연계 4
연계시나리오 로컬저장소의내용을바탕으로 Git 서버구성 Selenium 을통해웹애플리케이션의브라우저테스팅자동화 Maven 을 Selenium 과연계하여컴파일, 테스팅, 빌드자동화 Jenkins 를 Git 및 Maven 과연계하여지속적통합 5
실행환경 로컬 PC 서버 OS Windows 7 JDK Oracle JDK 1.7.0_71 WAS Tomcat 7.0.55 Git 2.1.1 Selenium 2.8.0 Maven 3.2.3 전제조건 OS Linux Mint 17 JDK Oracle JDK 1.7.0_67 WAS Tomcat 7.0.55 Git 2.1.3 Maven 3.2.2 Jenkins 1.580 관련도구의설치방법은각도구의활용지침참고 Git 와 Maven 은 Eclipse 등의 IDE 에플러그인이있으나, 여기서는 IDE 종속을피하고도구본연의기능을명령창에서실행 서버에 swbank 라는사용자계정준비 6
Git
목표 두가지방식으로 Git 서버저장소 (Bare Repository) 를구성한다. 서버에이미있는 Git 일반저장소를서버저장소로재구성하고, 서버저장소에서개발 PC 로 clone 서버에비어있는서버저장소를만들고, 개발 PC 에서서버저장소에 push 하여서버저장소구성 8
일반저장소를서버저장소로재구성 Github 에서서버로예제소스 clone git clone https://github.com/hanmomhanda/web-demo.git 위와같이 web-demo 저장소생성 9
일반저장소를서버저장소로재구성 git clone 을통해생성되는저장소는실제소스파일을모두가지고있는일반적인저장소 bare repository 는실제소스파일없이형상관리이력정보만을가지고있는서버전용저장소 아래명령으로일반저장소를 bare repository 로복제 git clone --bare web-demo web-demo.git 10
일반저장소를서버저장소로재구성 일반저장소내용 일반저장소에서 git status 실행 11
일반저장소를서버저장소로재구성 서버저장소내용 서버저장소에서 git status 실행 12
일반저장소를서버저장소로재구성 일반저장소삭제 서버저장소파일권한설정 git init --shared=0777 --bare 777 대신적절한모드부여 13
일반저장소를서버저장소로재구성 개발 PC 에서서버저장소 clone git clone ssh:// 사용자계정 @Git 서버호스트명 /PATH/TO/GITREPO 개발자는로컬개발 PC 에서작업후 Git 서버저장소로 Push 가능 14
구성방식 Git 서버에있던일반저장소를서버저장소로재구성 개발 PC 는서버저장소에서 clone 서버 X Git 일반저장소 Git 서버저장소 bare repo 개발자 PC Git 일반저장소 15
개발 PC 에서빈서버저장소에 push 서버에비어있는 git 서버저장소생성 git init --bare web-demo.git 16
개발 PC 에서빈서버저장소에 push 서버저장소의 log 확인 git log 비어있는저장소이므로로그가없음 개발 PC 의 Git 일반저장소의 config 파일에있는 remote url 값을비어있는서버저장소 url 로설정 개발 PC 의 git 저장소 /.git/config 파일 17
개발 PC 에서빈서버저장소에 push 개발 PC 에서비어있는서버저장소에 push git push origin master swbank 계정비밀번호입력 18
개발 PC 에서빈서버저장소에 push 서버에서서버저장소의 log 확인 git log 개발 PC 의내용으로서버저장소구성완료 19
구성방식 Git 서버에비어있는서버저장소를새로만들고 개발 PC 의 Git 일반저장소에있는내용을서버에 push 해서서버저장소구성 서버 개발자 PC Git 서버저장소새로생성 bare repo Git 일반저장소 20
Selenium
목표 Selenium IDE 로 Firefox 브라우저상에서의테스트를녹화하고, Selenium 사용을위한 <dependency> 를 pom.xml 에추가하고, Selenium IDE 에의해자동생성된테스트코드를수정하고, Firefox 이외이브라우저에대한드라이버를설치하고 JUnit 을통해브라우저테스트실행 22
Selenium IDE 설치 Selenium IDE 설치 셀레늄 IDE는 Firefox 기반의브라우저플러그인으로 브라우저상에서의사용자액션을녹화하고 여러가지언어와테스팅프레임웍에맞는소스코드생성 Firefox 에서다운로드해야함 (Firefox 플러그인 xpi 파일 ) 23
Selenium IDE 설치 Selenium IDE 설치 ( 계속 ) 24
Selenium IDE 사용 Selenium IDE 실행 녹화가자동으로실행 플러그인아이콘클릭하면 Selenium IDE 실행 25
Selenium IDE 사용 Firefox 주소창에웹애플리케이션주소입력및테스트수행 클릭 26
Selenium IDE 사용 Selenium 녹화완료 1. 녹화종료 3. 녹화내용재실행기능 ( 여러건, 한건 ) 2. 녹화내용웹애플리케이션접속검색어입력란에검색어 자바 입력검색버튼클릭검색결과중상세보기클릭상세보기화면에서책의제목클릭 27
Selenium IDE 사용 테스트소스코드내보내기 Ruby, Python, Java, C# 언어지원 RSpec, unittest, JUnit, TestNG, NUnit 등테스팅프레임워크지원 28
Selenium IDE 사용 테스트소스코드저장 src/test/java/selenium 에저장 Test*.java, *Test.java, *TestCase.java 처럼 Maven 규약에맞는이름으로저장하면 Maven 에의해테스트실행가능 29
Selenium 테스트실행 pom.xml 에 selenium 의 <dependency> 추가 30
Selenium 테스트실행 테스트소스수정 package 이름수정 selenium; 으로수정 기본은 Firefox 31
Selenium 테스트실행 테스트소스수정 url 수정 / 두개가겹치므로하나제거 32
Selenium 테스트실행 테스트소스실행 파일우클릭 > Run As > JUnit Test 로실행 33
Firefox 이외의브라우저 다른브라우저에서의테스트를위한준비 아래의링크에서브라우저별드라이버다운로드 exe 파일로서별도의설치는필요하지않음 34
Firefox 이외의브라우저 브라우저별드라이버실행파일위치를시스템속성으로지정 WebDriver 객체생성전에지정해야함 Chrome 사례 IE 사례 Safari 나 Opera 의경우도같은방식의처리필요 35
Selenium 테스트실행 테스트소스실행 파일우클릭 > Run As > JUnit Test 로실행 브라우저가자동으로실행되면서녹화된동작재수행 주의사항 2014 년 12 월기준 Firefox 는이클립스에서 JUnit 으로실행시녹화동작재수행완료후브라우저닫기에서오류발생 https://code.google.com/p/selenium/issues/detail?id=7506 낮은버전의 IE 는 JSON.parse 등이동작하지않을수있음 36
Maven
목표 한글관련문제발생을미리막을수있는 Maven 설정방법을알아보고, Selenium 과 Maven 을연계하여 mvn test 실행시 JUnit 단위테스트및 Selenium 에의한브라우저테스트도함께실행 38
한글관련메이븐설정 컴파일및테스트과정에서인코딩문제로한글관련오류가발생할수있음 pom.xml 의 <project> 의바로아래수준에아래와같이 <properties> 를추가하여인코딩을강제로 utf-8 로지정 <properties> <file.encoding>utf-8</file.encoding> <maven.compile.encoding>utf-8</maven.compile.encoding> <maven.test.compile.encoding>utf-8</maven.test.compile.encoding> <project.build.sourceencoding>utf-8</project.build.sourceencoding> <project.reporting.outputencoding>utf-8</project.reporting.outputencoding> </properties> 테스트를담당하는 sure-fire 플러그인에도인코딩지정 <project> > <build> 의바로아래에아래내용추가 <pluginmanagement> <plugins> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-surefire-plugin</artifactid> <version>2.18</version> <configuration> <argline>-dfile.encoding=utf-8</argline> </configuration> </plugin> 39
테스트실행 메이븐에서는기본적으로 src/test/java 아래에 이름이 Test*.java, *Test.java, *TestCase.java 인모든테스트파일을컴파일하고실행한다. 특정테스트를테스트실행에제외 / 포함하려면 pom.xml 에서아래와같이 sure-fire 플러그인을설정한다. <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-surefire-plugin</artifactid> <version>2.18</version> <configuration> <argline>-dfile.encoding=utf-8</argline> <excludes> <exclude>**/firefox*.java</exclude> </excludes> <includes> <include>**/chromedrivertest.java</include> <include>**/internetexplorerdrivertest.java</include> </includes> </configuration> </plugin> 40
Selenium 연계 pom.xml 파일에 selenium-java 에대한 <dependency> 를추가하면셀레늄과메이븐이연계되고 셀레늄테스트파일의위치와파일이름이메이븐의테스트파일에대한규약을준수하면 mvn test 실행시셀레늄테스트도함께수행된다. <dependency> <groupid>org.seleniumhq.selenium</groupid> <artifactid>selenium-java</artifactid> <version>2.44.0</version> <scope>test</scope> </dependency> 41
Jenkins
목표 새로운 Job 을생성하여 Git 저장소와연계하고 Maven 과연계하여테스팅을포함한빌드수행후결과확인 웹애플리케이션서버에배포및결과확인 43
Jenkins 설치 Jenkins 는웹애플리케이션서버위에서운영되는웹기반 CI 도구 홈페이지에서 war 파일을 WAS_HOME/webapps 에다운로드 44
새작업생성 화면좌측 New Item 에서새작업생성 Build a maven project 로생성 45
프로젝트개요 프로젝트이름및설명작성 46
Git 연계 앞에서구성한 Git 의서버저장소 URL 을지정 빌드할브랜치를지정 47
Maven 연계 빌드트리거방식, 빌드전작업, 메이븐 Goal 지정 빌드트리거방식을선택하지않아도 Jenkins 사이트를통해언제든지빌드가능 SNAPSHOT 이빌드될때마다빌드 원격에서 Script 로빌드 다른프로젝트빌드후빌드 주기적으로빌드 폴링으로형상관리저장소이벤트발생시빌드 48
배포설정 후처리설정을통해빌드완료후웹애플리케이션서버로의배포설정 mvn package 에의해 Jenkins 작업공간에생성된 war 파일을 WAS_HOME/webapps 로복사 49
Jenkins 작업실행 Jenkins 좌측의 Build Now 를클릭하여작업실행 파란색공은빌드성공 노란색공은빌드불안정 빨간색공은빌드실패 50
Jenkins 테스트결과확인 Test Result 를클릭하여테스트결과확인 51
Jenkins 빌드결과확인 Console Output 를클릭하여테스트결과확인 52
WAS 에배포확인 브라우저에서 WAS 에있는웹애플리케이션실행및확인 53