The Web Actor

The Web actor is a powerful component in choreo designed for testing HTTP-based services, such as REST APIs. It allows you to send HTTP requests, manage headers and cookies, and assert conditions on the responses you receive.

Setup

To use the Web actor in your tests, you must first declare it in the actors list at the top of your .chor file.

actor Web

Example 1: API health check

This example shows a simple health check that sends an authenticated GET request to an API endpoint and verifies the response.

feature "API Health Check"

actor Web

settings {
    timeout_seconds = 5
    stop_on_failure = true
}

background {
    Web set_header "User-Agent" "choreo-test-runner/1.0"
    Web set_header "Accept" "application/json"
    Web set_cookie "session_id" "abc123"
}

var URL = "https://httpbin.org/bearer"
var BEARING_TOKEN = "choreo-token-xyz"
# BEARING_TOKEN should come from an environment variable or secret manager in real scenarios
# Example: env BEARING_TOKEN

scenario "Health check for a web API endpoint" {
    test HealthCheck "Verify the API endpoint is healthy" {
        given:
            wait >= 0s
        when:
            Web set_header "Authorization" "Bearer ${BEARING_TOKEN}"
            Web http_get "${URL}"
        then:
            Web response_status is_success
            Web response_time is_below 2s
    }

    after {
        Web clear_header "Authorization"
        Web clear_cookie "session_id"
    }
}

Example 2: Comprehensive web conditions

This example demonstrates a variety of web conditions against the httpbin.org service, testing status codes, response bodies, and JSON structures.

feature "Web Conditions"
actor Web

scenario "Testing various web conditions" {
    test StatusCodeTest "Test different HTTP status codes" {
        given:
            wait >= 0s
        when:
            Web http_get "https://httpbin.org/status/200"
        then:
            Web response_status_is 200
            Web response_time is_below 2s
    }

    test SuccessStatusTest "Test response status is success" {
        given:
            wait >= 0s
        when:
            Web http_get "https://httpbin.org/status/201"
        then:
            Web response_status is_success
    }

    test BodyContainsTest "Test response body contains text and has correct JSON structure" {
        given:
            wait >= 0s
        when:
            Web http_get "https://httpbin.org/json"
        then:
            Web response_status_is 200
            Web response_body_contains "slideshow"
            Web json_response at "/slideshow/slides" is_an_array
            Web json_response at "/slideshow/title" is_a_string
            Web json_response at "/slideshow/slides" has_size 2
            Web json_response at "/slideshow" is_an_object
    }

    test JsonValueTest "Test JSON path value equality" {
        given:
            wait >= 0s
        when:
            Web http_get "https://httpbin.org/json"
        then:
            Web response_status_is 200
            Web json_path at "/slideshow/title" equals "Sample Slide Show"
    }
}