테스트 관련 강좌

웹, 모바일, 백엔드 영역에서 테스트 자동화가 가능한 영역 발견 및 구현 방법 알아보니..

프리스케이터 2025. 2. 19. 08:00

웹, 모바일, 백엔드 영역에서 테스트 자동화가 가능한 영역 발견 및 구현 방법 알아보았어요

 

테스트 자동화는 웹, 모바일, 백엔드 시스템의 품질을 보장하고 유지보수 비용을 절감하는 데 중요합니다.

 

# 웹 테스트 자동화

 

  1. 도구 선택: Selenium, Cypress, TestCafe 등과 같은 테스트 자동화 도구를 선택합니다.
  2. 테스트 계획 수립: 테스트 케이스를 작성하고 자동화할 테스트 시나리오를 정의합니다.
  3. 코딩 및 스크립팅: 테스트 케이스를 코딩하여 실행 가능한 스크립트로 만듭니다.
  4. 테스트 실행: 선택한 도구를 사용하여 테스트를 실행하고 결과를 검토합니다.
  5. CI/CD 통합: 지속적인 통합 및 배포 파이프라인에 자동화된 테스트를 포함시켜 자동으로 테스트를 실행합니다.

웹 테스트 자동화

 

Selenium을 사용한 웹 테스트 자동화 방법

1. 환경 설정

  1. 웹 브라우저 설치: Selenium은 다양한 브라우저에서 작동하지만, 일반적으로 Chrome이나 Firefox를 많이 사용합니다.
  2. Selenium WebDriver 다운로드: Selenium 웹사이트에서 WebDriver를 다운로드합니다. 각 브라우저에 맞는 드라이버도 필요합니다 (예: ChromeDriver, GeckoDriver).
  3. 프로그래밍 언어 선택: Selenium은 여러 언어를 지원하지만, Python, Java, C# 등이 가장 많이 사용됩니다. 예시로 Python을 사용하겠습니다.
  4. 필수 패키지 설치: pip를 사용하여 필요한 패키지를 설치합니다.
  5.  
    pip install selenium
    
  6. bash

2. 기본 테스트 스크립트 작성

  1. WebDriver 초기화: 브라우저를 열고 WebDriver를 초기화합니다.
  2. python
    from selenium import webdriver
    
    # Chrome 브라우저용 WebDriver 설정
    driver = webdriver.Chrome(executable_path='/path/to/chromedriver')
    
  3. 웹 페이지 열기: WebDriver를 사용하여 웹 페이지를 엽니다.
  4. python
    driver.get('https://www.example.com')
    
  5. 요소 찾기 및 상호작용: 페이지 내의 요소를 찾고 상호작용할 수 있습니다.
  6. 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()
    
  7. 테스트 검증: 특정 조건을 테스트하여 결과를 검증합니다.
  8. python
    # 페이지 제목 확인
    assert "Dashboard" in driver.title
    
  9. 브라우저 종료: 테스트가 끝난 후 브라우저를 닫습니다.
  10. python
    driver.quit()
    

3. 고급 테스트 기능

  1. 명시적 대기: 특정 조건이 만족될 때까지 기다립니다.
  2. 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'))
    )
    
  3. 스크린샷 저장: 오류 발생 시 페이지 스크린샷을 저장합니다.
  4. python
    driver.save_screenshot('screenshot.png')
    
  5. 다중 브라우저 테스트: 다른 브라우저에서 동일한 테스트를 실행합니다.
  6. 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. 테스트 스크립트 저장소에 추가

  1. 코드 저장소 생성: GitHub, GitLab, Bitbucket 등의 서비스에서 새로운 코드 저장소(repository)를 생성합니다.
  2. 테스트 스크립트 추가: Selenium 테스트 스크립트를 저장소에 추가하고 버전 관리를 시작합니다.
  3. 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 설정

  1. 워크플로우 파일 생성: 저장소의 .github/workflows 디렉토리에 selenium-tests.yml 파일을 생성합니다.
  2. 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/  # 테스트 스크립트 경로
    
  3. 커밋 및 푸시: 위 파일을 커밋하고 저장소에 푸시합니다.
  4. bash
    git add .github/workflows/selenium-tests.yml
    git commit -m "Add GitHub Actions workflow for Selenium tests"
    git push
    

3. 테스트 결과 검토

  1. 워크플로우 실행 확인: GitHub 저장소에서 Actions 탭을 클릭하여 실행된 워크플로우를 확인합니다. 실행 상태와 로그를 통해 테스트 결과를 검토할 수 있습니다.

Jenkins 설정

  1. Jenkins 설치: Jenkins를 설치하고 실행합니다.
    • Jenkins 다운로드 링크
  2. Jenkins 플러그인 설치: Git, Pipeline, 그리고 Selenium 플러그인을 설치합니다.
    • Jenkins 관리 > 플러그인 관리 > 사용 가능한 플러그인 > 설치
  3. Jenkins 파이프라인 설정: Jenkins에서 새로운 파이프라인을 생성하고, 아래와 같은 파이프라인 스크립트를 사용합니다.
  4. 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/'  # 테스트 스크립트 경로
                }
            }
        }
    }
    
  5. 파이프라인 실행: Jenkins에서 파이프라인을 실행하여 테스트 결과를 검토합니다.

이와 같은 방법으로 Selenium을 사용한 웹 테스트를 CI/CD 파이프라인에 통합할 수 있습니다.

 

 

 

 

# 모바일 테스트 자동화

 

모바일 테스트 자동화

 

  1. 도구 선택: Appium, Espresso, XCUITest 등과 같은 도구를 사용합니다.
  2. 환경 설정: 테스트 환경을 설정하고 다양한 기기와 에뮬레이터/시뮬레이터를 준비합니다.
  3. 테스트 계획 수립: 테스트 케이스를 작성하고 자동화할 시나리오를 정의합니다.
  4. 코딩 및 스크립팅: 테스트 스크립트를 작성하여 다양한 모바일 환경에서 실행될 수 있도록 합니다.
  5. 테스트 실행: 다양한 기기에서 테스트를 실행하고 결과를 분석합니다.
  6. CI/CD 통합: 지속적인 통합 및 배포 파이프라인에 자동화된 테스트를 포함시킵니다.

Appium을 사용한 모바일 테스트 자동화는 다양한 플랫폼(Android, iOS)에서 작동하는 앱을 자동으로 테스트할 수 있도록 도와줍니다.

1. 환경 설정

  1. Java 설치: Appium은 Java로 작성되어 있으므로 Java Development Kit(JDK)를 설치해야 합니다.
    • Java 다운로드 링크
  2. Android SDK 설치: Android 앱 테스트를 위해 Android SDK를 설치합니다.
    • Android SDK 다운로드 링크
  3. Appium 설치: Appium을 설치합니다. Node.js와 npm(Node Package Manager)을 사용하여 Appium을 설치할 수 있습니다.
  4.  
    npm install -g appium
    npm install -g appium-doctor
    
  5. bash
  6. Appium-Doctor 실행: Appium-Doctor를 실행하여 필요한 설정이 모두 완료되었는지 확인합니다.
  7. bash
    appium-doctor
    

2. 기본 테스트 스크립트 작성

  1. 필수 라이브러리 설치: Selenium과 Appium 클라이언트 라이브러리를 설치합니다.
  2. bash
    pip install Appium-Python-Client selenium
    
  3. WebDriver 초기화: Appium을 사용하여 모바일 기기를 초기화합니다.
  4. 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)
    
  5. 요소 찾기 및 상호작용: 앱 내의 요소를 찾고 상호작용할 수 있습니다.
  6. 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()
    
  7. 테스트 검증: 특정 조건을 테스트하여 결과를 검증합니다.
  8. python
    # 페이지 제목 확인
    assert "Welcome" in driver.page_source
    
  9. 세션 종료: 테스트가 끝난 후 세션을 종료합니다.
  10. python
    driver.quit()
    

3. 고급 테스트 기능

  1. 명시적 대기: 특정 조건이 만족될 때까지 기다립니다.
  2. 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'))
    )
    
  3. 스크린샷 저장: 오류 발생 시 페이지 스크린샷을 저장합니다.
  4. python
    driver.save_screenshot('screenshot.png')
    
  5. 다중 기기 테스트: 다양한 기기에서 동일한 테스트를 실행합니다.
  6. 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. 테스트 스크립트 저장소에 추가

  1. 코드 저장소 생성: GitHub, GitLab, Bitbucket 등의 서비스에서 새로운 코드 저장소(repository)를 생성합니다.
  2. 테스트 스크립트 추가: Appium 테스트 스크립트를 저장소에 추가하고 버전 관리를 시작합니다.
  3. 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 설정

  1. 워크플로우 파일 생성: 저장소의 .github/workflows 디렉토리에 appium-tests.yml 파일을 생성합니다.
  2. 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/  # 테스트 스크립트 경로
    
  3. 커밋 및 푸시: 위 파일을 커밋하고 저장소에 푸시합니다.
  4. bash
    git add .github/workflows/appium-tests.yml
    git commit -m "Add GitHub Actions workflow for Appium tests"
    git push
    

3. 테스트 결과 검토

  1. 워크플로우 실행 확인: GitHub 저장소에서 Actions 탭을 클릭하여 실행된 워크플로우를 확인합니다. 실행 상태와 로그를 통해 테스트 결과를 검토할 수 있습니다.

Jenkins 설정

  1. Jenkins 설치: Jenkins를 설치하고 실행합니다.
    • Jenkins 다운로드 링크
  2. Jenkins 플러그인 설치: Git, Pipeline, 그리고 Appium 플러그인을 설치합니다.
    • Jenkins 관리 > 플러그인 관리 > 사용 가능한 플러그인 > 설치
  3. Jenkins 파이프라인 설정: Jenkins에서 새로운 파이프라인을 생성하고, 아래와 같은 파이프라인 스크립트를 사용합니다.
  4. 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/'  # 테스트 스크립트 경로
                }
            }
        }
    }
    
  5. 파이프라인 실행: Jenkins에서 파이프라인을 실행하여 테스트 결과를 검토합니다.

이와 같은 방법으로 Appium을 사용한 모바일 테스트를 CI/CD 파이프라인에 통합할 수 있습니다.

 

 

 

 

 

백엔드 테스트 자동화

 

백엔드 테스트 자동화

  1. 도구 선택: JUnit, TestNG, Postman, Newman 등과 같은 도구를 사용합니다.
  2. 테스트 계획 수립: 테스트 케이스를 작성하고 자동화할 API 및 비즈니스 로직을 정의합니다.
  3. 코딩 및 스크립팅: 테스트 스크립트를 작성하여 다양한 백엔드 API 및 서비스에 대해 테스트를 실행합니다.
  4. 테스트 실행: 다양한 환경에서 테스트를 실행하고 결과를 분석합니다.
  5. CI/CD 통합: 지속적인 통합 및 배포 파이프라인에 자동화된 테스트를 포함시켜 자동으로 테스트를 실행합니다.

이 과정을 통해 각 영역에서 테스트 자동화를 도입하고 구현할 수 있습니다.

 

1. 테스트 계획 수립

  1. 테스트 케이스 작성: 백엔드 API의 다양한 시나리오를 작성합니다. 예를 들어, 각 API 엔드포인트에 대한 정상 케이스 및 오류 케이스를 포함합니다.
  2. 비즈니스 로직 정의: API 호출이 비즈니스 로직과 일치하는지 확인합니다. 예를 들어, 사용자 등록, 로그인, 데이터 검색 등의 API를 테스트합니다.

2. 코딩 및 스크립팅

  1. Postman 설치: Postman을 설치하고 실행합니다.
    • Postman 다운로드 링크
  2. API 요청 만들기: Postman에서 새로운 API 요청을 만듭니다.
    • New 버튼 클릭
    • Request 선택
    • 요청 이름과 컬렉션 선택 또는 새 컬렉션 생성
    • Save to <컬렉션 이름> 클릭
  3. 요청 구성: 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
  4. 테스트 스크립트 작성: Postman의 Tests 탭에서 테스트 스크립트를 작성합니다.
  5. 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. 테스트 실행

  1. 단일 요청 실행: 각각의 API 요청을 Postman에서 개별적으로 실행하여 응답을 확인합니다.
    • Send 버튼을 클릭하여 요청을 실행하고 응답을 검토합니다.
  2. 컬렉션 실행: 여러 요청을 하나의 컬렉션으로 묶어 연속적으로 실행합니다.
    • Postman 상단의 Runner를 클릭하여 컬렉션 러너를 엽니다.
    • 실행할 컬렉션을 선택하고 Run <컬렉션 이름> 버튼을 클릭합니다.
  3. 환경 설정: 다양한 환경(개발, 스테이징, 프로덕션 등)에서 테스트를 실행하려면 환경 변수를 설정합니다.
    • Postman 상단의 환경 드롭다운에서 Manage Environments 클릭
    • 새로운 환경을 추가하고 필요한 변수를 정의합니다.
    • 예:

4. CI/CD 통합

  1. Newman 설치: Newman은 Postman 컬렉션을 명령줄에서 실행할 수 있게 해줍니다.
  2. bash
    npm install -g newman
    
  3. Postman 컬렉션 내보내기: Postman에서 테스트할 컬렉션을 내보냅니다.
    • Collections 탭에서 해당 컬렉션 우클릭 후 Export 선택
    • JSON 형식으로 컬렉션을 저장합니다.
  4. Newman으로 테스트 실행: 내보낸 컬렉션을 Newman을 사용하여 명령줄에서 실행합니다.
  5. bash
    newman run /path/to/your/collection.json -e /path/to/your/environment.json
    
  6. CI 도구 설정: Jenkins, GitHub Actions, GitLab CI 등의 CI 도구에서 Newman을 실행하는 스크립트를 설정합니다.
  7. 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
    
  8. 테스트 결과 검토: CI 도구에서 제공하는 로그와 보고서를 통해 테스트 결과를 검토합니다.

이와 같은 방법으로 Postman을 사용하여 백엔드 테스트 자동화를 구현할 수 있습니다.