From 406aab1dd8dcb6c764c1924cf0d2b0c66f7ef6cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E8=81=AA?= Date: Wed, 5 Jan 2022 15:12:18 +0800 Subject: [PATCH] add each parameter selection strategy. --- parser.go | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/parser.go b/parser.go index cf138389..ef10fab9 100644 --- a/parser.go +++ b/parser.go @@ -619,15 +619,19 @@ func initParameterIterator(cfg *TConfig, mode string) (err error) { rawValue := reflect.ValueOf(cfg.ParametersSetting.Strategy) switch rawValue.Kind() { case reflect.Map: - // strategy: ["random", "sequential"], 每个参数对应一个迭代器,每个迭代器随机、顺序选取元素互不影响 - if len(parameters) != rawValue.Len() { - return errors.New("parameters and strategy should have the same length") - } else { - for _, k := range rawValue.MapKeys() { - key := k.Convert(rawValue.Type().Key()) + // strategy: {"user_agent": "sequential", "username-password": "random"}, 每个参数对应一个迭代器,每个迭代器随机、顺序选取元素互不影响 + for k, v := range parameters { + if _, ok := rawValue.Interface().(map[string]interface{})[k]; ok { + // use strategy if configured cfg.ParametersSetting.Iterators = append( cfg.ParametersSetting.Iterators, - newIterator(parameters[k.Interface().(string)], rawValue.MapIndex(key).String(), cfg.ParametersSetting.Iteration), + newIterator(v, rawValue.MapIndex(reflect.ValueOf(k)).Interface().(string), cfg.ParametersSetting.Iteration), + ) + } else { + // use sequential strategy by default + cfg.ParametersSetting.Iterators = append( + cfg.ParametersSetting.Iterators, + newIterator(v, strategySequential, cfg.ParametersSetting.Iteration), ) } }