Robot Framework는 코드 우선 도구와는 다른 입장을 취합니다. 테스트를 프로그램 코드로 작성하는 대신, 사람이 읽을 수 있는 키워드 테이블로 작성합니다. 테스트는 거의 체크리스트처럼 읽히므로, QA 분석가와 엔지니어가 동일한 스위트를 작성하고 검토할 수 있습니다. API 테스트의 경우, RequestsLibrary는 HTTP 호출을 이러한 읽기 쉬운 키워드로 변환합니다.
이 가이드에서는 Robot Framework를 사용하여 API 테스트를 처음부터 끝까지 자동화하는 방법을 보여줍니다. 프레임워크와 필요한 라이브러리를 설치하고, 첫 번째 키워드 기반 테스트를 작성하고, 요청 전반에 걸쳐 세션을 관리하고, 상태 코드와 JSON 본문을 어설션하고, 스위트 확장을 위한 재사용 가능한 키워드를 구축할 것입니다. 모든 예시는 Robot Framework가 실제로 사용하는 키워드-테이블 구문입니다.
Robot Framework는 무엇이며 API 테스트에 적합한 이유
Robot Framework는 테스트 자동화 및 로봇 프로세스 자동화를 위한 오픈 소스 범용 자동화 프레임워크입니다. 그 특징적인 기능은 키워드 기반 구문입니다: 테스트는 일반 테이블로 작성되며, 복잡한 동작은 Python 또는 Java로 구현된 키워드 라이브러리로부터 구축됩니다.
API 테스트의 경우 두 가지 실질적인 이점이 있습니다. 첫째, 코딩을 하지 않는 사람들도 테스트를 읽을 수 있으므로 테스터나 제품 소유자가 스위트가 무엇을 검증하는지 파악할 수 있습니다. 둘째, 프레임워크는 확장 가능합니다: RequestsLibrary는 Python requests 라이브러리를 래핑하고 HTTP 작업을 키워드로 노출하며, 다른 라이브러리는 JSON, 데이터베이스 등을 다룹니다. 키워드 기반 구조가 처음이라면, 당사의 더 넓은 자동화 테스트 프레임워크 가이드에서 다른 프레임워크 유형 중 어디에 속하는지 설명합니다.
Robot Framework 및 해당 라이브러리 설치
Robot Framework 및 해당 라이브러리는 pip를 통해 설치됩니다. 프로젝트를 깔끔하게 유지하려면 가상 환경 내에서 작업하세요:
python -m venv .venv
source .venv/bin/activate
pip install robotframework
pip install robotframework-requests
pip install robotframework-jsonlibrary
이 세 가지 패키지는 대부분의 API 테스트 요구 사항을 충족합니다:
robotframework는 핵심 엔진이자 테스트 러너입니다.robotframework-requests(RequestsLibrary)는 HTTP 요청을 키워드로 보냅니다.robotframework-jsonlibrary는 JSON 응답 내부의 값을 추출하고 검증합니다.
robot --version으로 설치를 확인하세요. 스위트가 커질수록 공식 Robot Framework 사용자 가이드는 구문 질문에 대한 참조 자료가 됩니다.
초보자들이 실수하기 쉬운 한 가지 세부 사항이 있습니다: Robot Framework는 공백에 민감합니다. 키워드와 인수는 하나가 아닌 최소 두 개의 공백으로 구분됩니다. 단일 공백은 동일한 토큰의 일부로 처리됩니다. Robot Framework 플러그인이 있는 대부분의 편집기는 이 문제를 자동으로 처리하지만, 테스트 구문 분석에 실패하면 잘못된 공백을 먼저 확인해야 합니다.
첫 번째 API 테스트 작성
Robot Framework 테스트 파일은 .robot 확장자를 사용하며 *** Settings ***, *** Variables ***, *** Test Cases ***로 표시된 섹션으로 나뉩니다. 다음은 사용자 엔드포인트를 확인하는 완전한 파일입니다:
*** Settings ***
Library RequestsLibrary
Library Collections
*** Variables ***
${BASE_URL} https://api.example.com/v1
*** Test Cases ***
Get User Returns 200
Create Session api ${BASE_URL}
${response}= GET On Session api /users/42
Status Should Be 200 ${response}
Get User Returns Expected Email
Create Session api ${BASE_URL}
${response}= GET On Session api /users/42
${body}= Set Variable ${response.json()}
Should Be Equal As Integers ${body}[id] 42
Should Be Equal ${body}[status] active
*** Settings *** 섹션은 라이브러리를 가져옵니다. Create Session은 명명된 HTTP 세션을 엽니다. GET On Session은 요청을 보내고 응답 객체를 반환합니다. Status Should Be 및 Should Be Equal은 어설션 키워드입니다. robot tests.robot로 스위트를 실행하면 Robot Framework는 HTML 보고서와 로그를 자동으로 생성합니다.
세션 작업
Create Session은 기본 URL을 저장하는 것 이상의 기능을 합니다. 세션은 기본 헤더, 인증 및 쿠키를 보유하므로 해당 세션에서 이루어진 모든 요청은 해당 상태를 상속받습니다. 이는 로그인이 필요한 모든 API에 중요합니다. 한 번 인증하고 세션을 재사용하기 때문입니다.
*** Test Cases ***
Create Order With Authenticated Session
Create Session api ${BASE_URL}
${login}= POST On Session api /auth/login
... json={"email": "qa@example.com", "password": "test-pass"}
${token}= Set Variable ${login.json()}[token]
${headers}= Create Dictionary Authorization=Bearer ${token}
${order}= POST On Session api /orders
... json={"product_id": 7, "quantity": 2}
... headers=${headers}
Status Should Be 201 ${order}
... 구문은 키워드 호출을 다음 줄로 이어가서 긴 요청을 읽기 쉽게 유지합니다. Create Dictionary는 헤더 맵을 만듭니다. 세션이 지속되므로 여러 후속 요청을 다시 생성하지 않고도 수행할 수 있습니다. 세션에 대한 RequestsLibrary 키워드는 RequestsLibrary 참조에 문서화되어 있습니다.
응답 본문 어설션
상태 코드를 확인하는 것이 첫 번째 단계입니다. 본문을 확인하려면 JSON을 파싱하고 필드를 어설션해야 합니다. Robot Framework의 내장 키워드는 동등성과 포함을 다루며, JSONLibrary는 경로 기반 추출을 추가합니다:
*** Settings ***
Library RequestsLibrary
Library JSONLibrary
Library Collections
*** Variables ***
${BASE_URL} https://api.example.com/v1
*** Test Cases ***
Order Response Has Correct Shape
Create Session api ${BASE_URL}
${response}= POST On Session api /orders
... json={"product_id": 7, "quantity": 2}
Status Should Be 201 ${response}
${body}= Set Variable ${response.json()}
Dictionary Should Contain Key ${body} total
Should Be Equal As Integers ${body}[quantity] 2
${status}= Get Value From Json ${body} $.status
Should Be Equal ${status}[0] pending
Dictionary Should Contain Key는 필드가 존재하는지 확인합니다. Should Be Equal As Integers는 유형 불일치 오류 없이 숫자 값을 비교합니다. Get Value From Json은 JSONPath 표현식을 사용하여 중첩된 데이터에 접근합니다. API 응답에 대해 실행할 가치가 있는 더 넓은 범위의 확인을 위해, API 어설션 가이드가 좋은 참고 자료입니다.
재사용 가능한 키워드 구축
모든 테스트에서 Create Session 및 로그인 흐름을 반복하는 것은 키워드 기반의 복사-붙여넣기와 같습니다. Robot Framework는 *** Keywords *** 섹션에서 자신만의 키워드를 정의할 수 있도록 하여, 공통 단계를 단일하고 읽기 쉬운 줄로 만듭니다:
*** Keywords ***
Authenticate And Open Session
Create Session api ${BASE_URL}
${login}= POST On Session api /auth/login
... json={"email": "qa@example.com", "password": "test-pass"}
${token}= Set Variable ${login.json()}[token]
Set Suite Variable ${AUTH_HEADERS} Bearer ${token}
*** Test Cases ***
Create Order
Authenticate And Open Session
${headers}= Create Dictionary Authorization=${AUTH_HEADERS}
${order}= POST On Session api /orders
... json={"product_id": 7, "quantity": 2} headers=${headers}
Status Should Be 201 ${order}
사용자 지정 키워드는 Robot Framework 스위트가 유지 관리 가능하게 유지되는 방법입니다. 로그인 엔드포인트가 변경될 때, 모든 테스트를 편집하는 대신 하나의 키워드만 편집합니다. 더 큰 스위트의 경우, 공유 키워드를 리소스 파일로 이동하고 가져오는데, 이는 자동화된 테스트 스크립트 작성 방법 가이드에 설명된 모듈식 원칙과 동일합니다.
리소스 파일은 테스트 케이스가 없고 *** Keywords *** 및 *** Variables *** 섹션만 있는 .robot 파일입니다. 설정에서 Resource common.robot를 사용하여 테스트 파일에서 가져옵니다. 이렇게 하면 로그인 흐름, 기본 URL 및 기타 공유 요소가 한 곳에 유지됩니다. 프로젝트가 성장함에 따라 일반적인 레이아웃은 API 영역당 하나의 리소스 파일과 전역 설정을 위한 최상위 파일을 갖습니다. 테스트 케이스와 지원 로직의 이러한 분리는 키워드 기반 구조의 핵심이며, 당사의 더 넓은 자동화 테스트 프레임워크 가이드에서 확장되는 이유를 설명합니다.
CI에서 Robot Framework 실행
Robot Framework는 헤드리스로 실행되며 실패 시 0이 아닌 종료 코드를 반환합니다. 이는 빌드 실패에 필요한 것입니다. 또한 러너는 매 실행 후 output.xml, log.html, report.html을 작성하므로, 추가 구성 없이 CI 아티팩트를 사용할 수 있습니다.
몇 가지 플래그를 사용하면 CI 실행이 더 깨끗해집니다. --outputdir을 사용하여 보고서를 알려진 폴더로 보내고, --include 및 --exclude를 태그와 함께 사용하여 하위 집합을 실행하고, 변수 파일 또는 --variable을 사용하여 테스트 파일을 편집하지 않고 기본 URL 및 자격 증명과 같은 환경별 값을 주입합니다:
robot --outputdir results --variable BASE_URL:https://staging.example.com/v1 tests/
[Tags]로 테스트에 태그를 지정하여 모든 커밋에서 빠른 스모크 테스트 세트를 실행하고 매일 밤 전체 스위트를 실행할 수 있습니다. GitHub Actions 또는 다른 파이프라인에 이를 연결하는 것은 CI/CD의 API 테스트 가이드와 동일한 패턴을 따릅니다: 종속성 설치, 명령 실행, 보고서 아티팩트 게시.
전용 API 플랫폼이 더 도움이 될 때
Robot Framework는 다양한 기술을 가진 팀이 공유할 수 있는 읽기 쉬운 키워드 기반 테스트를 원할 때 강력한 선택입니다. 그러나 API 설계, 목킹, 디버깅을 한 곳에서 모두 필요로 하거나, 라이브러리를 조합하지 않고 OpenAPI 사양에 대한 스키마 유효성 검사를 원할 때는 덜 편리합니다.
Apidog는 이러한 요구 사항을 직접 처리합니다. 시각적 테스트 빌더, 자동 OpenAPI 스키마 유효성 검사, CSV 및 JSON을 통한 데이터 기반 실행, 환경 관리, HTML 보고서를 제공하며, CI용 CLI 러너도 있습니다. 팀은 종종 둘 다 사용합니다: 키워드 기반 가독성이 가장 중요한 곳에서는 Robot Framework를 사용하고, 테스트 중인 API를 설계, 목킹 및 광범위하게 테스트하는 데는 Apidog를 사용합니다. Apidog를 다운로드하여 키워드 라이브러리를 작성하지 않고도 작동하는 API 테스트 스위트를 구축할 수 있습니다.
자주 묻는 질문
Robot Framework는 UI 테스트 전용인가요?
아닙니다. Robot Framework는 범용 자동화 프레임워크입니다. RequestsLibrary를 사용하면 API 테스트를 잘 처리하며, 다른 라이브러리는 데이터베이스, SSH 등을 다룹니다. 키워드 기반 설계는 계층에 구애받지 않습니다. 이 프레임워크는 SeleniumLibrary를 통해 UI 테스트에 인기를 얻었지만, API 테스트도 동등하게 일반적인 용도입니다.
Create Session과 일반 요청의 차이점은 무엇인가요?
Create Session은 기본 URL, 헤더, 쿠키 및 인증을 저장하는 명명된 영구 HTTP 세션을 엽니다. GET On Session과 같은 후속 키워드는 해당 상태를 재사용하며, 이는 로그인이 필요한 API에 필수적입니다. 세션이 없는 요청은 호출 간에 쿠키나 인증을 전달하지 않으므로 매번 모든 것을 다시 보내야 합니다.
Robot Framework를 사용하려면 Python을 알아야 하나요?
테스트를 작성하는 데는 아닙니다. 키워드-테이블 구문은 비프로그래머를 위해 설계되었으며, RequestsLibrary는 이미 HTTP 작업을 키워드로 노출합니다. Python 지식은 완전히 새로운 키워드 라이브러리를 작성하려는 경우에만 유용합니다. 대부분의 API 테스트 요구 사항은 기존 라이브러리로 충족되므로 많은 팀은 Python을 전혀 작성하지 않습니다.
API 테스트에서 Robot Framework는 pytest와 어떻게 비교되나요?
Pytest는 코드 우선 방식이며 애플리케이션 코드 옆에 테스트를 원하는 Python 팀에 적합합니다. Robot Framework는 키워드 기반 방식이며 읽기 쉬운 테이블 스타일 테스트를 중요하게 생각하는 다양한 기술을 가진 팀에 적합합니다. 둘 다 CI에서 실행되며 보고서를 생성합니다. 선택은 순수한 기능보다는 누가 스위트를 작성하고 유지 관리하는지에 달려 있습니다.
Robot Framework는 OpenAPI 스키마에 대해 응답 유효성을 검사할 수 있나요?
기본적으로는 아닙니다. 내장 키워드와 JSONLibrary를 사용하여 개별 필드를 어설션할 수 있으며, 커뮤니티 라이브러리는 스키마 검사를 추가합니다. OpenAPI 문서에 대한 자동 유효성 검사가 워크플로우의 핵심이라면, Apidog와 같이 이를 기본적으로 수행하는 플랫폼이 라이브러리 조립 및 유지 보수를 절약해 줄 것입니다.
