2019-07-01 JS TDD - Nightwatch (1)

Mocha를 이용한 유닛테스트에서 이제는 E2E테스트를 하기 위해 JS의 테스트 프레임워크에 대해서 학습을 했다. E2E(End-to-End) 테스트로서 시스템이 사용자의 입장에서 실행되고 테스트하는 것을 말한다.

E2E 테스트 프레임워크

  • E2E 테스트 프레임워크는 크게 2가지로 나뉜다. 브라우저에 의존을 하는것과 브라우저에 의존하지 않는 것.
  • 헤드리스 브라우저 프레임워크는 Zombie, Phantom, Gecko, Slimer.js 등이 있다. 브라우저가 없는 프레임워크는 기본적으로 크로스 브라우징 테스트가 불가능하며 Assert도 내장하고 있지 않다.
  • 셀레니움 웹드라이버를 의존하는 프레임워크는 webdriver.io, Cucumber.js, 나이트워치 등이 있다. 이 프레임워크들은 크로스 브라우징 테스트가 가능하고 Assert라이브러리들이 있다.

셀레니움 & 웹드라이버

셀레니움1.0은 셀레니움RC(Remote Control)을 이용해서 브라우저와 통신을 했다. 스크립트를 작성하면 그 스크립트를 기반으로 브라우저를 조작하는 JS를 생성하는 구조였다. 이러한 구조는 보안제약이나 JS의 한계로 웹드라이버가 등장하게 되었다.

웹드라이버는 브라우저의 확장 기능과 OS의 기본기능 등을 이용하여 브라우저를 조작하는 구조였다.

셀레니움1.0과 웹드라이버의 기능이 합쳐져서 셀레니움2.0이 등장을 했다. 셀레니움 웹드라이버는 Ruby, java, python, nodejs 등 다양한 환경을 제공하지만 nodejs와는 궁합이 잘 안맞는다. 그래서 websocket.io, 나이트왓치등을 이용한다.

### 오늘의 느낀점

  • Selenium은 과거 주식 크롤러를 만들면서 이용을 해본적이 있다. 그때는 Java기반으로 작성을 했고, PhantomJS를 붙여서 헤드리스 크롤러를 만들었었다. 테스트를 할때 사용하는 것은 알았지만 Spring을 하면서 RestTemplate을 이용해서 콘솔 브라우저 테스트를 했었지 Selenium을 이용한 것은 아니였다. 오늘 나이트워치를 이용하면서 아주 간단한 테스트를 진행해보았다. 단순 컨트롤러나 데이터베이스 구조의 테스트가 아닌 유저의 입장에서 접속해서 자동으로 테스트를 했다. 이것이 어떤 의미를 가지고 있는지는 아직 모르겠다. 다만 드라이버를 설치하고 환경 설정을 하면서 많은 에러와 nightwatch.json의 파일을 작성하면서 테스트 디렉토리 관리 및 reporters, log 등이 어디에 어떻게 쌓이는지를 보았다. 또한 이 데이터가 xml형식으로 저장이 되는데, 이것들도 내일 어떤식으로 로그가 쌓이는지 학습해보아야겠다.

### 내일의 할일

  • reporters디렉토리에 쌓인 xml파일들이 어떤 의미를 지니고 있는지 학습하기
  • 우리가 만든 Controller에 대해서 테스트코드 작성하고 통과하기
Written on July 1, 2019