TL;DR

  • Robot Framework usa enfoque keyword-driven — tests legibles sin programar
  • Tests escritos en formato tabular (plain text, archivos .robot)
  • SeleniumLibrary para web testing, RequestsLibrary para APIs
  • Crea keywords personalizados para encapsular lógica compleja
  • Reportes integrados e integración CI/CD

Ideal para: Equipos con habilidades técnicas mixtas, acceptance testing, RPA Omite si: Necesitas máxima flexibilidad (usa Python/pytest directamente) Tiempo de lectura: 15 minutos

Tu equipo incluye testers manuales que no programan. La gerencia quiere reportes de tests legibles. Los tests necesitan ser mantenibles por no-desarrolladores.

Robot Framework resuelve esto. Los tests se escriben con keywords en inglés simple. Cualquiera puede leerlos. Los desarrolladores pueden extenderlos. Los reportes se generan automáticamente.

Este tutorial cubre Robot Framework desde setup hasta integración CI/CD — todo para automatización keyword-driven.

¿Qué es Robot Framework?

Robot Framework es un framework de automatización open-source genérico para acceptance testing, acceptance test-driven development (ATDD) y robotic process automation (RPA). Usa un enfoque keyword-driven donde los tests se escriben en formato tabular legible por humanos.

Por qué Robot Framework:

  • Sintaxis legible — tests parecen lenguaje natural
  • Fácil de aprender — no-programadores pueden escribir tests
  • Extensible — bibliotecas Python/Java extienden funcionalidad
  • Reportes integrados — reportes HTML generados automáticamente
  • Gran ecosistema — bibliotecas para web, API, móvil, desktop

Instalación

Setup

# Instalar Robot Framework
pip install robotframework

# Instalar SeleniumLibrary para web testing
pip install robotframework-seleniumlibrary

# Instalar RequestsLibrary para API testing
pip install robotframework-requests

# Instalar Browser Library (alternativa basada en Playwright)
pip install robotframework-browser
rfbrowser init

# Verificar instalación
robot --version

Estructura del Proyecto

project/
├── tests/
│   ├── login_tests.robot
│   ├── api_tests.robot
│   └── __init__.robot
├── resources/
│   ├── keywords.robot
│   ├── variables.robot
│   └── pages/
│       └── login_page.robot
├── results/
└── requirements.txt

Sintaxis Básica

Primer Test

*** Settings ***
Library    SeleniumLibrary

*** Variables ***
${BROWSER}    chrome
${URL}        https://example.com

*** Test Cases ***
User Can Open Homepage
    Open Browser    ${URL}    ${BROWSER}
    Title Should Be    Example Domain
    Close Browser

User Can Search For Products
    Open Browser    ${URL}    ${BROWSER}
    Input Text    id=search    robot framework
    Click Button    id=search-btn
    Page Should Contain    Results
    Close Browser

Secciones Explicadas

SecciónPropósito
*** Settings ***Bibliotecas, recursos, setup/teardown
*** Variables ***Datos de test y configuración
*** Test Cases ***Escenarios de test reales
*** Keywords ***Keywords personalizados reutilizables

SeleniumLibrary para Web Testing

Keywords Comunes

*** Settings ***
Library    SeleniumLibrary

*** Test Cases ***
Web Interaction Examples
    # Navegación
    Open Browser    https://example.com    chrome
    Go To    https://example.com/login

    # Input
    Input Text    id=username    testuser
    Input Password    id=password    secret123

    # Clicks
    Click Button    id=submit
    Click Element    xpath=//a[@class='link']
    Click Link    Home

    # Verificación
    Page Should Contain    Welcome
    Page Should Contain Element    id=dashboard
    Element Should Be Visible    class=success-message
    Element Text Should Be    id=greeting    Hello User

    # Esperas
    Wait Until Element Is Visible    id=loading    timeout=10s
    Wait Until Page Contains    Dashboard

    # Obtener valores
    ${text}=    Get Text    id=message
    ${value}=    Get Value    id=input-field
    ${attr}=    Get Element Attribute    id=link    href

    Close Browser

Setup y Teardown

*** Settings ***
Library    SeleniumLibrary
Suite Setup    Open Browser    ${URL}    ${BROWSER}
Suite Teardown    Close All Browsers
Test Setup    Go To    ${URL}
Test Teardown    Capture Page Screenshot

*** Variables ***
${URL}       https://example.com
${BROWSER}    chrome

*** Test Cases ***
Test One
    # Navegador ya abierto desde Suite Setup
    Page Should Contain    Welcome

Test Two
    # Carga fresca de página desde Test Setup
    Click Link    About
    Page Should Contain    About Us

Keywords Personalizados

Creando Keywords

*** Settings ***
Library    SeleniumLibrary

*** Keywords ***
Login With Credentials
    [Arguments]    ${username}    ${password}
    Input Text    id=username    ${username}
    Input Password    id=password    ${password}
    Click Button    id=login-btn
    Wait Until Page Contains Element    id=dashboard

Logout
    Click Element    id=user-menu
    Click Link    Logout
    Wait Until Page Contains    Login

Verify Dashboard Loaded
    Page Should Contain Element    id=dashboard
    Element Should Be Visible    id=welcome-message
    Page Should Not Contain    Error

*** Test Cases ***
Successful Login
    Open Browser    https://example.com/login    chrome
    Login With Credentials    user@example.com    password123
    Verify Dashboard Loaded
    Logout
    Close Browser

Keywords con Valores de Retorno

*** Keywords ***
Get User Name From Dashboard
    ${name}=    Get Text    id=user-name
    [Return]    ${name}

Create User And Get ID
    [Arguments]    ${name}    ${email}
    Input Text    id=name    ${name}
    Input Text    id=email    ${email}
    Click Button    id=create
    Wait Until Page Contains Element    id=user-id
    ${id}=    Get Text    id=user-id
    [Return]    ${id}

*** Test Cases ***
Verify User Creation
    Open Browser    ${URL}    chrome
    ${user_id}=    Create User And Get ID    John Doe    john@example.com
    Should Not Be Empty    ${user_id}
    Log    Created user with ID: ${user_id}
    Close Browser

Patrón Page Object

Archivo Page Resource

# resources/pages/login_page.robot
*** Settings ***
Library    SeleniumLibrary

*** Variables ***
${LOGIN_URL}           https://example.com/login
${USERNAME_FIELD}      id=username
${PASSWORD_FIELD}      id=password
${LOGIN_BUTTON}        id=login-btn
${ERROR_MESSAGE}       class=error-msg
${DASHBOARD}           id=dashboard

*** Keywords ***
Navigate To Login Page
    Go To    ${LOGIN_URL}

Enter Username
    [Arguments]    ${username}
    Input Text    ${USERNAME_FIELD}    ${username}

Enter Password
    [Arguments]    ${password}
    Input Password    ${PASSWORD_FIELD}    ${password}

Click Login Button
    Click Button    ${LOGIN_BUTTON}

Login Should Succeed
    Wait Until Page Contains Element    ${DASHBOARD}    timeout=10s

Login Should Fail With Message
    [Arguments]    ${expected_message}
    Element Should Be Visible    ${ERROR_MESSAGE}
    Element Text Should Be    ${ERROR_MESSAGE}    ${expected_message}

Login As User
    [Arguments]    ${username}    ${password}
    Navigate To Login Page
    Enter Username    ${username}
    Enter Password    ${password}
    Click Login Button

Usando Page Objects

*** Settings ***
Library    SeleniumLibrary
Resource    resources/pages/login_page.robot
Suite Setup    Open Browser    ${URL}    ${BROWSER}
Suite Teardown    Close All Browsers

*** Variables ***
${URL}        https://example.com
${BROWSER}    chrome

*** Test Cases ***
Valid Login
    Login As User    user@example.com    password123
    Login Should Succeed

Invalid Password
    Login As User    user@example.com    wrongpassword
    Login Should Fail With Message    Invalid credentials

Data-Driven Testing

Test Templates

*** Settings ***
Library    SeleniumLibrary
Test Template    Login Should Fail For Invalid Credentials

*** Test Cases ***        USERNAME              PASSWORD        ERROR
Empty Username            ${EMPTY}              password123     Username required
Empty Password            user@example.com      ${EMPTY}        Password required
Invalid Email Format      invalid-email         password123     Invalid email format
Wrong Password            user@example.com      wrongpass       Invalid credentials

*** Keywords ***
Login Should Fail For Invalid Credentials
    [Arguments]    ${username}    ${password}    ${expected_error}
    Open Browser    https://example.com/login    chrome
    Input Text    id=username    ${username}
    Input Password    id=password    ${password}
    Click Button    id=login
    Element Text Should Be    class=error    ${expected_error}
    Close Browser

API Testing

*** Settings ***
Library    RequestsLibrary
Library    Collections

*** Variables ***
${BASE_URL}    https://jsonplaceholder.typicode.com

*** Test Cases ***
Get All Users
    Create Session    api    ${BASE_URL}
    ${response}=    GET On Session    api    /users
    Status Should Be    200    ${response}
    ${users}=    Set Variable    ${response.json()}
    Length Should Be    ${users}    10

Create New Post
    Create Session    api    ${BASE_URL}
    ${body}=    Create Dictionary    title=Test Post    body=Content    userId=1
    ${response}=    POST On Session    api    /posts    json=${body}
    Status Should Be    201    ${response}
    ${post}=    Set Variable    ${response.json()}
    Should Be Equal    ${post['title']}    Test Post

Delete Post
    Create Session    api    ${BASE_URL}
    ${response}=    DELETE On Session    api    /posts/1
    Status Should Be    200    ${response}

Integración CI/CD

GitHub Actions

name: Robot Framework Tests

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.11'

      - name: Install dependencies
        run: |
          pip install robotframework robotframework-seleniumlibrary

      - name: Run tests
        run: |
          robot --outputdir results tests/

      - name: Upload results
        uses: actions/upload-artifact@v4
        if: always()
        with:
          name: robot-results
          path: results/

Ejecutando Tests

# Ejecutar todos los tests
robot tests/

# Ejecutar archivo específico
robot tests/login_tests.robot

# Ejecutar con tags
robot --include smoke tests/
robot --exclude slow tests/

# Ejecutar con variables
robot --variable BROWSER:firefox --variable URL:https://staging.example.com tests/

# Output a directorio específico
robot --outputdir results tests/

Robot Framework con Asistencia de IA

Las herramientas de IA pueden ayudar a escribir y mantener tests de Robot Framework.

Lo que la IA hace bien:

  • Generar keywords desde user stories
  • Crear variaciones de datos de test
  • Convertir casos de test manuales a sintaxis Robot
  • Sugerir library keywords

Lo que aún necesita humanos:

  • Entender requisitos de negocio
  • Diseñar arquitectura de tests
  • Depurar fallas complejas
  • Mantener page objects

FAQ

¿Qué es Robot Framework?

Robot Framework es un framework de automatización open-source basado en Python que usa un enfoque keyword-driven. Los tests se escriben en formato tabular legible que parece lenguaje natural, haciéndolos accesibles para no-programadores. Soporta testing web, API, móvil y desktop a través de varias bibliotecas.

¿Robot Framework es gratis?

Sí, Robot Framework es completamente gratis y open-source bajo licencia Apache 2.0. Todas las bibliotecas estándar (SeleniumLibrary, RequestsLibrary, etc.) también son gratis. No hay versiones pagas ni funciones enterprise — todo está disponible sin costo.

¿Robot Framework vs Selenium — cuál es la diferencia?

Robot Framework es un framework de automatización de tests que provee la estructura y sintaxis para escribir tests. Selenium es una biblioteca de automatización de navegador. Robot Framework usa SeleniumLibrary (un wrapper alrededor de Selenium) para realizar automatización de navegador web. Piensa en Robot Framework como el framework de test y Selenium como el driver de navegador.

¿Puede Robot Framework testear APIs?

Sí, Robot Framework puede testear REST APIs usando RequestsLibrary. Puedes hacer requests HTTP (GET, POST, PUT, DELETE), verificar códigos de estado de respuesta, parsear respuestas JSON y validar datos.

Recursos Oficiales

Ver También