Files
maternal-app/maternal-app/maternal-app-backend/artillery.yml
2025-10-01 19:01:52 +00:00

259 lines
7.1 KiB
YAML

config:
target: "http://localhost:3000"
phases:
# Warm-up phase
- duration: 60
arrivalRate: 5
name: "Warm up"
# Ramp up phase
- duration: 120
arrivalRate: 5
rampTo: 50
name: "Ramp up load"
# Sustained load phase
- duration: 300
arrivalRate: 50
name: "Sustained load"
# Spike test
- duration: 60
arrivalRate: 100
name: "Spike test"
# Performance thresholds
ensure:
maxErrorRate: 1 # Max 1% error rate
p95: 2000 # 95th percentile response time < 2s
p99: 3000 # 99th percentile response time < 3s
# HTTP defaults
http:
timeout: 10
# Define variables
variables:
testEmail: "perf-test-{{ $randomString() }}@example.com"
testPassword: "TestPassword123!"
# Processor for custom logic
processor: "./test-helpers/artillery-processor.js"
scenarios:
# Authentication flow
- name: "User Registration and Login"
weight: 10
flow:
- post:
url: "/api/v1/auth/register"
json:
email: "{{ testEmail }}"
password: "{{ testPassword }}"
name: "Test User"
phone: "+1234567890"
deviceInfo:
deviceId: "test-device-{{ $randomString() }}"
deviceName: "Artillery Test Device"
platform: "web"
capture:
- json: "$.data.tokens.accessToken"
as: "accessToken"
- json: "$.data.user.id"
as: "userId"
- json: "$.data.family.id"
as: "familyId"
expect:
- statusCode: 201
- post:
url: "/api/v1/auth/login"
json:
email: "{{ testEmail }}"
password: "{{ testPassword }}"
deviceInfo:
deviceId: "test-device-{{ $randomString() }}"
deviceName: "Artillery Test Device"
platform: "web"
expect:
- statusCode: 200
# Activity tracking flow (most common operation)
- name: "Track Baby Activities"
weight: 50
flow:
# Login first
- post:
url: "/api/v1/auth/login"
json:
email: "perf-test@example.com" # Use pre-seeded account
password: "TestPassword123!"
deviceInfo:
deviceId: "test-device-{{ $randomString() }}"
deviceName: "Artillery Test Device"
platform: "web"
capture:
- json: "$.data.tokens.accessToken"
as: "accessToken"
- json: "$.data.user.id"
as: "userId"
# Create child if needed
- post:
url: "/api/v1/children"
headers:
Authorization: "Bearer {{ accessToken }}"
json:
name: "Test Baby {{ $randomNumber(1, 1000) }}"
dateOfBirth: "2024-01-01"
gender: "other"
capture:
- json: "$.data.id"
as: "childId"
# Log feeding activity
- post:
url: "/api/v1/activities?childId={{ childId }}"
headers:
Authorization: "Bearer {{ accessToken }}"
json:
type: "feeding"
startedAt: "{{ $now }}"
endedAt: "{{ $now }}"
details:
feedingType: "bottle"
amountMl: 120
notes: "Performance test feeding"
expect:
- statusCode: 201
- contentType: json
# Log sleep activity
- post:
url: "/api/v1/activities?childId={{ childId }}"
headers:
Authorization: "Bearer {{ accessToken }}"
json:
type: "sleep"
startedAt: "{{ $now }}"
details:
quality: "good"
location: "crib"
expect:
- statusCode: 201
# Get daily summary
- get:
url: "/api/v1/activities/summary?childId={{ childId }}&date={{ $now }}"
headers:
Authorization: "Bearer {{ accessToken }}"
expect:
- statusCode: 200
# Analytics and insights (read-heavy)
- name: "View Analytics Dashboard"
weight: 20
flow:
- post:
url: "/api/v1/auth/login"
json:
email: "perf-test@example.com"
password: "TestPassword123!"
deviceInfo:
deviceId: "test-device-{{ $randomString() }}"
deviceName: "Artillery Test Device"
platform: "web"
capture:
- json: "$.data.tokens.accessToken"
as: "accessToken"
- get:
url: "/api/v1/analytics/insights/sleep-patterns?childId={{ childId }}&days=7"
headers:
Authorization: "Bearer {{ accessToken }}"
expect:
- statusCode: 200
- get:
url: "/api/v1/analytics/insights/feeding-patterns?childId={{ childId }}&days=7"
headers:
Authorization: "Bearer {{ accessToken }}"
expect:
- statusCode: 200
- get:
url: "/api/v1/analytics/reports/weekly?childId={{ childId }}"
headers:
Authorization: "Bearer {{ accessToken }}"
expect:
- statusCode: 200
# AI assistant interaction
- name: "AI Chat Interaction"
weight: 15
flow:
- post:
url: "/api/v1/auth/login"
json:
email: "perf-test@example.com"
password: "TestPassword123!"
deviceInfo:
deviceId: "test-device-{{ $randomString() }}"
deviceName: "Artillery Test Device"
platform: "web"
capture:
- json: "$.data.tokens.accessToken"
as: "accessToken"
- post:
url: "/api/v1/ai/chat"
headers:
Authorization: "Bearer {{ accessToken }}"
json:
message: "How much should my 3-month-old eat?"
capture:
- json: "$.data.conversationId"
as: "conversationId"
expect:
- statusCode: 201
- get:
url: "/api/v1/ai/conversations"
headers:
Authorization: "Bearer {{ accessToken }}"
expect:
- statusCode: 200
# Family management
- name: "Family Collaboration"
weight: 5
flow:
- post:
url: "/api/v1/auth/login"
json:
email: "perf-test@example.com"
password: "TestPassword123!"
deviceInfo:
deviceId: "test-device-{{ $randomString() }}"
deviceName: "Artillery Test Device"
platform: "web"
capture:
- json: "$.data.tokens.accessToken"
as: "accessToken"
- json: "$.data.family.id"
as: "familyId"
- get:
url: "/api/v1/families/{{ familyId }}"
headers:
Authorization: "Bearer {{ accessToken }}"
expect:
- statusCode: 200
- get:
url: "/api/v1/families/{{ familyId }}/members"
headers:
Authorization: "Bearer {{ accessToken }}"
expect:
- statusCode: 200