From a182b1d4ae011f4c45572b26e162611917bb9e3e Mon Sep 17 00:00:00 2001 From: medcl Date: Wed, 11 Dec 2024 19:10:14 +0800 Subject: [PATCH 1/2] feat: allow to skip invalid assert conditions --- domain.go | 1 + loader.go | 11 ++++++++++- main.go | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/domain.go b/domain.go index ffcd675..aabb3c1 100644 --- a/domain.go +++ b/domain.go @@ -136,6 +136,7 @@ type RunnerConfig struct { AssertInvalid bool `config:"assert_invalid"` ContinueOnAssertInvalid bool `config:"continue_on_assert_invalid"` + SkipInvalidAssert bool `config:"skip_invalid_assert"` // Exit(2) if any error occurred AssertError bool `config:"assert_error"` diff --git a/loader.go b/loader.go index b106eb7..5563675 100644 --- a/loader.go +++ b/loader.go @@ -222,6 +222,9 @@ func doRequest(config *LoaderConfig, globalCtx util.MapStr, req *fasthttp.Reques } condition, buildErr := conditions.NewCondition(item.Assert) if buildErr != nil { + if config.RunnerConfig.SkipInvalidAssert{ + continue + } log.Errorf("failed to build conditions while assert existed, error: %+v", buildErr) loadStats.NumInvalid++ return @@ -233,7 +236,7 @@ func doRequest(config *LoaderConfig, globalCtx util.MapStr, req *fasthttp.Reques } if !config.RunnerConfig.ContinueOnAssertInvalid { - log.Infof("assertion failed, skipping subsequent requests,", item.Assert, ", event:", event) + log.Info("assertion failed, skipping subsequent requests,", util.MustToJSON(item.Assert), ", event:", util.MustToJSON(event)) return false, err } } @@ -476,6 +479,12 @@ func (cfg *LoadGenerator) Warmup(config *LoaderConfig) int { globalCtx := util.MapStr{} for _, v := range config.Requests { v.prepareRequest(config, globalCtx, req) + + if !req.Validate(){ + log.Errorf("invalid request: %v",req.String()) + panic("invalid request") + } + next, err := doRequest(config, globalCtx, req, resp, &v, loadStats, nil) for k, _ := range loadStats.StatusCode { if len(config.RunnerConfig.ValidStatusCodesDuringWarmup) > 0 { diff --git a/main.go b/main.go index 18fc795..69102bd 100644 --- a/main.go +++ b/main.go @@ -217,7 +217,7 @@ func startLoader(cfg *LoaderConfig) *LoadStats { } if cfg.RunnerConfig.AssertInvalid { - fmt.Printf("Number of Invalid:\t%v\n", aggStats.NumInvalid) + fmt.Printf("Assert Invalid:\t%v\n", aggStats.NumInvalid) } for k, v := range aggStats.StatusCode { From 45241acb7ac15116fa4cbca4a05e06d213dcb4e7 Mon Sep 17 00:00:00 2001 From: medcl Date: Wed, 11 Dec 2024 19:17:21 +0800 Subject: [PATCH 2/2] refactor: include assert skipped to results --- loader.go | 26 ++++++++++++++------------ main.go | 8 +++++--- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/loader.go b/loader.go index 5563675..8d54aa9 100644 --- a/loader.go +++ b/loader.go @@ -59,15 +59,16 @@ type LoadGenerator struct { } type LoadStats struct { - TotReqSize int64 - TotRespSize int64 - TotDuration time.Duration - MinRequestTime time.Duration - MaxRequestTime time.Duration - NumRequests int - NumErrs int - NumInvalid int - StatusCode map[int]int + TotReqSize int64 + TotRespSize int64 + TotDuration time.Duration + MinRequestTime time.Duration + MaxRequestTime time.Duration + NumRequests int + NumErrs int + NumAssertInvalid int + NumAssertSkipped int + StatusCode map[int]int } var ( @@ -163,7 +164,7 @@ func doRequest(config *LoaderConfig, globalCtx util.MapStr, req *fasthttp.Reques if err != nil { loadStats.NumErrs++ - loadStats.NumInvalid++ + loadStats.NumAssertInvalid++ } if !config.RunnerConfig.NoSizeStats { @@ -223,14 +224,15 @@ func doRequest(config *LoaderConfig, globalCtx util.MapStr, req *fasthttp.Reques condition, buildErr := conditions.NewCondition(item.Assert) if buildErr != nil { if config.RunnerConfig.SkipInvalidAssert{ + loadStats.NumAssertSkipped++ continue } log.Errorf("failed to build conditions while assert existed, error: %+v", buildErr) - loadStats.NumInvalid++ + loadStats.NumAssertInvalid++ return } if !condition.Check(event) { - loadStats.NumInvalid++ + loadStats.NumAssertInvalid++ if item.Request != nil { log.Errorf("%s %s, assertion failed, skipping subsequent requests", item.Request.Method, item.Request.Url) } diff --git a/main.go b/main.go index 69102bd..48a2086 100644 --- a/main.go +++ b/main.go @@ -148,7 +148,8 @@ func startLoader(cfg *LoaderConfig) *LoadStats { loadGen.Stop() case stats := <-statsAggregator: aggStats.NumErrs += stats.NumErrs - aggStats.NumInvalid += stats.NumInvalid + aggStats.NumAssertInvalid += stats.NumAssertInvalid + aggStats.NumAssertSkipped += stats.NumAssertSkipped aggStats.NumRequests += stats.NumRequests aggStats.TotReqSize += stats.TotReqSize aggStats.TotRespSize += stats.TotRespSize @@ -217,7 +218,8 @@ func startLoader(cfg *LoaderConfig) *LoadStats { } if cfg.RunnerConfig.AssertInvalid { - fmt.Printf("Assert Invalid:\t%v\n", aggStats.NumInvalid) + fmt.Printf("Assert Invalid:\t\t%v\n", aggStats.NumAssertInvalid) + fmt.Printf("Assert Skipped:\t\t%v\n", aggStats.NumAssertSkipped) } for k, v := range aggStats.StatusCode { @@ -440,7 +442,7 @@ func runLoaderConfig(config *LoaderConfig) int { aggStats := startLoader(config) if aggStats != nil { - if config.RunnerConfig.AssertInvalid && aggStats.NumInvalid > 0 { + if config.RunnerConfig.AssertInvalid && aggStats.NumAssertInvalid > 0 { return 1 } if config.RunnerConfig.AssertError && aggStats.NumErrs > 0 {