Run the backend conformance workflow
Point the official Hurl and Bruno suites at a Conduit backend, run them serially, and interpret the results.
Run the official Conduit test workflow against a backend you control and identify the operation that needs correction when an assertion fails. This tutorial uses Hurl as the behavioral source of truth and Bruno as the generated, interactive alternative.
Before you begin
You need a running Conduit backend, the API specification repository, Hurl installed for the Hurl path, and Bun available for the Bruno CLI path. Confirm the backend base URL, including its /api prefix when your server uses one. The examples use http://localhost:3000/api; replace it with your own local URL.
The test scripts default HOST to http://localhost:8000. Set HOST explicitly whenever your backend uses another address. Run the suites against a development or test database because the workflow creates and changes API resources.
Complete the workflow
Start your backend using its documented development command and leave it running. Check that the configured API base URL responds before starting the suite.
The observable result is a reachable server at the exact value you will pass as HOST, for example http://localhost:3000/api.
From specs/api, run:
HOST=http://localhost:3000/api ./run-api-tests-hurl.shThe runner discovers the Hurl files when you do not provide file arguments, supplies host and uid variables, and invokes Hurl with --jobs 1. The output identifies the assertions that pass or fail.
Read the first failed request and assertion, then compare the backend response with the relevant OpenAPI operation and shared response rules. Correct one behavior at a time and rerun the Hurl suite.
A failure is evidence about an observable request or response mismatch. Do not treat a passing request in Bruno as a replacement for the Hurl assertion that defines the expected behavior.
When you need interactive request inspection, run the generated collection from specs/api:
HOST=http://localhost:3000/api ./run-api-tests-bruno.shThe script skips the environments directory, runs each collection folder, uses the local environment, passes the host environment variable, and uses the safe sandbox by default.
Repeat the Hurl command after every correction and record a passing run in your implementation notes. If you used Bruno to investigate, keep the final Hurl result as the acceptance signal because the Hurl files are the source of truth and the Bruno collection is generated from them.
The successful result is a clean Hurl run against the intended backend URL, with no remaining behavioral assertions to fix.
Interpret failures
An unreachable-host failure usually means the backend is stopped or HOST does not match its listening address. A response assertion failure means the server answered but its status, body, headers, or state transition differs from the test. A failure involving generated user data can be made reproducible by setting UID_VAL for the Hurl runner, then removing that override for a fresh run.
Next steps
For focused behavioral checks, see Run Hurl tests. For interactive collection runs and sandbox configuration, see Run the generated Bruno collection. To return to implementation planning, see Implement a conforming Conduit backend.