Awesome-omni-skill API Testing Expert
API testing - Postman, REST clients, contract testing, mock servers
install
source · Clone the upstream repo
git clone https://github.com/diegosouzapw/awesome-omni-skill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/development/api-testing-expert" ~/.claude/skills/diegosouzapw-awesome-omni-skill-api-testing-expert && rm -rf "$T"
manifest:
skills/development/api-testing-expert/SKILL.mdsource content
API Testing Expert
Comprehensive API testing patterns for REST, GraphQL, and more.
Tools Comparison
| Tool | Best For | Free Tier | Pricing |
|---|---|---|---|
| Postman | Teams | 3 users | $14/user/mo |
| Bruno | Local-first | Unlimited | Free |
| Hoppscotch | Open source | Unlimited | Free |
| REST Client (VS Code) | In-editor | Unlimited | Free |
Bruno (Recommended for Vibe Coders)
Git-friendly, no account needed.
Install
brew install bruno
Collection Structure
api-tests/ ├── bruno.json ├── environments/ │ ├── local.bru │ └── production.bru └── requests/ ├── auth/ │ └── login.bru └── users/ └── get-user.bru
Request File
meta { name: Get User type: http seq: 1 } get { url: {{baseUrl}}/users/{{userId}} body: none auth: bearer {{token}} } tests { test("status is 200", function() { expect(res.status).to.equal(200); }); test("has user data", function() { expect(res.body.id).to.exist; }); }
REST Client (VS Code)
HTTP File
### Login POST {{baseUrl}}/auth/login Content-Type: application/json { "email": "test@example.com", "password": "secret" } ### Get User (use token from login) GET {{baseUrl}}/users/me Authorization: Bearer {{$dotenv TOKEN}}
Postman CLI (Newman)
Run in CI
npx newman run collection.json \ -e environment.json \ --reporters cli,json \ --reporter-json-export results.json
GitHub Actions
- name: Run API Tests run: | npx newman run ./postman/collection.json \ -e ./postman/ci-environment.json \ --bail
Contract Testing (Pact)
Consumer Test
const { Pact } = require('@pact-foundation/pact'); const provider = new Pact({ consumer: 'Frontend', provider: 'UserService', }); describe('User API', () => { it('returns user by id', async () => { await provider.addInteraction({ state: 'user 1 exists', uponReceiving: 'a request for user 1', withRequest: { method: 'GET', path: '/users/1', }, willRespondWith: { status: 200, body: { id: 1, name: like('John'), }, }, }); }); });
Mock Servers
MSW (Mock Service Worker)
import { http, HttpResponse } from 'msw'; import { setupServer } from 'msw/node'; const handlers = [ http.get('/api/users/:id', ({ params }) => { return HttpResponse.json({ id: params.id, name: 'Test User', }); }), ]; export const server = setupServer(...handlers);
Prism (OpenAPI Mock)
# Mock from OpenAPI spec npx @stoplight/prism-cli mock openapi.yaml
Quick API Test Pattern
# Simple curl test script curl -sf "$API_URL/health" || exit 1 curl -sf -H "Authorization: Bearer $TOKEN" "$API_URL/users/me" | jq .
Use when: API testing, contract testing, mock servers, CI integration