소프트웨어 개발 및 설계

테스트 자동화 : 예시 코드

♠디지털 모험일지♠ 2024. 12. 13. 10:42
728x90
반응형
SMALL

테스트 자동화의 중요성

소프트웨어 개발에서 테스트 자동화는 아주 중요한 역할을 합니다. 간단히 말해서, 사람이 손으로 직접 테스트하지 않고, 컴퓨터가 대신 테스트를 실행하도록 만드는 것입니다. 이렇게 하면 시간을 절약하고, 실수를 줄이며, 프로그램이 예상대로 동작하는지 더 자주 확인할 수 있습니다.


테스트 자동화란?

  • 수동 테스트
    • 단점: 시간이 오래 걸리고, 반복적인 작업에서 실수가 발생할 수 있음.
  • : 사람이 직접 버튼을 클릭하거나 입력값을 넣어 결과를 확인하는 테스트 방식입니다.
  • 자동화 테스트테스트 스크립트
    • 장점: 빠르고 정확하게 반복적인 테스트를 수행할 수 있음.
  • (테스트를 실행하는 코드)를 사용하여 테스트를 수행합니다.
  • : 컴퓨터가 미리 작성된

테스트 자동화 도구 소개

  1. Selenium (셀레니움)
    • 주로 웹 애플리케이션 테스트에 사용됩니다.
    • 브라우저를 열고, 버튼을 클릭하거나 폼에 데이터를 입력하는 작업을 자동으로 수행합니다.
  2. Pytest (파이테스트)
    • Python에서 단위 테스트와 통합 테스트를 작성하고 실행하는 데 사용됩니다.
    • 간단하고 직관적인 문법 덕분에 초보자도 쉽게 사용할 수 있음.
  3. JUnit (제이유닛)
    • Java 기반 애플리케이션에서 단위 테스트를 수행하기 위한 도구입니다.
    • Java 개발자들에게 가장 널리 사용되는 테스트 도구입니다.

자동화가 단위 테스트와 통합 테스트에 제공하는 이점

1. 빠른 테스트 실행

  • 수동으로 테스트하면 1시간 걸리는 작업도, 자동화 도구를 사용하면 몇 초 만에 끝날 수 있습니다.

2. 반복 작업의 효율화

  • 같은 테스트를 여러 번 반복해야 할 때, 자동화는 매우 유용합니다.
    • 예: 매일 새로운 기능을 추가할 때마다 기존 기능이 망가졌는지 확인해야 하는 경우.

3. 더 높은 정확성

  • 사람이 테스트할 때는 실수할 수 있지만, 컴퓨터는 정해진 테스트 스크립트를 항상 똑같이 실행합니다.

4. 비용 절감

  • 처음엔 자동화 스크립트를 작성하는 데 시간이 걸리지만, 이후 테스트를 반복 실행할 때 드는 시간과 비용이 크게 줄어듭니다.

예시 코드

Selenium으로 웹 애플리케이션 테스트하기

from selenium import webdriver
from selenium.webdriver.common.by import By

# 브라우저 열기 (Chrome 사용)
driver = webdriver.Chrome()

# 테스트할 웹사이트 열기
driver.get("https://example.com/login")

# 사용자명과 비밀번호 입력
username_input = driver.find_element(By.ID, "username")
password_input = driver.find_element(By.ID, "password")
login_button = driver.find_element(By.ID, "login-button")

username_input.send_keys("testuser")  # 사용자명 입력
password_input.send_keys("password123")  # 비밀번호 입력
login_button.click()  # 로그인 버튼 클릭

# 테스트: 로그인 성공 메시지가 화면에 있는지 확인
success_message = driver.find_element(By.ID, "success-message")
assert "Welcome" in success_message.text, "로그인 실패"

# 브라우저 닫기
driver.quit()

설명

  1. Selenium을 사용해 브라우저를 열고, 웹 페이지의 특정 요소(사용자명, 비밀번호 입력 필드)를 찾습니다.
  2. send_keys 메서드로 값을 입력하고, 버튼을 클릭합니다.
  3. 로그인 성공 메시지를 확인하여 테스트가 성공했는지 판단합니다.

Pytest로 단위 테스트 자동화

# 테스트할 코드: 간단한 덧셈 함수
def add(a, b):
    return a + b

# Pytest 단위 테스트
def test_add():
    assert add(2, 3) == 5  # 2 + 3 = 5
    assert add(-1, 1) == 0  # -1 + 1 = 0
    assert add(0, 0) == 0  # 0 + 0 = 0

설명

  1. add라는 간단한 덧셈 함수를 작성합니다.
  2. test_add 함수에서 다양한 입력값에 대해 예상 결과를 확인합니다.
  3. Pytest는 assert 문을 통해 결과가 예상과 다른 경우 테스트 실패로 처리합니다.

JUnit으로 Java 단위 테스트

java코드 복사// 테스트할 코드: 덧셈 메서드
public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
}

// JUnit 단위 테스트
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class CalculatorTest {
    @Test
    void testAdd() {
        Calculator calculator = new Calculator();
        assertEquals(5, calculator.add(2, 3)); // 2 + 3 = 5
        assertEquals(0, calculator.add(-1, 1)); // -1 + 1 = 0
        assertEquals(0, calculator.add(0, 0)); // 0 + 0 = 0
    }
}

설명

  1. Calculator 클래스에서 add 메서드를 정의합니다.
  2. CalculatorTest 클래스에서 JUnit을 사용해 add 메서드를 테스트합니다.
  3. assertEquals 메서드로 실제 결과와 예상 결과를 비교합니다.

결론

테스트 자동화는 반복 작업을 줄이고, 더 빠르고 정확한 테스트를 가능하게 하며, 소프트웨어 개발의 생산성과 품질을 높이는 데 중요한 역할을 합니다.

 

2024.12.05 - [소프트웨어 개발 및 설계] - 단위 테스트(Unit Test)와 통합 테스트(Integration Test) : 예시코드

 

단위 테스트(Unit Test)와 통합 테스트(Integration Test) : 예시코드

단위 테스트(Unit Test)와 통합 테스트(Integration Test)소프트웨어 개발에서 테스트는 프로그램이 잘 작동하는지 확인하는 중요한 단계입니다. 여기에서 많이 쓰이는 두 가지 테스트 종류를 살펴볼게

alswnsghd1234.tistory.com

 

반응형
SMALL