diff --git a/hrp/boomer.go b/hrp/boomer.go index 1761169c..9a1d20fa 100644 --- a/hrp/boomer.go +++ b/hrp/boomer.go @@ -95,27 +95,27 @@ func (b *HRPBoomer) convertBoomerTask(testcase *TestCase, rendezvousList []*Rend Name: config.Name, Weight: config.Weight, Fn: func() { - sessionRunner := hrpRunner.NewSessionRunner(testcase) + sessionTestCase := &TestCase{} + // copy testcase to avoid data racing + if err := copier.Copy(sessionTestCase, testcase); err != nil { + log.Error().Err(err).Msg("copy testcase data failed") + return + } + sessionRunner := hrpRunner.NewSessionRunner(sessionTestCase) sessionRunner.parser.plugin = plugin testcaseSuccess := true // flag whole testcase result var transactionSuccess = true // flag current transaction result - cfg := testcase.Config - caseConfig := &TConfig{} - // copy config to avoid data racing - if err := copier.Copy(caseConfig, cfg); err != nil { - log.Error().Err(err).Msg("copy config data failed") - return - } + cfg := sessionTestCase.Config // iterate through all parameter iterators and update case variables - for _, it := range caseConfig.ParametersSetting.Iterators { + for _, it := range cfg.ParametersSetting.Iterators { if it.HasNext() { - caseConfig.Variables = mergeVariables(it.Next(), caseConfig.Variables) + cfg.Variables = mergeVariables(it.Next(), cfg.Variables) } } - if err := sessionRunner.parseConfig(caseConfig); err != nil { + if err := sessionRunner.parseConfig(cfg); err != nil { log.Error().Err(err).Msg("parse config failed") return } diff --git a/hrp/config.go b/hrp/config.go index 5af9ae87..7a3683fd 100644 --- a/hrp/config.go +++ b/hrp/config.go @@ -177,7 +177,7 @@ type iteratorStrategyType string const ( strategyRandom iteratorStrategyType = "random" - strategySequential iteratorStrategyType = "Sequential" + strategySequential iteratorStrategyType = "sequential" ) type iteratorParamsType []map[string]interface{} diff --git a/hrp/parser.go b/hrp/parser.go index 4a8126a3..3a7ea231 100644 --- a/hrp/parser.go +++ b/hrp/parser.go @@ -652,7 +652,7 @@ func initParameterIterator(cfg *TConfig, mode string) (err error) { // use strategy if configured cfg.ParametersSetting.Iterators = append( cfg.ParametersSetting.Iterators, - newIterator(v, rawValue.MapIndex(reflect.ValueOf(k)).Interface().(iteratorStrategyType), cfg.ParametersSetting.Iteration), + newIterator(v, iteratorStrategyType(rawValue.MapIndex(reflect.ValueOf(k)).String()), cfg.ParametersSetting.Iteration), ) } else { // use sequential strategy by default @@ -667,7 +667,7 @@ func initParameterIterator(cfg *TConfig, mode string) (err error) { if len(rawValue.String()) == 0 { cfg.ParametersSetting.Strategy = strategySequential } else { - cfg.ParametersSetting.Strategy = strings.ToLower(rawValue.String()) + cfg.ParametersSetting.Strategy = iteratorStrategyType(strings.ToLower(rawValue.String())) } cfg.ParametersSetting.Iterators = append( cfg.ParametersSetting.Iterators,