Selenium 을 이용한 Web 어플리케이션 테스트 자동화(2) – IDE 와 Webdriver기능 맛보기

앞서 저희는 Selenium 이 무엇인가와 Selenium IDE 를 한번 사용해 보았습니다. 이번 시간에는 Selenium IDE 를 조금더 사용해보고, WebDriver 를 이용해서 테스트 케이스를 작성하는 방법에대해서 알아 보도록 하겠습니다.

그럼 Selenium IDE의 제어 버튼에 대해서 조금더 알아보고 본격적으로 JAVA 를 이용해서 Webdriver 를 사용하는 방법에 대해서 알아보겠습니다.

제어버튼

많이 사용하는 제어 버튼에 대해서 설명해드리겠습니다.

20151016_Selenium-IDE-UI-ControlMenu

 

  1. Speed Control : 테스트 케이스의 속도 재생 속도 조절
  2. Run All : Test Suite를 재생
  3. Run : 1개의 Test Case 를 재생Test Case를 재생
  4. Pause/Resume : 테스트 케이스의 정지와 리스타트
  5. Step : 클릭 시 한번에 한 라인씩 수행
  6. Record : 유저 브라우저의 액션을 레코딩 시작/정지 버튼

Test Case 저장하기

Test Case를 작성한후에 저장하기 를 통해서 Test Case 를 저장가능합니다.

저장하는 방법은 파일>Save Test Case 로 저장하면 Html 파일 형식으로 저장됩니다.

이전 편에서 사용한 계정생성한 Test Case 의 경우 내용은 아래와 같습니다.

 

실제 파일을 실행해보면 테이블 형식으로 표현되어 Selenium IDE에서 보는 내용을 그대로 보실수 있습니다.

20151016_Selenium-IDE-SaveTestcase

WebDriver 사용하기

그러면 WebDriver 를 사용하기 위한 셋팅을 준비해보겠습니다.

Java를 이용해서 WebDriver 를 사용하도록 하겠습니다. Eclipse 를 이용해서 Maven 프로잭트 파일을 만들어 필요한 모듈들을 다운로드 받는 형식으로 WebDriver 을 이용할 수있습니다. 먼저 필요한 재료는 아래와 같습니다.

  1. Eclipse(Maven+TestNG plugin)
  2. JAVA JDK 설치
  3. Webdriver

Eclipse 설치 및 JDK 설치

Eclipse

Eclipse 는 아래 경로에서 다운받을수 있습니다.

저같은경우는 Eclipse IDE for Java EE Developers 를 선호해서 아래 파일을 받아서 설치해서 사용합니다.

20151016_Eclipse_JaveEE

Java

Java 의 경우는 아래에서 다운받을수 있습니다.

JAVA HOME Path 설정을 해줍니다. 윈도우 의 경우는 아래와 같이 설정하시면 됩니다.

20151016_Java-Home

TestNG Plugin

WebDriver를 실행시 TestNG를 통해서 실행을위해 TestNG Plugin 을 설치해줍니다.(TestNG 가 싫으시면 Junit이나 다른것들을 사용하셔도됩니다.)

플러그인은 Help>Eclipse Marketplace 에서 다운받으실수 있습니다.

20151016_Eclipse-TestNG

Maven Project 생성 및 설정

일관된 디렉토리 구조와 빌드 프로세스를 유지하고, Dependency Libaray 관리와 다양한 플러그인등을쉽게 이용하기 위해 Maven 프로젝트를 생성해 Webdriver 를 이용해보도록 하겠습니다.

그럼 새로운 Maven 프로젝트를 생성합니다. 아래 그림과 같은 흐름으로 진행하시면 됩니다.

20151016_Eclipse-newmavenproject

pom.xml dependency 설정

WebDriver jar 및 기타 필요한 파일들을 이용하기 위해 메이븐 pom.xml에 dependency를 추가해 라이브러리를 다운받아 습니다. 필요한 dependency 설정을 합니다.

  • selenium-java
  • selenium-remote-driver
  • selenium-chrome, firefox,ie driver
  • TestNG
  • slf4j

관련 설정은 아래와 같습니다. 설정을 완료한 pom.xml 파일입니다.

 

WebDriver 맛보기

자이제 WebDriver를 사용할 수 있을것 같습니다. 먼저 src/test/java 에 새로운 class 를 생성해봅니다. Class name은 CreateUser로 하겠습니다.

20151016_new-class-for-Createuser

우리는 먼저 Selenium IDE 를 이용해서 계정생성하기 Test Case 를 생성했습니다.

Selenium IDE는 Export 기능을 제공합니다. 그래서 저는 간단한 테스트를 만드는 것은 이 기능을 이용해서 사용하기 도합니다.

여러분들도 한번 시도해보시기 바랍니다. 그럼 어떻게 하는지 한번 해보겠습니다.

먼저 Junit 으로 Export 한후에 TestNG 형식으로 변경하도록 하겠습니다.

Export 기능은 ‘파일 > Export TestCase’ 에서 이용할 수 있습니다.

20151016_Export-to-junit-from-IDE

Export 는 CreateUser.java 로 하겠습니다.

자동으로 CreateUser.java 파일이 생성됩니다.

Junit 으로 되어있는 형식으로 Export 됩니다.

저는 TestNG를 이용하기로 했으니 TestNG에 맞게 약간 변경합니다.

  • @Before –> @BeforeMethod
  • @Aftger –>@AfterMethod
  • fail –> Assert.Faii

기타 불필효한 Code를 제거 하면 최종적으로 아래와같은 Code 가 나옵니다.

이제 정상적으로 수행되는지 Test 해보겠습니다. Eclipse 에서 TestNG를 이용해서 실행하면 계정생성하는 스크립트가 실행됩니다.

20151016_run-TestNG

어떤가요? 기존에 만든 Test Case 를 재사용가능하고 간단히 테스트도 수행되는것을 보셨을것입니다.

이번에 Selenium IDE 의 일부 기능 그리고 Selenium IDE에서 생성한 Test Case를 이용해서 WebDriver Test Code 를 생성해서 Test하는것을 해보았습니다.

다음번에는 조금더 WebDriver의 기능들을 이용해보도록 하겠습니다.

감사합니다.

Fabric을 이용해 다수의 리눅스 서버에 whatap 한꺼번에 설치하기

현실적으로 존재하는지는 재처두고 한명의 시스템 관리자가 서버를 몇 백대 단위로 관리한다고 가정해봅시다. 또 일상적으로 서버를 추가하고 업그레이드 한다고 생각하면 각각의 서버에 직접 접속하는 일은 상상하기 힘듭니다. 서버의 라이프 싸이클에서 발생하는 거의 모든 일들을 자동화 해야합니다. 조직별로 또 시스템 관리자 별로 각각의 노하우나 적용하고 있는 솔루션이 있을 것입니다. 하지만 당신이 시스템 관리 경험이 별로 없는 개발자라면 많은 서버에 접속할 수 있는 쉽고 강력한 툴을 원할것입니다. 필자도 개발자로써 프로그램 코드를 대량의 서버에 배포하고 테스트할때 여러가지 도구를 시도해 보고 장단점을 느껴봤습니다. 특이 정교한 제어가 가능한 솔루션일 수록 쉽게 쓰기가 부담스러운 측면이 있었습니다. 최소한의 installation footprint로 최대한의 일을 최단시간에 한다고 생각해 보았을때 필자는 python으로 생활비를 마련하고 있으므로 파이썬으로 제작된 fabric – http://www.fabfile.org이 매력적이었습니다. 10대의 리눅스 서버에 whatap agent를 10분내에 설치하는 것을 목표로 Fabric을 테스트해보겠습니다.

1. Fabric이란

Fabric은 ssh 연결을 통해 할 수 있는 일을 자동화 할 수 있는 도구입니다. 개발과 시스템 관리에서 필요한 대부분의 일을 스크립트 언어인 파이썬으로 구현하여 복잡한 반복작업이나 설정을 대량의 서버에 적용할때 대상 서버에 추가 설치되는 agent없이 ssh 접속만을 사용하여 처리하는 도구입니다. 라이브러리와 커맨드 라인 툴로 구성되어 간단한 작업 구현 파일만 작성하면 다운로드 받는 즉시 사용할 수 있습니다.

2. 가상 서버 생성

AWS EC2 Amazon Linux

vm 생성 위저드로 t2 instance로 5 개를 생성 합니다.

AWS EC2 Ubuntu

vm 생성 위저드로 t2 instance로 5 개를 설치 합니다.

3. fabric 설치

아래와 같이 fabric 라이브러리를 설치합니다.

 

20151015_Fabric-01

아래와 같이 추가한 서버들의 목록을 포함한 fabfile.py를 작성합니다. 아래 파일은 목록에 있는 서버들에 ssh접속을 하여 와탭 agent를 설치합니다.

설치에 필요한 whataplicensekey와 접속에 필요한 ec2 key file의 위치를 명시하고 있습니다.

env.hosts=[‘ec2-user@172.31.40.192’, ‘ec2-user@172.31.40.189’, ‘ec2-user@172.31.40.190’, ‘ec2-user@172.31.40.191’, ‘ec2-user@172.31.44.238’, ‘ubuntu@172.31.43.24’, ‘ubuntu@172.31.43.26’, ‘ubuntu@172.31.43.25’, ‘ubuntu@172.31.43.23’, ‘ubuntu@172.31.43.27’]

env.keyfilename=’/home/ec2-user/ec2/hsnamkey.pem’ whataplicensekey=’0WJDE46XXZMCKOD2AL7T’

def installwhatap(): put(‘install.sh’, ‘~/’) run(‘/bin/bash ~/install.sh %s’%(whataplicense_key))

4. 설치 스크립트 작성

아래와 같이 설치 스크립트를 작성합니다.

5. Agent설치

fabfile.py가 있는 디렉토리에서 아래와 같이 실행합니다.

20151015_Fabric-05

실행이 끝난뒤 아래와 같이 와탭 콘솔에 서버가 모두 등록된것을 확인할 수 있습니다.

20151015_Fabric-06

마치면서

클라우드 환경에서 agent설치를 편리하게 할 수 있는 방법에 대해 찾아보는 과정은 마치 수많은 골목길을 지나 원하는 목적지까지 가는것과 비슷했습니다. 같은 목적을 달성하기 위해 여러가지 방법이 존재하는것이 오히려 어려웠습니다. VM생성시부터 서버를 등록해서 사용하는 형식의 강력한 솔루션들이 많았지만 가장 설치기반 없이 작동할 수 있는 방법을 적용하여 보았습니다. 이 방법은 시스템 관리에 경험이 적은 개발자들이 개발 중 테스트와 같이 짧은 시간에 작업을 마쳐야 하는 상황에서 사용할 수 있을것 같습니다.

오픈 소스 서버 모니터링 툴 소개

서버 관리자들이 모니터링 없이 서버를 운용한다는 것은 있을 수 없는 일입니다. 서버의 중요 지표를 실시간으로 수집해 관리자가 즉각적으로 인지하도록 표시해 주는 것은 물론, 축적된 지표 데이터를 토대로 향후 발생 할 수 있는 문제를 미연에 방지할 수 있도록 도와주는 것이 모니터링이며, 이는 와탭이 추구하는 궁극적인 목표입니다.

20151011_1_whatap

[WhaTap]

[와탭이 수집하는 서버의 중요 지표]
  • 서버의 동작 상태
  • CPU, Memory, Disk, Traffic 사용량
  • 동작 중인 Process의 서버 자원 사용량
  • 파일 및 이벤트 로그의 이상 징후

이러한 와탭의 핵심 기능들은 수집된 데이터 보존 기간 제한을 제외하고 사용에 제약 없이 무료로 제공되고 있습니다.

여기 와탭 이외에 무료로 서버를 모니터링 할 수 있는 다양한 오픈 소스 모니터링 툴 중에 세계적으로 인정받는 몇 가지를 간단히 소개합니다.

Nagios

https://www.nagios.com

20151011_2_nagios

[Nagios]Nagios는 오픈 소스 컴퓨터 소프트웨어 어플리케이션으로 시스템, 네트워크 및 인프라스트럭처를 모니터링 합니다. Nagios는 서버, 스위치, 어플리케이션과 서비스에 대한 모니터링과 알림 서비스를 제공하여 각 항목의 상태에 문제가 있음을 알림으로써 그 후 발생할 수 있는 문제를 해결합니다. Nagios는 원래 리눅스에서 실행되도록 설계 되었지만 유닉스 기반의 변종 운영체제에서도 잘 동작합니다. Nagios는 Free Software Foundation이 발표한 GNU 일반 공중 사용 라이선스(GPL) 버전2의 조건에 따라 배포되는 무료 소프트웨어입니다.

Nagios 개발자들은 IT 인프라스트럭처 모니터링의 업계 표준이라고 주장하지만, 지난 몇 년간 많은 발전을 이루지는 못 했습니다. 그들의 주장은 어느 정도 타당하지만 일부에 여전히 해결되지 않는 문제가 존재합니다.

[장점]
  • 다양한 사용자 커뮤니티를 구성
  • 설치하기 쉬운 강력한 플러그인들을 다수 보유
  • 웹 프론트 엔드에서 사용하기 편리
  • 디버깅 플러그인이 단순
  • 호스트 그룹 설정이나 알림 옵션 등의 세심한 설정이 가능
  • 인터랙티브 편집 플러그인을 이용해 관리하기 쉬운 그래프를 만들 수 있음
[단점]
  • 수집된 모니터링 데이터를 그래프로 만들 수 없는 경우가 있어 다른 툴을 이용해야 하는 경우가 있음
  • 복잡한 텍스트로 구성된 설정 방식 때문에 설정에 무리가 있고 매개 변수를 자주 확인해야 함
  • 서드파티 플러그인의 경우 잘못된 문서를 제공해주는 경우가 있음
  • 직관적이지 않은 웹 인터페이스
  • 대부분의 플러그인에 구성 항목이 없어 직접 작성하는 데 시간이 소요
  • 플러그인의 모든 파라미터에 별개의 구성 항목이 필요
  • 대부분의 체크가 Nagios 서버에서 이뤄지므로 서버에 부하가 걸리는 경우가 있음
  • 모든 경고 알림이 기본적으로 설정되어 있어 적절히 설정하지 않으면 알림 스팸을 받을 수 있음

Cacti

http://www.cacti.net

20151011_3_Cacti

[Cacti]Cacti는 업계 표준 오픈 소스 데이터 로깅 도구인 RRDtool에 대한 프론트 엔드용 응용 프로그램으로 설계된, 오픈 소스 웹 기반 네트워크 모니터링 및 그래프 도구입니다. Cacti는 사용자가 소정의 간격으로 서비스를 폴링하고 그 결과 데이터를 그래프로 표시 할 수 있습니다. 일반적으로 CPU 부하 및 네트워크의 대역폭 같은 수치 데이터를 그래프로 변환합니다. 일반적인 사용은 단순 네트워크 관리 프로토콜 (SNMP)를 통해 네트워크 스위치 또는 라우터 인터페이스를 폴링하여 네트워크 트래픽을 감시하는 것입니다.
프론트 엔드는 각자의 그래프 세트를 가진 복수의 사용자를 처리 할 수 있어서 전용 서버, 가상 개인 서버 및 코로케이션을 공급하는 웹 호스팅 제공 업체가 고객들의 대역폭 통계를 확인하기 위해 사용하기도 합니다. RRDtool의 수동 구성 없이 모니터링 할 수 있는 특정 설정을 허용하여 데이터 수집 자체를 구성하는 데 사용될 수 있습니다. Cacti는 쉘 스크립트 실행을 통해 다양한 소스를 모니터링 할 수 있도록 확장 할 수 있습니다.

Cacti는 RRD에 특화된 정교한 프론트 엔드 툴입니다. 대부분의 구성은 자사의 웹 인터페이스를 통해 이뤄집니다. 사용자 인터페이스는 훌륭하지만 신뢰성이 떨어지는 부분과 유연하지 않다는 것이 단점입니다.

[장점]
  • 대부분의 기능에 아름답고 심플한 웹 인터페이스를 제공
  • 자바 스크립트를 사용한 강력한 그래프 기능
  • 시스템 권한에 대한 미세한 설정이 가능하여 사용자 별 권한 부여가 가능
  • 원하는 정보만 정확하게 볼 수 있게 자유로운 그래프가 배치가 가능
[단점]
  • 서버의 과부하 없이도 그래프가 아무 이유 없이 작동을 중지하거나 값이 누락되는 경우가 있음
  • 다수의 시스템을 설치하거나 다양한 템플릿을 설정할 때 웹 인터페이스에서 그 만큼의 많은 설정을 해야 함
  • 일부 서드파티 템플릿의 품질이 좋지 않음
  • SNMP를 제대로 처리하지 못 함
  • 지표를 수집하는 최소 주기가 5분이라서 데이터 누락 및 잘못된 결과를 얻을 수 있음
  • 지표 수집의 오류를 디버깅하는 것이 불가능에 가까움
  • 때때로 혼란스러운 웹 인터페이스
  • 임계치에 도달해도 알림이 발생하지 않는 경우가 있음
  • 디테일한 그래프 데이터를 장기간 보관할 수 없음

Zenoss

http://www.zenoss.com/

20151011_4_zenoss

[Zenoss]Zenoss(Zenoss 코어)는 Zope 서버에 기초한 애플리케이션, 서버 및 네트워크 관리용 오픈 소스 플랫폼입니다. Zenoss 코어는 시스템 관리자가 가용성, 목록 / 구성, 성능 및 이벤트를 모니터링 할 수 있는 웹 인터페이스를 제공합니다. GNU 일반 공중 사용 라이선스(GPL) 버전 2의 조건에 따라 무료로 배포되고 있습니다.

[장점]
  • 아름다운 웹 인터페이스
  • 구글 맵 등을 통해 설치된 서버의 위치를 세계 지도에서 표현하는 기능
  • 일부 매개변수를 시스템에서 자동으로 검색할 수 있음
  • 통상의 SNMP 모니터링 에서 잘 동작
  • 네이티브 WMI를 통해 윈도우를 모니터링 할 수 있음
  • 큰 팬층
[단점]
  • 웹 인터페이스가 느림
  • 실제로 무슨 일이 일어나고 있는지 알 수 없는 불투명한 작업
  • 신뢰성에 대한 의심
  • 한 개만 지원되는 대시보드
  • 설정 및 데이터가 MySQL, 내부 Zope 데이터베이스 스토리지 및 RRD 파일이 저장된 디스크의 전역에 퍼져 있음
  • 플래시 기반의 그래프들이 시스템이 연결된 상황을 표시하지만 시스템에 대한 세부 사항을 표시하지 않음
  • 제한적인 오픈 소스 버전이며, 풀 버전을 이용하려면 제품 구매가 필요

Zabbix

http://www.zabbix.com

20151011_5_zabbix

[Zabbix]Zabbix는 Alexei Vladishev에 의해 만들어진 네트워크 및 애플리케이션에 대한 엔터프라이즈 형 오픈 소스 모니터링 솔루션으로 다양한 네트워크 서비스, 서버, 네트워크 하드웨어의 상태를 감시하고 추적 할 수 있도록 설계되었습니다. Zabbix는 데이터를 저장하기 위해 MySQL, PostgreSQL, SQLite, Oracle, IBM DB2를 사용하며, 백 엔드는 C로 작성되었고, 웹 프론트 엔드는 PHP로 작성되었습니다.

Zabbix는 다양한 모니터링 옵션을 제공합니다. 간단한 검사는 모니터링 할 호스트에 소프트웨어를 설치하지 않고도 SMTP나 HTTP와 같은 표준 서비스의 가용성과 응답성을 검증하여 실행할 수 있습니다. Zabbix는 GNU 일반 공중 사용 라이선스(GPL) 버전2의 조건에 따라 배포되는 무료 소프트웨어입니다.

[장점]
  • 강력한 모니터링 기능과 그래프를 하나의 도구로 결합시킨 점
  • 알림에 대해 구성을 고도화 할 수 있음
  • 알림에 완벽하게 사용자 정의 메시지를 이용할 수 있음
  • 기본적으로 30초 마다 지표를 수집하며, 인터벌을 조정할 수 있음
  • 빠른 웹 인터페이스
  • 시스템에 대한 사용자 권한 설정으로 특정 사용자를 특정 뷰에 한정
  • 수집 된 데이터를 유연하지 못한 RRD 파일 대신 MySQL 등의 데이터베이스에 저장
  • 데이터 저장 기간을 자유롭게 구성 할 수 있으며, 데이터베이스를 백업 기능이 지원
  • 템플릿을 사용하여 검사 시간을 절약
  • 사용자 정의에 따른 다양한 그래프 지원
  • 다양한 스크린과 슬라이드 쇼를 이용하여 대시보드를 구현
  • 매우 유연한 트리거 설정
  • 쉘 스크립트를 사용하여 알림을 쉽게 스크립팅
  • Zabbix 프록시를 사용하여 원격 모니터링을 쉽게 할 수 있음
[단점]
  • 알림 설정 부분에서 다량의 임계치 설정이 필요
  • 웹 인터페이스 기능이 너무 많고 복잡
  • 맵 편집기를 이용해 설정하는 시간이 많이 소요
  • 아이템 당 하나의 값만을 리턴 받을 수 있음
  • 같은 종류의 개별 자산을 모니터링 할 때 템플릿이 적용되지 않아 일일이 트리거 설정이 필요해 번거로움
  • 모니터링 서버에서 사용할 수 있는 자산을 자동으로 검색하지 않음
  • 디버깅하기 어려움

결론

모니터링 없이 서버를 운용하는 것은 마치 ‘계기판 없는 자동차를 운행하는 것’과 같습니다. 사용자의 서버 운용 환경에 맞춰 와탭을 비롯한 다양한 모니터링 툴을 이용하여 보다 편리한 서버 관리 환경을 구축할 수 있었으면 하는 바람입니다.

Git을 실무에 활용하기 2탄

저번시간에는 모두 로컬 데이터베이스 기반으로 동작하는 git명령어들에 대해 알아 보았습니다. Git은 저장소(Repository)를 전부 복제한 복제물을 사용하기 때문에 로컬파일에 대하여 변경이 이루어지며 따라서 네트워크속도에 영향을 받지 않고 때문에 히스토리를 조회하거나 변경사항을 확인할때 리모트에 있는 서버에 접근 할 필요가 없어 그 속도 또한 매우 빠르다고 얘기 하였습니다. 자, 그렇다면 코드변경의 공유는 어떻게 이루어 지는걸까요? 오늘 Git을 실무에 활용하기 2탄에서는 다른사람들과 협업시 꼭 필요한 원격저장소와 브랜치의 개념, 충돌시 대처할 수 있는 기능에 대하여 자세히 알아 보겠습니다.

[원격저장소란]

원격저장소란 인터넷이나 네트워크 어딘가에 있는 저장소입니다. 커밋은 로컬저장소에만 업데이트 되기 때문에 로컬 데이터베이스에만 변경사항이 저장되는데요. 이를 원격저장소에 업데이트하여 로컬저장소에 커밋한 내용을 다른사람들과 공유할수 있는 곳입니다.

git remote

현재 프로젝트에 등록된 원격 저장소를 확인할 수 있습니다. 원격 저장소를 clone하면 기본값으로 origin을 볼 수 있습니다.

참고>>

git push [원격저장소 이름] [로컬 브랜치 이름]:[원격 브랜치 이름]

로컬 저장소에 커밋한 코드의 변경사항을 원격저장소로 업데이트 하여 프로젝트를 공유하고 싶을때 사용합니다. 처음 clone을 통해 원격 저장소로부터 소스를 복제하였다면 origin이라는 이름이 자동으로 생성됩니다.

참고>>

옵션을 통해 원격저장소와 로컬저장소를 지정할 수 있습니다.

git pull [원격저장소 이름] [원격 브랜치 이름]:[로컬 브랜치 이름]

원격 저장소의 최신 내용을 로컬 저장소로 반영합니다. 즉, 다른 사람이 자신의 로컬 저장소에 코드의 변경사항을 커밋하고 push를 통하여 원격저장소에 업데이트 한 내용을 자신의 로컬 저장소로 가져와 변경된 내용을 확인 할 수 있습니다. 이때 코드변경이 중복되어(사용자간 동일파일 변경시) 충돌이 생기게 되면 자동으로 머지 혹은 수동으로 머지할 수 있습니다.

참고>>

git feach

원격 저장소의 데이터를 모두 로컬로 가져오지만, 자동으로 머지하지는 않습니다.

참고>>

[브랜치]

코드를 통째로 복사하고 나서 원래 코드와는 상관없이 독립적으로 개발을 진행하기 위하여 사용합니다. Git에서 브랜치를 생성하는 것은 소스 코드를 통째로 복사 하는 것이 아닌 현재 저장소의 스냅샷을 별도로 저장해 두는 것입니다. 브랜치의 이동은 그 때 저장된 스냅샷을 이동하는 것입니다. 여기서 브랜치는 커밋사이를 이동할 수 있는 어떤 포인터 같은 것이라 하겠습니다. 지금 작업하는 로컬 브랜치는 HEAD라고하는 특수 포인터가 가리키고 있습니다. 현재 가리키고 있는 브랜치에서 파일의 생성/수정/삭제 등의 모든 코드 변경작업이 이루어 지게 됩니다.

  • 리모트 브랜치 : 원격저장소에서 생성된 브랜치.
  • 로컬 브랜치 : 로컬 저장소에서 사용하는 브랜치. 원격 저장소와 통신할 수 없다.

git branch [브랜치명]

로컬 브랜치를 생성합니다. 참고로, 원격 저장소로부터 소스를 복제하면 기본적으로 origin이라는 원격저장소와 master브랜치가 생성됩니다.

참고>>

git checkout명령어를 통해 브랜치를 이동하거나, 브랜치생성 이동을 동시에 할수 있습니다. 제가 “이동”이라고 표현했지만 실제로는 특수 포인터 “HEAD”가 해당 브랜치를 가르키고 있는 것입니다.

브랜치 옵션은 다음과 같이 사용할 수 있습니다.

[Stash]

현재 브랜치에서 워킹디렉터리에 있는 수정된 내용(로컬 저장소에 커밋되기 전)을 임시로 저장하고 싶은 경우 사용합니다. 백업용도로 많이 사용하는 기능입니다. Stash를 사용하면 변경사항을 임시로 스택에 저장해 두고 나중에 꺼내어 적용할 수 있습니다. 사용 후에는 워킹디렉터리는 처음 변경사항이 없던 상태로 보여집니다.

git stash

워킹디렉토리에서 변경된 파일들을 stash스택에 저장합니다. 기본적으로는 Tracked상태(staged상태+unstaged상태)의 파일만을 저장합니다.

참고>>

Untracked파일을 함께 스택에 저장하고 싶다면 -u옵션을 사용해보세요.

git stash list

저장한 stash목록을 확인한다.

참고>>

아래와 같이 stash목록을 확인할 수 있어요.

git stash apply

stash목록 중 가장 마지막에 저장한 내용을 워킹디렉토리에 적용합니다. 적용시에는 Staged상태를 기억하여 복원하지 않기 때문에 Staged상태를 반영하고 싶다면 –index옵션을 추가적으로 해 주어야 합니다. 또한, apply명령어는 적용만 할뿐 stash스택에서 지워지지는 않습니다.

참고>>

가장 마지막에 저장한 내용이 아닌 stash스택에 저장된 특정 인덱스 내용을 적용하는 방법은?

git stash drop

stash스택에 저장된 내용을 지우고 싶을때 사용합니다. stash@{#number}을 사용하면 원하는 stash스택 내용을 지정할수 있습니다.

참고>>

git stash pop

stash스택에 있는 내용을 적용 후 스택에서 제거해줍니다. stash@{#number}을 사용하면 원하는 stash스택 내용을 지정할수 있습니다.

참고>>

git stash clear

백업 리스트 모두 지웁니다.

git stash sava [스택에 저장할 이름]

stash 스택에 저장할때 이름을 함께 지정할수 있습니다.

[Merge]

기본 브랜치(기본 master)로 부터 기능개발을 위한 새로운 브랜치를 생성하여 작업이 완료되었다면 기본브랜치와 새로운 브랜치의 내용을 합쳐주는 작업이 필요합니다. 브랜치끼리의 작업을 합치는 방법은 두가지가 있는데요. 첫번째로 알아볼 기능은 Merge기능입니다. 먼저 Merge의 종류 2가지를 알아 봅시다.

  • fast-forward : merge할 브랜치가 가리키고 있던 커밋이 현 브랜치가 가리키는 것보다 앞으로 진행한 커밋이기 때문에 master브랜치 포인터는 최신 커밋으로 이동. 앞으로 진행한 커밋이라는 의미는 동일한 커밋히스토리를 가지고 있음을 의미한다. (현재 브랜치가 가리키는 커밋이 Merge 할 브랜치의 조상인 경우.)
  • 3-way merge: 서로다른 커밋내역을 가지고 있는 경우 (현재 브랜치가 가리키는 커밋이 Merge 할 브랜치의 조상이 아닌 경우.) 공통조상을 찾아 커밋내용을 하나로 합쳐준 후 브랜치 포인터가 합쳐진 커밋을 가르키도록 한다.

git merge [대상 브랜치명] [to브랜치명]

브랜치의 커밋내용을 합쳐줍니다.

참고>>

[Rebase]

브랜치끼리의 작업을 합치는 두번째 방법입니다. Rebase는 기본적으로 커밋들을 모아서 복사하여 내용을 합칩니다. Rebase를 하면 서로 다른 브랜치에서 작업하여도 커밋들 작업이력들의 흐름을 보기 좋게 한 줄로 만들 수 있다는 장점이 있습니다. 브랜치를 합치는 두가지 방법에서 먼저 Rebase의 경우, 브랜치의 변경사항을 순서대로 다른 브랜치에 적용하면서 합치고 Merge의 경우는 두 브랜치의 최종 결과만을 가지고 합친다는 차이점이 있습니다.

git rebase [to브랜치명] [대상 브랜치명]

새로운 기능 개발 브랜치에서의 작업을 기본 브랜치(master)로 직접 옮겨 놓으려고 할때 사용합니다. 그렇게 하면, 실제로는 두 기능을 따로따로 개발했지만, 마치 순서대로 개발한 것처럼 작업이력의 흐름을 볼 수 있습니다. 저장소의 커밋 로그와 이력을 깨끗하게 관리하고 싶을때 사용합니다.

참고>>

마치며

지금까지 실무에 활용할수 있는 Git에 대해 알아 보았습니다. 개념적인 부분보다는 실제로 많이 사용할수 있는 명령어 위주로 알아 보았는데요. 마지막으로 git의 브랜치를 활용하는 대표적인 work flow와 git명령어를 연습해 볼수 있는 사이트를 공유해 드릴게요. 개발시에 많은 도움이 되었으면 합니다.

20151010_git-work-flow

Git 연습하러 가기

Selenium 을 이용한 Web 어플리케이션 테스트 자동화(1) – What is Selenium?

오늘날 웹 기반 응용 프로그램으로 작성된 소프트웨어 응용프로그램은 Chrome, Internet Explorer, Firefox 와 같은 인터넷 브라우저에서 실행됩니다. 그리고 조직들은 점차 애자일 방법론의 일부 양식 혹은 전부를 도입하여 운영 하는 추세입니다.

애자일 방법론에서는 짧은 개발주기와, 빠른 피드백을 제공하기 위해서 테스트 자동화를 권장하고 있습니다.

테스트 자동화는 소프트웨어 팀의 테스트 프로세스의 장기 효율을 개선하기 위해 특정한 이점들을 가질수 있도록 도와줍니다.

  • 잦은 희귀테스트
  • 신속한 피드백
  • 테스트 케이스 실행의 무제한 반복과
  • 테스트 케이스의 체계적인 문서화
  • 수동테스트에서 놓친 결함 찾기

물론 여기에서 말하는 테스트 자동화는 UI tier, Middle tier, Unit tier 모두를 권장합니다.

테스트 자동화는 소프트웨어 팀의 테스트 프로세스의 장기 효율을 개선하기 위한 특정한 이점을 갖습니다.

지금 제가 말하고 자 하는 것은 개발 단에서 수행하는 Middle tier(FitNesse, Robot Framework, Cucumber), Unit tier(Junit, Nunit, 등의 xUnit family)가 아닌 Ui Tier 단에서 수행되는 자동화 테스트를 말하고자 합니다.

전통적으로 UI Tier 에서 자동화 하면 Mercury/HP의 상용툴인(Quick Test Professional or QTP) 가 리드 해왔습니다. 하지만 상용툴은 적은 규모의 조직에서는 예산, 규모,교육 등의 문제로 도입하기가 어렵습니다.

오픈 소스 솔루션인 셀레늄(Selenium)을 이용해 보는것이 어떨까요? 셀레늄(Selenium)은 아마도 가장 널리 사용도는 오픈 소스 솔루션 일것입니다.

What is Selenium ?

셀레늄이 뭐지?

위키피디아의 내용을 검색해보면 아래와 같은 내용이 나옵니다.

하지만 이것은 단어의 의미적인 것이고 여기서 말하고자 하는것은 Selenium(Software) 를 말하 고자 합니다.

다시 위키피디아의 검색의 힘을 빌리자면(https://en.wikipedia.org/wiki/Selenium_(software))

  • Web 어플리케이션을 위한 소프트웨어 프레임워크이고
  • Record/Playback tool을 지원한다.(Selenium IDE)
  • Java, C#, Groovy, Perl , PHP, Python , Ruby 등을 지원한다.
  • 대부분의 브라우저를 지원한다.
  • Liunx, Windows, 심지어 Macintosh 플랫폼을 지원한다.
  • 그리고 Open-Sorce(Apache 2.0) 이다.

셀레늄(Selenium)의 Compnonents

그러면 셀레늄은 어떤것들로 구성되어있는지 알아보도록 하겠습니다.

Selenium IDE

Selenium IDE 는 FireFox 확장 플러그인(Add-on) 으로 제공되는 GUI 도구입니다.

Test Case를 쉽게 작성할 수 있도록 도와주고, Record/Playback을 지원하며, Java, pery, Python 등으로 Exporting 을 할 수 있게 하는 기능들을 제공합니다.

참고 : http://seleniumhq.org/projects/ide/

20151002_selenium-ide

Remote Control(RC)- Selenium 1

Remote Control(RC) 는 HTTP 를 이용해 명령(Command)을 받는 Java 로 구성된 작성된 테스트 도구입니다.

Unit Test를 지원하고, PHP, Python, Ruby, .NET, Perl and Java 언어를 지원합니다. 하지만 Java/PHP Test Case 수행시 하나의 인스턴스에서만 수행되어야 하는제약이 있는 버전으로 Selenium 2인 WebDriver 가 나오기 까지는 Main 이였으나, 현재는 Webdriver 에 편입되고 유지보수(Mantaince) 정도만 되고 있는 듯 한 도구입니다.

20151002_selenium1_Architecture_Diagram_Simple

아키텍처에서 보다시피 Remote Control(RC) 를 통해 여러 브라우져의 테스트를 수행 할 수 있습니다.

기타 자세한 사항은 http://www.seleniumhq.org/projects/remote-control/ 에서 확인 하실수 있습니다.

WebDriver- Selenium 2

WebDriver는 로컬 또는 원격 컴퓨터의 브라우져를 구동할 수있게 하는 테스트 도구입니다.

Remote Control(RC)의 다음버전으로 현재의 Selenium을 말합니다.

Webdriver 는 Remote Control(RC) 의 제약사항인 하나의 인스턴스에서만 구동되는 제약사항을 극복하고 Selenium 2로 거듭나게 되었습니다.

  • RC(Selenium 1) + Webdriver = Selenium 2

WebDriver 는 ID/Class/XPath/CSS 등을 이용해 Element를 지정하여 테스트 가능 가능합니다.

그리고 하나의 테스트를 작성한후 아래의 클래스들을 이용해서 드라이버만 변경하여 멀티 브라우저 심지어 Android 까지 테스트가 가능하게 해줍니다.

테스트 가능한 환경들은 아래와 같습니다.

  • Google Chrome
  • Internet Explorer 6, 7, 8, 9, 10 – 32 and 64-bit where applicable
  • Firefox: latest ESR, previous ESR, current release, one previous release
  • Safari
  • Opera
  • HtmlUnit
  • phantomjs
  • Android (with Selendroid or appium)
  • iOS (with ios-driver or appium)

그리고 RC 에서 테스트 하던 것들도 테스트 가 가능합니다.

기타 자세한 사항은 http://docs.seleniumhq.org/projects/webdriver/ 에서 확인 하실수 있습니다.

Selenium Grid

Selenium Grid 는 WebDriver 를 이용해 여러 브라우저 또는 운영 체제를 에서 동시에 테스트를 실행 해주도록 해주는 서버 입니다.

기타 자세한 사항은 https://github.com/SeleniumHQ/selenium/wiki/Grid2 에서 확인 하실수 있습니다.

Selenium IDE 사용해보기

그럼 간단히 Selenium IDE 를 이용해서 테스트 케이스를 작성하고 테스트를 수행해보겠습니다.

Firefox 와 Selenium IDE 설치

우선 Firefox 를 설치합니다.(https://www.mozilla.org/ko/firefox/new/) 설치후 Selenium IDE 를 설치합니다. 다운로드는 http://www.seleniumhq.org/download/ 에서 하실수 있습니다.

20151002_selenium-ide-install

설치후 Firex를 실행하면 우측상단에 Seleniu IDE 버튼을 보실수 있습니다.

20151002_selenium-ide-install-in-firefox

테스트 케이스 작성

그러면 간탄한 테스트 케이스르 작성해보도록 하겠습니다.

테스트 케이스는 아래와 같습니다.

  1. Firefox 실행
  2. Whatap.io 홈페이지 접속
  3. 무료 회원가입 버튼 클릭
  4. 회사이름, 이메일번호, 비밀번호, 비밀번호 확인 Text Field 입력
  5. 이용약관동의, 개인정보보호 정책 동의
  6. 계정생성하기 버튼 클릭

이제 Selenium IDE 를 이용해 테스트를 작성해보겠습니다.

  1. Firefox 실행.
  2. Whatap.io 홈페이지 접속

이제 Firefox 에서 Selenium IDE 버튼을 클릭합 하면 Selenium IDE 가 실행되고 작업한 내용이 녹화 되고 있는것을 보실수 있습니다.

20151002_selenium-ide-write-testscript-01

  1. 무료 회원가입 버튼 클릭
  2. 회사이름, 이메일번호, 비밀번호, 비밀번호 확인 Text Field 입력
  3. 이용약관동의, 개인정보보호 정책 동의
  4. 계정생성하기 버튼 클릭

이제 Selenium IDE 에서 확인해봅니다.

20151002_selenium-ide-write-testscript-02

단지 클릭만으로 모튼 테스트 케이스가 만들어 졌습니다.

그럼 이제 테스트 케이스를 모두 만들었으니 레코딩을 중지합니다. 아래 버튼을 누르면 레코딩이 중지됩니다.

20151002_selenium-ide-write-testscript-03

클릭만으로 모든 테스트가 만들어 졌습니다. 놀랍지 않나요?

테스트 수행 하기

이제 테스트 를 수행해 보겠습니다.

동일한 이메일로는 테스트 생성이 어려 우니 회원 탈퇴를 한후에 다시 테스트를 수행해보겠습니다.

회원탈퇴는 나의 설정> 사용자 > 계정탈퇴 에 있습니다. 탈퇴 사유를 입력후 계정탈퇴를 하면 정상적으로 탈퇴가 됩니다.

그러면 Selenium IDE 에서 작성한 테스트 케이스를 수행해 보겠습니다. 수행은 아래 의 녹색 Play 버튼을 누르면 됩니다.

20151002_selenium-ide-write-testscript-04

정상적으로 테스트가 완료 되면 모든 라인이 녹색으로 변경된것을 확인 하실수 있습니다.

20151002_selenium-ide-write-testscript-05

간단히 테스트가 완료 되었습니다. 너무 쉽지 않나요?

지금까지 Selenium 이 무엇인가와 Selenium IDE 를 한번 사용해 보았습니다.

다음 시간에는 Selenium IDE 를 조금더 사용해보고, WebDriver 를 이용해서 테스트 케이스를 작성하는 방법에대해서 알아 보도록 하겠습니다.

감사합니다.