ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • API 테스트
    테스팅 관련/테스트 2020. 9. 10. 02:20

     

     

    소프트웨어 테스트 유형 중 하나인,

    API 테스트

    • API직접 테스트
    • 통합테스트(Integration testing)의 일부로서, API가 기능성, 안정성, 성능 및 보안에 대한 기대를 충족시키는지에 대해 확인
    • API 테스트는 메세지 계층에서 행해짐 (API에는 GUI 존재 X)
    • 애플리케이션 로직을 매우 빠르고 효과적이게 검증할 수 있음

     

     

    API 테스트는 자동화 테스트CI/CD 프로세스에서 중요하게 여겨진다.

    • 짧은 릴리즈 주기빈번한 변경, 특히 테스트 출력(output)을 손상시키지 않고, 프레젠테이션 계층에 대처
    • UI 자동화 테스트에 비해 유지/관리 노력이 필요하므로, 애자일 및 데브옵스에서 선호

     

     

    웹/모바일 애플리케이션에서는,

    API = 웹 서비스

    API 테스트 = 웹 서비스에 수행되는 자동화 테스트

     

     

    개발자작업 중인 기능들만 테스트하는 경향이 있지만,

    테스터개별 기능들과 연속/체인 기능들 및 기능들이 처음부터 끝까지 어떻게 함께 작동을 하는지까지 담당한다.

     

     

    모든 데이터 액세스(읽기/쓰기)가 API를 통해서만 이루어지도록 보장 → 인터페이스가 하나!

    보안 및 컴플라이언스 테스트와 인증이 크게 단순화됨

     


     

    애플리케이션은,

    프레젠테이션 계층 - 사용자 인터페이스(UI)

    비즈니스 계층 - 애플리케이션 사용자 인터페이스

    데이터베이스 계층 - 데이터 모델링 및 조작

     

    비즈니스 계층: 비즈니스 로직 처리 수행, UI와 DB 간의 모든 트랜잭션 발생 → 가장 중요한 계층

     

    API 테스트는 비즈니스 계층에서 수행!

     

     


    API 테스트를 하는 이유

    1. API가 해야할 일을 수행하는지 확인하기 위해
    2. 부하(Load)를 처리할 수 있는지 확인하기 위해
    3. 사용자가 망가트릴 수 있는 모든 방법을 찾기 위해
    4. 디바이스, 브라우저, OS 등에서 작동하는지 확인하기 위해
    5. 테스트를 안 했을 시, 추후 비용이 높아질 수 있어서

    API 테스트 장점

    • 언어 독립적
      • 데이터는 XML 및 JSON을 통해 교환되므로, 애플리케이션 개발 언어와 관계없이 모든 언어를 자동화에 사용할 수 있음
      • XML과 JSON은 일반적으로 구조화된 데이터이므로 검증(verification)이 빠르고 안정적
      • 이러한 데이터 형식을 사용하여 데이터 비교를 지원하는 내장 라이브러리도 있음

     

    • GUI 독립적
      • GUI 테스트 전에 애플리케이션 내에서 API 테스트를 수행 할 수 있음
      • 초기 테스트는 피드백을 더 빨리 받고 팀의 생산성을 향상
      • 핵심 기능을 테스트하여 작은 오류를 노출하고 빌드의 강점을 평가할 수 있음

     

    • 향상된 테스트 커버리지
      • 대부분 API/서비스는 자동화된 테스트(+높은 커버리지)를 생성할 수 있으며, 기능성/비기능성 테스팅을 포함하는 스펙(Specification)을 가지고 있음
      • 가상 사용자 기술을 사용하면 거의 모든 API 테스트 케이스를 자동화시킬 수 있음

     

    • 더 빠른 릴리스
      • UI 회귀 테스트 스위트(suite) 실행 (8-10 시간) > API 테스트 사용 동일 시나리오 (1-2 시간)
      • API 테스트 불안정함 < UI 테스트 불안정함
      • API 테스트를 통해 더 빠르게 출시 할 수 있음

    API 테스트 유형

    기능 테스트 → API가 잘 작동하고 해야할 일은 정확하게 하는지 (코드베이스의 특정 기능 테스트 포함, API 기능이 예상된 매개 변수 내에서 잘 처리되도록 특정 시나리오 표현)

     

    End-to-End 테스트 UI 테스트 = API 및 기타 필수 부분에 대한 사용자 인터페이스 테스트

     

    부하 테스트 → API가 많은 양의 호출을 처리할 수 있는지

    시나리오

    • 기준 - API가 일반적인 사용에서 기대하는 이론적 일반 트래픽에 대해 테스트
    • 이론상 최대 트래픽 - 전부하(full-load)에서 솔루션이 해당 요청에 적절하게 응답하는지 확인
    • 과부하 - 이론에 따른 최대 기능 테스트 이후 최대 트래픽에 10~20% 더 추가

     

    런타임/오류 감지 → API 실제 실행에 관련 (특히, API 코드베이스를 이용한 일반적인 결과) [모니터링, 실행 오류, 리소스 누수(leaks), 오류 감지 중 하나에 중점을 둠]

     

    보안 테스트 → API가 인증, 권한 및 엑세스 제어를 포함한 보안 요구 사항을 정의하는지, API 구현이 외부 위협으로부터 안전한지 확인 [침투 및 퍼지 테스트, 암호화 방법론의 유효성 검사, API에 대한 액세스 제어 설계, 리소스에 엑세스하기위한 사용자 권한 관리 및 인증 확인]

     

    침투(Penetration) 테스트 → 제한된 API 지식을 가진 사용자는 기능, 리소스, 프로세스 또는 전체 API 및 해당 구성요소를 목표로 하는 외부 관점에서 위협 벡터를 평가하거나 하기 위해 공격을 시도

     

    퍼즈(Fuzz) 테스트 → 강제 충돌 또는 부정적 동작을 시도하기 위해 방대한 양의 임의 데이터(노이즈 또는 퍼즈)가 시스템에 입력됨

     

    검증(Validation) 테스트 → 최종 단계 중 하나이며, 개발 프로세스에서 필수적 역할!  제품, 동작 및 효율성 측면 확인 및 명시된 사용자 요구 사항과 그에 대한 올바른 개발을 보장

     

    신뢰성(Reliability) 테스트 → API가 지속적으로 연결될 수 있고 지속적인 결과를 가져올 수 있는지

     

    창의성(Creativity) 테스트 → API가 다양한 방식으로 사용되는 것을 처리할 수 있는지

     

    숙련도(Proficiency) 테스트 → API가 개발자가 수행할 수 있는 부분을 확장시키는지

     

    네거티브 테스트 → 사용자가 제공할 수 있는 모든 종류의 잘못된 입력 확인

     

    일반적인 API 테스트 예제

    • 입력 조건에 따른 API 반환값 확인
    • API가 아무것도 반환하지 않거나 잘못된 결과를 반환하는지 확인
    • API가 다른 이벤트를 트리거하는지 또는 다른 API를 호출하는지 확인
    • API가 데이터 구조를 업데이트하고 있는지 확인

     


    수동 테스트 사용

    • 탐색적(Exploratory) 테스트
    • 사용성 테스트
    • 애드혹(Ad-hoc) 테스트

    자동 테스트 사용

    • API 기능 테스트
    • 동적(Dynamic) 테스트
    • 반복 테스트 디자인
    • 기능 테스트 커버리지를 분석하여 놓친 부분 파악
    • 성능(Performance) 시험
    • 단일(Single), 통합(Unified) 프레임워크에서 프로토콜 테스트
    • 데이터 기반 테스트(DDT)
    • 로드(Load) 테스트
    • 오류 테스트
    • 여러 언어로 테스트
    • 회귀(Regression) 테스트

    API 테스트를 위한 팁 10가지

    1. 전형적인 또는 예상되는 결과를 먼저 테스트하기
    2. 연속적인 API 로드 테스트를 통해 시스템에 스트레스를 가중시키기
    3. 실패(Failure) 테스트하기 (API가 어떻게 실패하는지 이해하기 - 지속적이고 정상적으로 실패하는지 확인)
    4. 테스트 카테고리에 의해 테스트 케이스 그룹 생성하기
    5. 빠르고 쉽게 테스트할 수 있도록, API 함수(function) 호출(calls)의 우선 순위 지정하기
    6. 가능한 한 분리된 상태로 유지함으로서, 최대한 많은 변수로부터 테스트를 제한하기
    7. 가능한 많은 상황에 적용시켜서, 예상치 못한 문제와 로드를 어떻게 처리하는지 확인하기
    8. 잘 계획된 <API 호출(call) 순서 지정>하기
    9. 완전한 테스트 커버리지를 위해, 가능한 모든 API 입력값 조합에 대한 테스트 케이스 생성하기
    10. 자동화할 수 있으면, 자동화하기

    유닛 테스트 API 테스트
    개발자가 수행 테스터가 수행
    독립된 기능성 테스트 기능을 처음부터 끝까지(End-to-End) 테스트
    개발자가 소스 코드에 접근 가능 테스터가 소스 코드에 접근 불가
    UI 테스트 포함 API functions'만' 테스트
    기본 기능들만 테스트 모든 기능적 이슈 테스트
    범위 한정적 넓은 범위
    체크인 전에 실행 빌드 생성 후 실행
Designed by Tistory.