테스트 관련 강좌
웹, 모바일, 백엔드 영역에서 테스트 자동화가 가능한 영역 발견 및 구현 방법 알아보니..
프리스케이터
2025. 2. 19. 08:00
웹, 모바일, 백엔드 영역에서 테스트 자동화가 가능한 영역 발견 및 구현 방법 알아보았어요
테스트 자동화는 웹, 모바일, 백엔드 시스템의 품질을 보장하고 유지보수 비용을 절감하는 데 중요합니다.
# 웹 테스트 자동화
- 도구 선택: Selenium, Cypress, TestCafe 등과 같은 테스트 자동화 도구를 선택합니다.
- 테스트 계획 수립: 테스트 케이스를 작성하고 자동화할 테스트 시나리오를 정의합니다.
- 코딩 및 스크립팅: 테스트 케이스를 코딩하여 실행 가능한 스크립트로 만듭니다.
- 테스트 실행: 선택한 도구를 사용하여 테스트를 실행하고 결과를 검토합니다.
- CI/CD 통합: 지속적인 통합 및 배포 파이프라인에 자동화된 테스트를 포함시켜 자동으로 테스트를 실행합니다.
Selenium을 사용한 웹 테스트 자동화 방법
1. 환경 설정
- 웹 브라우저 설치: Selenium은 다양한 브라우저에서 작동하지만, 일반적으로 Chrome이나 Firefox를 많이 사용합니다.
- Selenium WebDriver 다운로드: Selenium 웹사이트에서 WebDriver를 다운로드합니다. 각 브라우저에 맞는 드라이버도 필요합니다 (예: ChromeDriver, GeckoDriver).
- 프로그래밍 언어 선택: Selenium은 여러 언어를 지원하지만, Python, Java, C# 등이 가장 많이 사용됩니다. 예시로 Python을 사용하겠습니다.
- 필수 패키지 설치: pip를 사용하여 필요한 패키지를 설치합니다.
-
pip install selenium
- bash
2. 기본 테스트 스크립트 작성
- WebDriver 초기화: 브라우저를 열고 WebDriver를 초기화합니다.
-
python
from selenium import webdriver # Chrome 브라우저용 WebDriver 설정 driver = webdriver.Chrome(executable_path='/path/to/chromedriver')
- 웹 페이지 열기: WebDriver를 사용하여 웹 페이지를 엽니다.
-
python
driver.get('https://www.example.com')
- 요소 찾기 및 상호작용: 페이지 내의 요소를 찾고 상호작용할 수 있습니다.
-
python
# 요소 찾기 (예: 로그인 폼의 사용자명 입력란) username = driver.find_element_by_name('username') # 요소에 값 입력 username.send_keys('my_username') # 로그인 버튼 클릭 login_button = driver.find_element_by_xpath('//button[@type="submit"]') login_button.click()
- 테스트 검증: 특정 조건을 테스트하여 결과를 검증합니다.
-
python
# 페이지 제목 확인 assert "Dashboard" in driver.title
- 브라우저 종료: 테스트가 끝난 후 브라우저를 닫습니다.
-
python
driver.quit()
3. 고급 테스트 기능
- 명시적 대기: 특정 조건이 만족될 때까지 기다립니다.
-
python
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, 'my_element')) )
- 스크린샷 저장: 오류 발생 시 페이지 스크린샷을 저장합니다.
-
python
driver.save_screenshot('screenshot.png')
- 다중 브라우저 테스트: 다른 브라우저에서 동일한 테스트를 실행합니다.
-
python
from selenium import webdriver for browser in ['chrome', 'firefox']: if browser == 'chrome': driver = webdriver.Chrome() elif browser == 'firefox': driver = webdriver.Firefox() driver.get('https://www.example.com') # ... 테스트 스크립트 ... driver.quit()
1. 테스트 스크립트 저장소에 추가
- 코드 저장소 생성: GitHub, GitLab, Bitbucket 등의 서비스에서 새로운 코드 저장소(repository)를 생성합니다.
- 테스트 스크립트 추가: Selenium 테스트 스크립트를 저장소에 추가하고 버전 관리를 시작합니다.
-
bash
git init git add . git commit -m "Add Selenium test scripts" git remote add origin <remote_repository_URL> git push -u origin master
2. CI 도구 설정
여기서는 GitHub Actions를 사용한 예시를 들어 설명드리겠습니다.
GitHub Actions 설정
- 워크플로우 파일 생성: 저장소의 .github/workflows 디렉토리에 selenium-tests.yml 파일을 생성합니다.
-
yaml
name: Selenium Tests on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v2 with: python-version: '3.8' - name: Install dependencies run: | python -m pip install --upgrade pip pip install selenium - name: Download WebDriver run: | wget -q https://chromedriver.storage.googleapis.com/91.0.4472.101/chromedriver_linux64.zip unzip chromedriver_linux64.zip sudo mv chromedriver /usr/local/bin/ - name: Run Selenium tests run: | python -m pytest tests/ # 테스트 스크립트 경로
- 커밋 및 푸시: 위 파일을 커밋하고 저장소에 푸시합니다.
-
bash
git add .github/workflows/selenium-tests.yml git commit -m "Add GitHub Actions workflow for Selenium tests" git push
3. 테스트 결과 검토
- 워크플로우 실행 확인: GitHub 저장소에서 Actions 탭을 클릭하여 실행된 워크플로우를 확인합니다. 실행 상태와 로그를 통해 테스트 결과를 검토할 수 있습니다.
Jenkins 설정
- Jenkins 설치: Jenkins를 설치하고 실행합니다.
- Jenkins 다운로드 링크
- Jenkins 플러그인 설치: Git, Pipeline, 그리고 Selenium 플러그인을 설치합니다.
- Jenkins 관리 > 플러그인 관리 > 사용 가능한 플러그인 > 설치
- Jenkins 파이프라인 설정: Jenkins에서 새로운 파이프라인을 생성하고, 아래와 같은 파이프라인 스크립트를 사용합니다.
-
groovy
pipeline { agent any stages { stage('Checkout') { steps { checkout scm } } stage('Set up Python') { steps { sh 'python -m pip install --upgrade pip' sh 'pip install selenium' } } stage('Download WebDriver') { steps { sh 'wget -q https://chromedriver.storage.googleapis.com/91.0.4472.101/chromedriver_linux64.zip' sh 'unzip chromedriver_linux64.zip' sh 'sudo mv chromedriver /usr/local/bin/' } } stage('Run Selenium Tests') { steps { sh 'python -m pytest tests/' # 테스트 스크립트 경로 } } } }
- 파이프라인 실행: Jenkins에서 파이프라인을 실행하여 테스트 결과를 검토합니다.
이와 같은 방법으로 Selenium을 사용한 웹 테스트를 CI/CD 파이프라인에 통합할 수 있습니다.
# 모바일 테스트 자동화
- 도구 선택: Appium, Espresso, XCUITest 등과 같은 도구를 사용합니다.
- 환경 설정: 테스트 환경을 설정하고 다양한 기기와 에뮬레이터/시뮬레이터를 준비합니다.
- 테스트 계획 수립: 테스트 케이스를 작성하고 자동화할 시나리오를 정의합니다.
- 코딩 및 스크립팅: 테스트 스크립트를 작성하여 다양한 모바일 환경에서 실행될 수 있도록 합니다.
- 테스트 실행: 다양한 기기에서 테스트를 실행하고 결과를 분석합니다.
- CI/CD 통합: 지속적인 통합 및 배포 파이프라인에 자동화된 테스트를 포함시킵니다.
Appium을 사용한 모바일 테스트 자동화는 다양한 플랫폼(Android, iOS)에서 작동하는 앱을 자동으로 테스트할 수 있도록 도와줍니다.
1. 환경 설정
- Java 설치: Appium은 Java로 작성되어 있으므로 Java Development Kit(JDK)를 설치해야 합니다.
- Java 다운로드 링크
- Android SDK 설치: Android 앱 테스트를 위해 Android SDK를 설치합니다.
- Android SDK 다운로드 링크
- Appium 설치: Appium을 설치합니다. Node.js와 npm(Node Package Manager)을 사용하여 Appium을 설치할 수 있습니다.
-
npm install -g appium npm install -g appium-doctor
- bash
- Appium-Doctor 실행: Appium-Doctor를 실행하여 필요한 설정이 모두 완료되었는지 확인합니다.
-
bash
appium-doctor
2. 기본 테스트 스크립트 작성
- 필수 라이브러리 설치: Selenium과 Appium 클라이언트 라이브러리를 설치합니다.
-
bash
pip install Appium-Python-Client selenium
- WebDriver 초기화: Appium을 사용하여 모바일 기기를 초기화합니다.
-
python
from appium import webdriver desired_caps = { 'platformName': 'Android', # 또는 'iOS' 'platformVersion': '9.0', # 안드로이드 버전 'deviceName': 'emulator-5554', # 에뮬레이터 또는 실제 기기 이름 'app': '/path/to/your/app.apk', # 테스트할 앱의 경로 'automationName': 'UiAutomator2' # Android의 경우 UiAutomator2를 사용 } driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
- 요소 찾기 및 상호작용: 앱 내의 요소를 찾고 상호작용할 수 있습니다.
-
python
# 요소 찾기 (예: 로그인 폼의 사용자명 입력란) username = driver.find_element_by_id('com.example:id/username') # 요소에 값 입력 username.send_keys('my_username') # 로그인 버튼 클릭 login_button = driver.find_element_by_id('com.example:id/login_button') login_button.click()
- 테스트 검증: 특정 조건을 테스트하여 결과를 검증합니다.
-
python
# 페이지 제목 확인 assert "Welcome" in driver.page_source
- 세션 종료: 테스트가 끝난 후 세션을 종료합니다.
-
python
driver.quit()
3. 고급 테스트 기능
- 명시적 대기: 특정 조건이 만족될 때까지 기다립니다.
-
python
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, 'my_element')) )
- 스크린샷 저장: 오류 발생 시 페이지 스크린샷을 저장합니다.
-
python
driver.save_screenshot('screenshot.png')
- 다중 기기 테스트: 다양한 기기에서 동일한 테스트를 실행합니다.
-
python
from appium import webdriver devices = [ {'platformName': 'Android', 'platformVersion': '9.0', 'deviceName': 'emulator-5554', 'app': '/path/to/your/app.apk'}, {'platformName': 'iOS', 'platformVersion': '13.0', 'deviceName': 'iPhone 8', 'app': '/path/to/your/app.app'} ] for device in devices: driver = webdriver.Remote('http://localhost:4723/wd/hub', device) driver.get('https://www.example.com') # ... 테스트 스크립트 ... driver.quit()
Appium을 사용한 모바일 테스트 자동화를 CI/CD 환경에 통합하는 방법을 단계별로 설명드릴게요.
1. 테스트 스크립트 저장소에 추가
- 코드 저장소 생성: GitHub, GitLab, Bitbucket 등의 서비스에서 새로운 코드 저장소(repository)를 생성합니다.
- 테스트 스크립트 추가: Appium 테스트 스크립트를 저장소에 추가하고 버전 관리를 시작합니다.
-
bash
git init git add . git commit -m "Add Appium test scripts" git remote add origin <remote_repository_URL> git push -u origin master
2. CI 도구 설정
여기서는 GitHub Actions를 사용한 예시를 들어 설명드리겠습니다.
GitHub Actions 설정
- 워크플로우 파일 생성: 저장소의 .github/workflows 디렉토리에 appium-tests.yml 파일을 생성합니다.
-
yaml
name: Appium Tests on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up Java uses: actions/setup-java@v2 with: java-version: '11' - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y nodejs npm npm install -g appium npm install -g appium-doctor appium-doctor --android - name: Download Android SDK run: | wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip unzip sdk-tools-linux-4333796.zip -d $HOME/android-sdk export ANDROID_HOME=$HOME/android-sdk export PATH=$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$PATH - name: Install Appium-Python-Client run: | pip install Appium-Python-Client - name: Run Appium server run: appium & - name: Run Appium tests run: | python -m pytest tests/ # 테스트 스크립트 경로
- 커밋 및 푸시: 위 파일을 커밋하고 저장소에 푸시합니다.
-
bash
git add .github/workflows/appium-tests.yml git commit -m "Add GitHub Actions workflow for Appium tests" git push
3. 테스트 결과 검토
- 워크플로우 실행 확인: GitHub 저장소에서 Actions 탭을 클릭하여 실행된 워크플로우를 확인합니다. 실행 상태와 로그를 통해 테스트 결과를 검토할 수 있습니다.
Jenkins 설정
- Jenkins 설치: Jenkins를 설치하고 실행합니다.
- Jenkins 다운로드 링크
- Jenkins 플러그인 설치: Git, Pipeline, 그리고 Appium 플러그인을 설치합니다.
- Jenkins 관리 > 플러그인 관리 > 사용 가능한 플러그인 > 설치
- Jenkins 파이프라인 설정: Jenkins에서 새로운 파이프라인을 생성하고, 아래와 같은 파이프라인 스크립트를 사용합니다.
-
groovy
pipeline { agent any stages { stage('Checkout') { steps { checkout scm } } stage('Set up Java and Node.js') { steps { sh 'sudo apt-get update' sh 'sudo apt-get install -y openjdk-11-jdk nodejs npm' sh 'npm install -g appium' sh 'npm install -g appium-doctor' sh 'appium-doctor --android' } } stage('Download Android SDK') { steps { sh 'wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip' sh 'unzip sdk-tools-linux-4333796.zip -d $HOME/android-sdk' sh 'export ANDROID_HOME=$HOME/android-sdk' sh 'export PATH=$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$PATH' } } stage('Install Appium-Python-Client') { steps { sh 'pip install Appium-Python-Client' } } stage('Run Appium server') { steps { sh 'appium &' } } stage('Run Appium Tests') { steps { sh 'python -m pytest tests/' # 테스트 스크립트 경로 } } } }
- 파이프라인 실행: Jenkins에서 파이프라인을 실행하여 테스트 결과를 검토합니다.
이와 같은 방법으로 Appium을 사용한 모바일 테스트를 CI/CD 파이프라인에 통합할 수 있습니다.
백엔드 테스트 자동화
- 도구 선택: JUnit, TestNG, Postman, Newman 등과 같은 도구를 사용합니다.
- 테스트 계획 수립: 테스트 케이스를 작성하고 자동화할 API 및 비즈니스 로직을 정의합니다.
- 코딩 및 스크립팅: 테스트 스크립트를 작성하여 다양한 백엔드 API 및 서비스에 대해 테스트를 실행합니다.
- 테스트 실행: 다양한 환경에서 테스트를 실행하고 결과를 분석합니다.
- CI/CD 통합: 지속적인 통합 및 배포 파이프라인에 자동화된 테스트를 포함시켜 자동으로 테스트를 실행합니다.
이 과정을 통해 각 영역에서 테스트 자동화를 도입하고 구현할 수 있습니다.
1. 테스트 계획 수립
- 테스트 케이스 작성: 백엔드 API의 다양한 시나리오를 작성합니다. 예를 들어, 각 API 엔드포인트에 대한 정상 케이스 및 오류 케이스를 포함합니다.
- 비즈니스 로직 정의: API 호출이 비즈니스 로직과 일치하는지 확인합니다. 예를 들어, 사용자 등록, 로그인, 데이터 검색 등의 API를 테스트합니다.
2. 코딩 및 스크립팅
- Postman 설치: Postman을 설치하고 실행합니다.
- Postman 다운로드 링크
- API 요청 만들기: Postman에서 새로운 API 요청을 만듭니다.
- New 버튼 클릭
- Request 선택
- 요청 이름과 컬렉션 선택 또는 새 컬렉션 생성
- Save to <컬렉션 이름> 클릭
- 요청 구성: API 요청의 URL, 메서드(GET, POST, PUT, DELETE 등) 및 필요한 헤더와 본문을 설정합니다.
- 예를 들어, 사용자 등록 API의 경우:
- 메서드: POST
- URL: https://example.com/api/register
- 헤더: Content-Type: application/json
- 본문:
-
{ "username": "testuser", "password": "testpassword", "email": "testuser@example.com" }
- json
- 예를 들어, 사용자 등록 API의 경우:
- 테스트 스크립트 작성: Postman의 Tests 탭에서 테스트 스크립트를 작성합니다.
-
javascript
pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); pm.test("Response has user ID", function () { var jsonData = pm.response.json(); pm.expect(jsonData).to.have.property("userId"); });
3. 테스트 실행
- 단일 요청 실행: 각각의 API 요청을 Postman에서 개별적으로 실행하여 응답을 확인합니다.
- Send 버튼을 클릭하여 요청을 실행하고 응답을 검토합니다.
- 컬렉션 실행: 여러 요청을 하나의 컬렉션으로 묶어 연속적으로 실행합니다.
- Postman 상단의 Runner를 클릭하여 컬렉션 러너를 엽니다.
- 실행할 컬렉션을 선택하고 Run <컬렉션 이름> 버튼을 클릭합니다.
- 환경 설정: 다양한 환경(개발, 스테이징, 프로덕션 등)에서 테스트를 실행하려면 환경 변수를 설정합니다.
- Postman 상단의 환경 드롭다운에서 Manage Environments 클릭
- 새로운 환경을 추가하고 필요한 변수를 정의합니다.
- 예:
- 환경 이름: Development
- 변수: baseUrl
- 값: https://dev.example.com/api
4. CI/CD 통합
- Newman 설치: Newman은 Postman 컬렉션을 명령줄에서 실행할 수 있게 해줍니다.
-
bash
npm install -g newman
- Postman 컬렉션 내보내기: Postman에서 테스트할 컬렉션을 내보냅니다.
- Collections 탭에서 해당 컬렉션 우클릭 후 Export 선택
- JSON 형식으로 컬렉션을 저장합니다.
- Newman으로 테스트 실행: 내보낸 컬렉션을 Newman을 사용하여 명령줄에서 실행합니다.
-
bash
newman run /path/to/your/collection.json -e /path/to/your/environment.json
- CI 도구 설정: Jenkins, GitHub Actions, GitLab CI 등의 CI 도구에서 Newman을 실행하는 스크립트를 설정합니다.
-
yaml
# 예시: GitHub Actions 워크플로 name: API Tests on: [push] jobs: run-tests: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Install Node.js uses: actions/setup-node@v2 with: node-version: '14' - name: Install Newman run: npm install -g newman - name: Run Postman Tests run: newman run /path/to/your/collection.json -e /path/to/your/environment.json
- 테스트 결과 검토: CI 도구에서 제공하는 로그와 보고서를 통해 테스트 결과를 검토합니다.
이와 같은 방법으로 Postman을 사용하여 백엔드 테스트 자동화를 구현할 수 있습니다.