책 소개
요약
Selenium 3.1.0 버전 기준
이 책은 구글이 선택한 웹 애플리케이션 UI 자동화 테스팅 도구인 셀레늄(Selenium) 웹드라이버를 사용해 웹 애플리케이션 테스트 프레임워크를 구축하는 내용을 다룬다. 셀레늄 API를 배우고 나면 애플리케이션의 성능 측정이나 모바일 기기에서 동작하는 웹 애플리케이션 테스트, 젠킨스 같은 도구를 활용해 테스트의 효율을 높이는 방법까지 현실 세계에서 부딪치는 다양한 도전 과제의 해답을 얻을 수 있다.
이 책에서 다루는 내용
■ 위치 지정자에 대한 이해와 다양한 위치 지정자 메소드로 신뢰성 높은 테스트 코드를 만드는 방법
■ 셀레늄 웹드라이버 API를 사용하는 테스트 코드 작성
■ 페이지 팩토리 패턴으로 강건하고 유지 보수 용이한 테스트 프레임워크 구축
■ 데이터 주도 테스트와 셀레늄 API를 확장해 수행하는 사용자 정의 테스트
■ 셀레늄 웹드라이버와 함께 JBehave, SpecFlow, FitNesses 같은 ATDD/BDD 도구를 사용하는 방법
■ 아이폰, 아이패드, 안드로이드 기기와 시뮬레이터에서 수행하는 모바일 웹 애플리케이션 테스트
■ 테스트 커버리지를 높이면서 실행 시간을 단축하는 셀레늄 그리드의 설정 방법
이 책의 대상 독자
이 책의 대상 독자는 품질보증 관리자나 테스트 전문가, 테스트 매니저는 물론, 셀레늄과 자바를 사용해 웹 애플리케이션 테스트를 경험한 개발자까지 다양하다. C#, 파이썬, 루비 사용자를 위한 예제도 준비돼 있다.
이 책의 구성
1장, ‘엘리먼트 위치 지정’에서는 셀레늄 웹드라이버에서 제공하는 방법으로 웹 페이지에서 엘리먼트 위치를 지정하는 내용을 다룬다. 셀레늄 웹드라이버는 XPath와 CSS, DOM 같은 다양한 위치 지정자(locator) 중 최선의 방법을 제공해 엘리먼트 위치를 지정한다. 물론 사용자 정의 위치 지정자도 만들어 사용할 수 있다. 1장의 예제는 셀레늄 웹드라이버 위치 지정자 API와 친숙해지는 데 도움을 준다.
2장, ‘셀레늄 API 사용’에서는 셀레늄 API를 사용해 테스트 코드를 만드는 방법을 설명한다. 셀레늄 API를 살펴본 다음에는 복잡한 마우스 움직임이나 키보드 입력 같은 사용자 상호작용을 그대로 재현하면서 웹 애플리케이션의 다양한 UI 엘리먼트를 다룰 수 있다.
3장, ‘테스트 흐름 제어’에서는 셀레늄 웹드라이버 API를 사용해 신뢰성 있는 테스트 자동화 프레임워크 구축 방법을 다룬다. 훌륭한 테스트 자동화 프레임워크는 강건함과 신뢰성, 회복성, 예외 처리 능력을 포함한다. 3장의 예제는 명시적 대기 시간과 묵시적 대기 시간으로 동기화를 이루고, 여러 개의 윈도우를 다루거나 테스트 중에 나타나는 팝업 창과 알림 창에 대처하는 방법을 설명한다.
4장, ‘데이터 주도 테스팅’에서는 테스트 자동화 방법론 중 하나인 데이터 주도 테스트를 소개한다. 셀레늄 웹드라이버는 데이터 주도 테스트를 지원하는 빌트인 기능은 없지만, 셀레늄 웹드라이버 API를 확장해 데이터 주도 테스트를 수행할 수 있다. 4장은 JUnit/아파치 POI와 JDBC를 사용한 테스트 예제를 다룬다.
5장, ‘페이지 객체 모델 사용’에서는 셀레늄 웹드라이버 테스트를 구축할 때 가장 많이 사용하는 모델 패턴을 다룬다. 5장의 내용은 페이지 객체 모델을 사용해 테스트 프레임워크를 만드는 데 많은 도움을 준다.
6장, ‘셀레늄 확장’에서는 셀레늄 웹드라이버 API를 확장하고 테스트 자동화의 범위를 넓힌다. 커스텀 UI 컨트롤과 엘리먼트의 이미지 캡처, 이미지 기반의 테스트 같은 실용적이고 핵심적인 예제로 셀레늄 웹드라이버를 확장해본다.
7장, ‘모바일 브라우저에서 테스트’에서는 애플의 iOS와 안드로이드 플랫폼에서 셀레늄 웹드라이버 API를 사용하는 모바일 웹 애플리케이션 테스트 방법을 소개한다. 7장에서는 모바일 기기를 설정하고 아이폰, 안드로이드 기기와 시뮬레이터를 사용하는 셀레늄 웹드라이버 예제를 다룬다.
8장, ‘클라이언트 성능 테스트’에서는 셀레늄 웹드라이버를 사용해 클라이언트 측 성능 측정 방법을 알아본다. 클라이언트 측 성능은 다양한 방법으로 측정할 수 있는데, 예제에서는 dynaTrace나 HttpWatch 같은 도구와 함께 셀레늄 웹드라이버를 사용하면서 클라이언트 성능을 수집, 측정, 모니터할 수 있다.
9장, ‘HTML5 웹 애플리케이션 테스팅’에서는 HTML5 표준을 사용하는 웹 애플리케이션 테스트 방법을 다룬다. 즉, 비디오와 캔버스 엘리먼트, HTML5의 웹 스토리지 API를 테스트하는 방법 등을 다룬다.
10장, ‘테스트 과정 동영상 녹화’에서는 몬테 미디어 라이브러리, 마이크로소프트 익스프레션 인코더 SDK, 카스트로 같은 도구를 사용해 테스트 과정을 동영상으로 녹화하는 방법을 살펴본다.
11장, ‘행위 주도 개발’에서는 셀레늄 웹드라이버로 구현하는 행위 주도 개발 방법을 알아본다. Cucumber-JVM과 자바에서 사용하는 JBehave, 닷넷용 SpecFolw.NET, 루비용 Capybara가 행위 주도 개발을 실현하는 도구로 등장한다.
부록 A, ‘셀레늄 웹드라이버와 다른 도구의 통합’에서는 이클립스와 인텔리J IDEA에서 셀레늄 웹드라이버를 설정하는 방법이 기술되어 있다. 메이븐이나 앤트 설정 방법이나 젠킨스를 사용하는 지속적인 통합 과정에 테스트를 구현하는 방법도 다룬다. 오토잇(AutoIt)과 시쿨리(Sikuli)를 사용하는 자동화 테스트도 살펴본다.
부록 B, ‘셀레늄 그리드를 사용한 분산 환경 테스트’에서는 분산 환경에서 셀레늄 그리드로 테스트를 수행하는 방법을 설명한다. 노드는 브라우저와 플랫폼의 다양한 조합으로 여러 개를 만들어 추가하는데, 테스트는 TestNG를 사용해 병렬로 수행할 수 있다. TestNG는 테스트 실행 시간을 줄이면서 테스트 커버리지를 높이는 데 유용하다.
목차
목차
- 1장 엘리먼트 위치 지정
- 소개
- 페이지 구조와 엘리먼트 검사를 위한 브라우저 도구 사용
- findElement 메소드로 엘리먼트 위치 지정
- findElements 메소드로 여러 엘리먼트 위치 지정
- 링크 위치 지정
- 태그 이름으로 엘리먼트 위치 지정
- CSS 셀렉터로 엘리먼트 위치 지정
- XPath로 엘리먼트 위치 지정
- 텍스트로 엘리먼트 위치 지정
- 고급 CSS 셀렉터로 엘리먼트 위치 지정
- jQuery 셀렉터로 엘리먼트 위치 지정
- 테이블의 행열에서 엘리먼트 위치 지정
- 테이블 자식 엘리먼트에서 엘리먼트 위치 지정
- 2장 셀레늄 API 사용
- 소개
- 엘리먼트 텍스트 검사
- 엘리먼트 속성 값 검사
- 엘리먼트 CSS 값 검사
- 고급 사용자 인터랙션 API를 사용한 마우스와 키보드 이벤트
- 엘리먼트 더블클릭 실행
- 드래그앤드롭 실행
- 자바스크립트 코드 실행
- 셀레늄 웹드라이버로 스크린샷 캡처
- 리모트 웹드라이버/그리드에서 스크린샷 캡처
- 브라우저 창 크기 최대화
- 드롭다운과 리스트 자동화 테스트
- 드롭다운과 리스트 옵션 검사
- 드롭다운과 리스트에서 선택한 옵션 검사
- 라디오 버튼과 라디오 그룹 자동화 테스트
- 체크박스 자동화 테스트
- 3장 테스트 흐름 제어
- 소개
- 묵시적 대기 시간으로 테스트 동기화
- 명시적 대기 시간으로 테스트 동기화
- 사용자 정의 대기 조건으로 테스트 동기화
- 엘리먼트의 존재 여부 확인
- 엘리먼트 상태 확인
- name 속성으로 팝업 창 식별과 조작
- title 속성으로 팝업 창 식별과 조작
- 콘텐츠로 팝업 창 식별과 조작
- 자바스크립트 알림 창 조작
- 확인 창 조작
- 프롬프트 박스 조작
- 프레임 식별과 조작
- 콘텐츠로 프레임 식별과 조작
- IFRAME 작업
- 4장 데이터 주도 테스팅
- 소개
- JUnit을 사용한 데이터 주도 테스트
- TestNG를 사용한 데이터 주도 테스트
- JUnit을 사용해 CSV 파일에서 테스트 데이터 가져오기
- JUnit과 아파치 POI로 엑셀 파일에서 테스트 데이터 가져오기
- JUnit과 JDBC로 데이터베이스에서 테스트 데이터 가져오기
- NUnit으로 데이터 주도 테스트 만들기
- MSTEST로 데이터 주도 테스트 만들기
- Roo를 사용해 루비로 데이터 주도 테스트 만들기
- 파이썬으로 데이터 주도 테스트 만들기
- 5장 페이지 객체 모델 사용
- 소개
- PageFactory 클래스를 사용한 페이지 객체와 엘리먼트의 매핑
- PageFactory 클래스를 사용한 페이지 동작 제어
- LoadableComponent 클래스의 활용
- 중첩된 페이지 객체 인스턴스의 구현
- 닷넷으로 구현하는 페이지 객체 모델
- 파이썬으로 구현하는 페이지 객체 모델
- 페이지 객체 젬을 사용해 루비로 구현하는 페이지 객체 모델
- 6장 셀레늄 확장
- 소개
- 웹 테이블 확장 클래스
- jQueryUI 탭 위젯용 확장 기능
- 엘리먼트 속성 값을 설정하는 WebElement 확장 기능 구현
- 엘리먼트를 하이라이트하는 WebElement 확장 기능 구현
- 셀레늄 테스트에서 사용하는 객체 맵 생성
- 엘리먼트 캡처
- 이미지 비교
- 7장 모바일 브라우저에서 테스트
- 소개
- 아이폰/아이패드 시뮬레이터를 위한 iWebDriver 설치
- 아이폰/아이패드 기기를 위한 iWebDriver 설치
- iWebDriver와 아이폰 드라이버를 사용한 웹 애플리케이션 테스트
- 셀레늄 테스트를 위한 안드로이드 에뮬레이터 설정
- 셀레늄 테스트를 위한 안드로이드 기기 설정
- 안드로이드 드라이버를 사용한 테스트 수행
- 8장 클라이언트 성능 테스트
- 소개
- 타이머를 사용한 응답 시간 측정
- 내비게이션 타이밍 API를 사용한 성능 측정
- BrowserMob 프록시를 사용한 성능 측정
- dynaTrace를 사용한 성능 측정
- HttpWatch를 사용한 성능 측정
- Watir-WebDriver-Performance를 사용한 클라이언트 측 성능 테스트
- 9장 HTML5 웹 애플리케이션 테스트
- 소개
- HTML5 비디오 플레이어 테스트 자동화
- HTML5 캔버스 엘리먼트에서 그리기 동작 테스트
- 로컬 스토리지 테스트
- 세션 스토리지 테스트
- 로컬 스토리지와 세션 스토리지 초기화
- 10장 테스트 과정 동영상 녹화
- 소개
- 몬테 미디어 라이브러리를 사용한 동영상 녹화
- 마이크로소프트 익스프레션 인코더 4 SDK를 사용한 동영상 녹화
- 카스트로를 사용한 동영상 녹화
- 11장 행위 주도 개발
- 소개
- Cucumber-JVM과 셀레늄 웹드라이버를 사용한 행위 주도 개발
- SpecFlow.NET과 셀레늄 웹드라이버를 사용한 행위 주도 개발
- JBehave와 셀레늄 웹드라이버를 사용한 행위 주도 개발
- Capybara, Cucumber, 셀레늄 웹드라이버를 사용한 행위 주도 개발
- 부록 A 셀레늄 웹드라이버와 다른 도구의 통합
- 소개
- 이클립스와 메이븐으로 시작하는 셀레늄 웹드라이버
- 인텔리J IDEA와 메이븐으로 시작하는 셀레늄 웹드라이버
- 앤트로 실행하는 셀레늄 웹드라이버 테스트
- 지속적인 통합을 위한 젠킨스 설정
- 젠킨스와 메이븐으로 실행하는 셀레늄 웹드라이버 테스트
- 젠킨스와 앤트로 실행하는 셀레늄 웹드라이버 테스트
- 마이크로소프트 비주얼스튜디오로 시작하는 셀레늄 웹드라이버
- 오토잇과 셀레늄 웹드라이버를 사용하는 자동화 테스트
- 시쿨리와 셀레늄 웹드라이버를 사용하는 자동화 테스트
- 부록 B 셀레늄 그리드를 사용한 분산 환경 테스트
- 소개
- 셀레늄 그리드
- 병렬 진행을 위한 셀레늄 그리드 설정
- 윈도우/인터넷 익스플로러 노드 추가
- 맥/파이어폭스 노드 추가
- 아이폰/iWebDriver 노드 추가
- 안드로이드 노드 추가
- TestNG를 사용한 병렬 실행 셀레늄 스크립트
- 파이썬을 사용한 병렬 실행 셀레늄 스크립트
- 병렬 실행을 위한 셀레늄과 젠킨스 CI 서버 설정
- 찾아보기
도서 오류 신고
정오표
정오표
2015.2.11 수정사항
[p77 : 11행, 13행]
getCSSValue() -> getCssValue()
[p78 : 1행]
getCSSValue() -> getCssValue()
2018.5 수정사항
샘플 주소였던 드롭박스 링크에 오류가 발생하는 것이 확인됐습니다.
저자가 2판을 작업하면서 새로 만든 사이트 를 참고해주시면 되겠습니다.