Post

데브코스 TIL - 셀레니움 IDE 이용해서 테스트케이스 개발

Selenium IDE 이용해서 테스트케이스 개발

로그인/로그아웃 시나리오 테스트케이스 개발

HTML element들을 선택하거나 코드를 손으로 작성하는 것은 효율이 떨어지므로 Selenium IDE의 도움을 얻어 자동화된 시나리오 기록할 예정

그리고 기록한 시나리오 활용할 예정

  • Selenium IDE에서 사용했던 파일을 불러서 다시 시나리오 재생해보기
  • CI를 위한 command-line runner 이용해서 재생하기
  • 테스트 케이스를 파이썬 코드로 추출하고 수정해서 적용해보기

사전 준비

크롬 웹 스토어에서 Selenium IDE를 검색하고 익스텐션 설치하기

https://chrome.google.com/webstore/detail/selenium-ide/mooikfkahbdckldjjndioackbalphokd?hl=ko

실습

1. 설치한 확장 프로그램 클릭해서 새로운 프로젝트 생성하기

새로운프로젝트

create a new project를 클릭해서 새로운 프로젝트 생성

project name: simple_test

2. 테스트 시나리오 설정

  • 무료로 시작하기 클릭
    • 테스트가 항상 재현될 수 있어야하므로 / 경로로 항상 오픈되어야 함
  • 이메일과 비밀번호 입력
    • email: test@example.com
    • pw: 1234
  • 로그아웃 클릭

3. REC버튼 누르고 프로젝트 설정하기

녹화하기

  • BASE URL : localhost:30030

무료로 시작하기 버튼을 누르고 녹화를 종료하면 다음과 같은 화면으로 변한다.

mysql

여기서 상단에 있는 플레이 버튼을 누르면 크롬창이 오픈되며 해당 테스트를 진행한다.

성공적으로 마무리되면 초록색으로 체크가 되고, 실패하면 빨간색 엑스로 표시된다.

셀레니움 테스트 성공

4-1. CML로 테스트해보기

녹화해둔 파일을 저장하여, 커멘드 라인으로 테스트하는 방법이다.

테스트를 실행시키기 위해 다음과 같은 패키지가 설치되어있어야한다.

1
npm i -g selenium-side-runner chromedriver

실행 및 결과

clr 성공

셀레니움 앱을 이용한 것과 동일하게 크롬창이 오픈되고, 로그인이 진행되며 결과가 터미널창에 출력된다.


4-2.파이썬으로 테스트하기

파이썬으로 테스트하기 위해서는 pytest로 export를 해야한다.

pytest로 저장

1
python -m test_login.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# Generated by Selenium IDE
import pytest
import time
import json
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

class TestLogintest():
  def setup_method(self, method):
    self.driver = webdriver.Chrome()
    self.vars = {}
  
  def teardown_method(self, method):
    self.driver.quit()
  
  def test_logintest(self):
    self.driver.get("http://localhost:3000/")
    self.driver.set_window_size(1078, 1020)
    self.driver.find_element(By.LINK_TEXT, "무료로 시작하기").click()
    self.driver.find_element(By.ID, "emailInput").click()
    self.driver.find_element(By.ID, "emailInput").send_keys("test@example.com")
    self.driver.find_element(By.ID, "passwordInput").click()
    self.driver.find_element(By.ID, "passwordInput").send_keys("1234")
    self.driver.find_element(By.ID, "login-button").click()

사용자 관점에서 테스트를 실행하기 때문에 브라우저의 로딩 타임을 정확하게 고려할 수 없음

implicit wait

  • 인자로 지정된 시간만큼은 에러를 리턴하지 않고 대기
  • 요소가 발견되면 그 즉시 이후 테스트 수행(이벤트 발생)
  • 만약 5초로 지정했다면, 5초까지는 오류를 리턴하지 않고 기다림. 그리고 5초 이전에 요소가 발견되면 바로 성공처리함

Explicit wait

  • 인자로 지정된 시간만큼 조건을 검사하면서 대기
  • 만약 5초로 지정했다면, 5초까지 기다려도 응답이 오지 않으면 fail
This post is licensed under CC BY 4.0 by the author.