This commit is contained in:
Dev
2025-09-12 17:01:54 +03:00
commit 815237d804
16 changed files with 2595 additions and 0 deletions

81
pkg/config/config.go Normal file
View File

@@ -0,0 +1,81 @@
package config
import "time"
// Config represents the complete configuration for a stress test
type Config struct {
Target Target `yaml:"target" json:"target"`
Load Load `yaml:"load" json:"load"`
RateLimiting RateLimiting `yaml:"rate_limiting" json:"rate_limiting"`
FailureInjection FailureInjection `yaml:"failure_injection" json:"failure_injection"`
Reporting Reporting `yaml:"reporting" json:"reporting"`
}
// Target configuration for the endpoint being tested
type Target struct {
URL string `yaml:"url" json:"url"`
Method string `yaml:"method" json:"method"`
Headers map[string]string `yaml:"headers" json:"headers"`
Body string `yaml:"body" json:"body"`
Timeout int `yaml:"timeout" json:"timeout"` // seconds
}
// Load configuration for the test pattern
type Load struct {
Requests int `yaml:"requests" json:"requests"`
Concurrency int `yaml:"concurrency" json:"concurrency"`
Duration time.Duration `yaml:"duration" json:"duration"`
RampUp time.Duration `yaml:"ramp_up" json:"ramp_up"`
Pattern string `yaml:"pattern" json:"pattern"` // constant, ramp, spike
RequestsPerSecond int `yaml:"requests_per_second" json:"requests_per_second"`
}
// RateLimiting configuration
type RateLimiting struct {
Enabled bool `yaml:"enabled" json:"enabled"`
RequestsPerSecond int `yaml:"requests_per_second" json:"requests_per_second"`
}
// FailureInjection configuration for chaos testing
type FailureInjection struct {
Enabled bool `yaml:"enabled" json:"enabled"`
NetworkDelay time.Duration `yaml:"network_delay" json:"network_delay"`
DropRate float64 `yaml:"drop_rate" json:"drop_rate"` // 0.0 to 1.0
ErrorRate float64 `yaml:"error_rate" json:"error_rate"` // 0.0 to 1.0
}
// Reporting configuration
type Reporting struct {
Format []string `yaml:"format" json:"format"` // console, json, html, csv
OutputDir string `yaml:"output_dir" json:"output_dir"`
Percentiles []int `yaml:"percentiles" json:"percentiles"`
}
// DefaultConfig returns a sensible default configuration
func DefaultConfig() *Config {
return &Config{
Target: Target{
Method: "GET",
Headers: make(map[string]string),
Timeout: 30,
},
Load: Load{
Requests: 1000,
Concurrency: 10,
Duration: 5 * time.Minute,
Pattern: "constant",
},
RateLimiting: RateLimiting{
Enabled: false,
RequestsPerSecond: 100,
},
FailureInjection: FailureInjection{
Enabled: false,
},
Reporting: Reporting{
Format: []string{"console"},
OutputDir: "./results",
Percentiles: []int{50, 90, 95, 99},
},
}
}