@elastic/synthetics
Version:
Elastic synthetic monitoring agent
36 lines (31 loc) • 1.34 kB
text/typescript
import { apiJourney, monitor, step, expect } from '@elastic/synthetics';
// API journeys run without launching a browser — they only use
// Playwright's APIRequestContext to hit HTTP endpoints. They are pushed
// to Kibana as HTTP-type monitors and are a good fit for OAuth-protected
// endpoints, multi-step API flows, and lightweight high-frequency checks.
//
// `params.apiUrl` is sourced from `synthetics.config.ts` and points at
// the jsonplaceholder.typicode.com demo API by default; override it for
// your own service via `--params '{"apiUrl":"..."}'` or per-environment
// in the config file.
apiJourney('My Example API Journey', ({ request, params }) => {
// Only relevant for the push command to create
// monitors in Kibana
monitor.use({
id: 'example-api-monitor',
schedule: 10,
});
step('list todos', async () => {
const res = await request.get(`${params.apiUrl}/todos`);
expect(res.status()).toBe(200);
const todos = await res.json();
expect(Array.isArray(todos)).toBe(true);
expect(todos.length).toBeGreaterThan(0);
});
step('fetch a single todo', async () => {
const res = await request.get(`${params.apiUrl}/todos/1`);
expect(res.status()).toBe(200);
const todo = await res.json();
expect(todo).toMatchObject({ id: 1, userId: expect.any(Number) });
});
});