For years, Postman has been the go-to API client. But as cloud-based workflows and team syncing have become central to its identity, a new wave of tools is emerging for developers who crave simplicity, speed, and offline, file-based control.
At the forefront of this shift is Bruno – a fast, open-source, and Git-friendly API client that is quickly gaining popularity.
This tutorial will introduce you to what Bruno is, why it’s different, and how to get started with your first requests, tests, and a version-controlled workflow.
Bruno is a desktop API client for testing and exploring APIs. Unlike Postman, which syncs your collections to the cloud, Bruno’s core philosophy is to store everything locally on your file system. It uses a plain-text markup language called Bru Lang to save your requests in files ending with .bru
.
git clone
a repository, see API changes in a pull request, and have a version-controlled history of your endpoints. This is a game-changer for collaboration.Getting started is simple.
Download Bruno: Head to the official website at usebruno.com and download the version for your operating system (Windows, macOS, Linux). You can either use installer or download the portable version then extract the zip file. If you proceed with portable version, you should ignore step 2.
Install and Launch: Install the application. When you open it, you'll be greeted by a clean, three-pane interface:
Let's make our first GET
request using the our AgileTest API - API Document.
Step 1: Create a Collection A collection is a folder that organizes your API requests.
AgileTest Tutorial
and choose a location on your computer to save it. Remember, you are just creating a folder on your local disk.Step 2: Create a New Request
...
) next to your new collection and select "New Request".Get tcs in precondition
.GET
.Don’t forget to add “Authorization” header with the content: JWT <token>. You should refer to this document to retrieve the token with your credentials (Client id and Client secret - AgileTest API integration).
Step 3: Enter the URL and Send
https://agiletest.atlas.devsamurai.com/ds/preconditions/10932/test-cases?projectId=10090
Ctrl/Cmd + Enter
).Step 4: Examine the Response The response will appear instantly in the right pane. You'll see:
200 OK
).Now, let's create a new post and use variables to make our requests reusable.
Step 1: Create a POST Request
Create preconditions
.GET
to POST
.https://agiletest.atlas.devsamurai.com/ds/preconditions
Step 2: Add a JSON Body
{
"title": "User is an admin",
"details": "User with this role will have full permission",
"projectId": "10090",
"folderId": 0,
"typeId": 101
}
201 Created
response with the new post object, now including an id
.Step 3: Using Environment Variables Hardcoding URLs is bad practice. Let's use an environment variable.
API Endpoints
.Inside this environment, create a new variable:
baseUrl
https://agiletest.atlas.devsamurai.com
API Endpoints
environment from the dropdown that currently says "No Environment".{{baseUrl}}/ds/preconditions/10932/test-cases?projectId=10090
{{baseUrl}}/ds/preconditions
Now you can easily switch between different environments (e.g., Local, Staging, Production) just by changing the baseUrl
variable.
Bruno allows you to write assertions to validate API responses.
Get tcs in precondition
request.// Test 1: Check if the status code is 200 OK
test("Status code is 200", function() {
expect(res.getStatus()).to.equal(200);
});
// Test 2: Check if the body is empty
test("Body isn't empty", function() {
expect(res.getBody()).to.be.an('array').and.not.to.be.empty;
})
This is Bruno's superpower. Navigate to the folder where you saved your collection on your computer. You'll see a structure like this:
AgileTest Tutorial/
├── Get tcs in precondition.bru
├── Create preconditions.bru
Each .bru
file is a plain-text file containing your request details written in Bru Lang. Below is a code snippet.
meta {
name: Get tcs in precondition
type: http
seq: 1
}
get {
url: {{baseUrl}}/ds/preconditions/10932/test-cases?projectId=10090
body: none
auth: none
}
This means you can:
git init
).git add .
, git commit -m "Add initial API requests"
)..bru
file and submit a pull request. Your team can now review API changes just like they review code!Bruno offers a refreshing, developer-centric approach to API testing. By prioritizing local file storage and Git integration, it solves many of the collaboration and versioning headaches common with cloud-based tools. While it may not yet have every single feature of Postman, its speed, simplicity, and powerful, offline-first philosophy make it a compelling alternative that is well worth trying for your next project.