func main() { var config tomlConfig if _, err := toml.DecodeFile("example.toml", &config); err != nil { fmt.Println("No config file, using default settings.") config.Name = "Default" } fmt.Printf("Title: %s\n", config.Name) rate := uint64(100) // per second duration := 4 * time.Second targeter := vegeta.NewStaticTargeter(vegeta.Target{ Method: "GET", URL: "http://localhost:8080/", }) attacker := vegeta.NewAttacker() var metrics vegeta.Metrics for res := range attacker.Attack(targeter, rate, duration) { metrics.Add(res) } metrics.Close() fmt.Printf("%d results\n", metrics.Requests) fmt.Printf("99th percentile: %s\n", metrics.Latencies.P99) }
func main() { rate := uint64(10000) // per second duration := 20 * time.Second targeter := vegeta.NewStaticTargeter(vegeta.Target{ Method: "GET", URL: "http://localhost:3001/get_stuff", }) attacker := vegeta.NewAttacker() var metrics vegeta.Metrics for res := range attacker.Attack(targeter, rate, duration) { metrics.Add(res) } metrics.Close() fmt.Printf("99th percentile: %s\n", metrics.Latencies.P99) }
func errorRateThreshold(metrics *vegeta.Metrics, minimumTestDuration time.Duration, maximumErrorRate float64) bool { // metrics.Close() does trigger the computation of metrics, but does not stop any process metrics.Close() fmt.Printf( " - Duration: %s, Requests: %d, Non 200 Requests: %d, Success Rate: %.2f%%\n", metrics.Duration, metrics.Requests, metrics.Requests-uint64(metrics.StatusCodes["200"]), metrics.Success*100, ) if metrics.Duration > minimumTestDuration { if metrics.Success < (1 - maximumErrorRate) { return true } } return false }
metrics.Requests, metrics.Requests-uint64(metrics.StatusCodes["200"]), metrics.Success*100, ) if metrics.Duration > minimumTestDuration { if metrics.Success < (1 - maximumErrorRate) { return true } } return false } var _ = Describe("Availability test", func() { var metrics vegeta.Metrics var metricsLock sync.Mutex var stopAttackCriteria func() bool BeforeEach(func() { metrics = vegeta.Metrics{} }) Describe("vegeta library", func() { var server *ghttp.Server BeforeEach(func() { server = ghttp.NewServer() }) AfterEach(func() { server.Close() })