Library Pest Plugin Stressless untuk Stress Testing

Pest Stressless Plugin

Library Pest Plugin Stressless untuk Stress Testing

Deskripsi

Stress testing adalah cara menguji stabilitas dan keandalan aplikasi dengan memberikan beban berat atau kondisi ekstrem. Contohnya untuk memastikan aplikasi bisa handle banyak request atau data dalam jumlah besar.

Pest menggunakan k6 (tool load testing yang powerful) di belakang layar.

Cara Install

composer require pestphp/pest-plugin-stressless --dev

Dua Cara Menggunakan

1. Command Line (Quick Test)

Basic usage:

./vendor/bin/pest stress example.com

Custom duration (default 5 detik):

./vendor/bin/pest stress example.com --duration=10

Custom concurrency (default 1 request):

./vendor/bin/pest stress example.com --concurrency=5

HTTP Methods:

# GET (default)
./vendor/bin/pest stress example.com/articles --get

# POST dengan data
./vendor/bin/pest stress example.com/articles --post='{"name": "John"}'

# PUT, PATCH, DELETE
./vendor/bin/pest stress example.com/articles/1 --put='{"name": "John"}'
./vendor/bin/pest stress example.com/articles/1 --patch='{"name": "John"}'
./vendor/bin/pest stress example.com/articles/1 --delete

2. Test Function (Dengan Assertions)

Basic test:

<?php

use function Pest\Stressless\stress;

it('has fast response time', function () {
    $result = stress('example.com');
    
    expect($result->requests()->duration()->med())->toBeLessThan(100); // < 100ms
});

Custom configuration:

// Custom duration dan concurrency
$result = stress('example.com')
    ->concurrently(requests: 5)
    ->for(10)->seconds();

// HTTP methods
$result = stress('example.com/api')->get();
$result = stress('example.com/api')->post(['name' => 'John']);

// Dengan headers
$result = stress('example.com/api')->headers([
    'Authorization' => 'Bearer token123'
])->get();

Metrics Yang Bisa Diukur

Request Duration

$result->requests()->duration()->med();  // median
$result->requests()->duration()->min();  // minimum
$result->requests()->duration()->max();  // maksimum
$result->requests()->duration()->p90();  // percentile 90
$result->requests()->duration()->p95();  // percentile 95

Request Count & Rate

$result->requests()->count();  // jumlah request
$result->requests()->rate();   // request per detik

Failed Requests

$result->requests()->failed()->count();  // jumlah request gagal
$result->requests()->failed()->rate();   // request gagal per detik

Time to First Byte (TTFB)

$result->requests()->ttfb()->duration()->med();

DNS Lookup Duration

$result->requests()->dnsLookup()->duration()->med();

Download/Upload Metrics

// Download
$result->requests()->download()->duration()->med();
$result->requests()->download()->data()->count();  // bytes
$result->requests()->download()->data()->rate();   // bytes per second

// Upload
$result->requests()->upload()->duration()->med();
$result->requests()->upload()->data()->count();
$result->requests()->upload()->data()->rate();

Test Run Info

$result->testRun()->concurrency();  // jumlah concurrent requests
$result->testRun()->duration();     // durasi test

Kesimpulan

Pest Stressless memberikan cara mudah untuk:

  • Test performa aplikasi dengan beban tinggi
  • Measure berbagai metrics penting
  • Set expectations pada hasil test
  • Integrate dengan workflow testing existing

Perfect untuk memastikan aplikasi tetap stabil saat traffic tinggi!

Developer

PEST

Developer

61 Stars
6 Forks