fix: modify the format of data-driven parameters setting

This commit is contained in:
xucong053
2022-05-20 14:53:23 +08:00
parent 05e2bed02f
commit a283565d41
4 changed files with 41 additions and 26 deletions
+8 -2
View File
@@ -10,8 +10,14 @@
}, },
"parameters_setting": { "parameters_setting": {
"strategies": { "strategies": {
"user_agent": "sequential", "user_agent": {
"username-password": "random" "name": "user-identity",
"pick_order": "sequential"
},
"username-password": {
"name": "user-info",
"pick_order": "random"
}
}, },
"limit": 6 "limit": 6
}, },
+6 -2
View File
@@ -5,8 +5,12 @@ config:
username-password: ${parameterize($file)} username-password: ${parameterize($file)}
parameters_setting: parameters_setting:
strategies: strategies:
user_agent: "sequential" user_agent:
username-password: "random" name: "user-identity"
pick_order: "sequential"
username-password:
name: "user-info"
pick_order: "random"
limit: 6 limit: 6
variables: variables:
app_version: v1 app_version: v1
+13 -8
View File
@@ -12,17 +12,17 @@ import (
) )
type TParamsConfig struct { type TParamsConfig struct {
Strategy iteratorStrategy `json:"strategy,omitempty" yaml:"strategy,omitempty"` // overall strategy PickOrder iteratorPickOrder `json:"strategy,omitempty" yaml:"strategy,omitempty"` // overall pick-order strategy
Strategies map[string]iteratorStrategy `json:"strategies,omitempty" yaml:"strategies,omitempty"` // individual strategies for each parameters Strategies map[string]iteratorStrategy `json:"strategies,omitempty" yaml:"strategies,omitempty"` // individual strategies for each parameters
Limit int `json:"limit,omitempty" yaml:"limit,omitempty"` Limit int `json:"limit,omitempty" yaml:"limit,omitempty"`
} }
type iteratorStrategy string type iteratorPickOrder string
const ( const (
strategySequential iteratorStrategy = "sequential" strategySequential iteratorPickOrder = "sequential"
strategyRandom iteratorStrategy = "random" strategyRandom iteratorPickOrder = "random"
strategyUnique iteratorStrategy = "unique" strategyUnique iteratorPickOrder = "unique"
) )
/* /*
@@ -33,6 +33,11 @@ const (
*/ */
type Parameters []map[string]interface{} type Parameters []map[string]interface{}
type iteratorStrategy struct {
Name string `json:"name,omitempty" yaml:"name,omitempty"`
PickOrder iteratorPickOrder `json:"pick_order,omitempty" yaml:"pick_order,omitempty"`
}
func initParametersIterator(cfg *TConfig) (*ParametersIterator, error) { func initParametersIterator(cfg *TConfig) (*ParametersIterator, error) {
parameters, err := loadParameters(cfg.Parameters, cfg.Variables) parameters, err := loadParameters(cfg.Parameters, cfg.Variables)
if err != nil { if err != nil {
@@ -65,12 +70,12 @@ func newParametersIterator(parameters map[string]Parameters, config *TParamsConf
// check parameter individual strategy // check parameter individual strategy
strategy, ok := config.Strategies[paramName] strategy, ok := config.Strategies[paramName]
if !ok { if !ok {
// default to overall strategy // default to overall pick order
strategy = config.Strategy strategy.PickOrder = config.PickOrder
} }
// group parameters by strategy // group parameters by strategy
if strategy == strategyRandom { if strategy.PickOrder == strategyRandom {
iterator.randomParameterNames = append(iterator.randomParameterNames, paramName) iterator.randomParameterNames = append(iterator.randomParameterNames, paramName)
} else { } else {
parametersList = append(parametersList, parameters[paramName]) parametersList = append(parametersList, parameters[paramName])
+14 -14
View File
@@ -137,25 +137,25 @@ func TestInitParametersIteratorCount(t *testing.T) {
}, },
6, // 3 * 2 * 1 6, // 3 * 2 * 1
}, },
// default equals to set overall parameters strategy to "sequential" // default equals to set overall parameters pick-order to "sequential"
{ {
&TConfig{ &TConfig{
Parameters: configParameters, Parameters: configParameters,
ParametersSetting: &TParamsConfig{ ParametersSetting: &TParamsConfig{
Strategy: "sequential", PickOrder: "sequential",
}, },
}, },
6, // 3 * 2 * 1 6, // 3 * 2 * 1
}, },
// default equals to set each individual parameters strategy to "sequential" // default equals to set each individual parameters pick-order to "sequential"
{ {
&TConfig{ &TConfig{
Parameters: configParameters, Parameters: configParameters,
ParametersSetting: &TParamsConfig{ ParametersSetting: &TParamsConfig{
Strategies: map[string]iteratorStrategy{ Strategies: map[string]iteratorStrategy{
"username-password": "sequential", "username-password": {Name: "user-info", PickOrder: "sequential"},
"user_agent": "sequential", "user_agent": {Name: "user-identity", PickOrder: "sequential"},
"app_version": "sequential", "app_version": {Name: "app-version", PickOrder: "sequential"},
}, },
}, },
}, },
@@ -166,33 +166,33 @@ func TestInitParametersIteratorCount(t *testing.T) {
Parameters: configParameters, Parameters: configParameters,
ParametersSetting: &TParamsConfig{ ParametersSetting: &TParamsConfig{
Strategies: map[string]iteratorStrategy{ Strategies: map[string]iteratorStrategy{
"user_agent": "sequential", "user_agent": {Name: "user-identity", PickOrder: "sequential"},
"app_version": "sequential", "app_version": {Name: "app-version", PickOrder: "sequential"},
}, },
}, },
}, },
6, // 3 * 2 * 1 6, // 3 * 2 * 1
}, },
// set overall parameters overall strategy to "random" // set overall parameters overall pick-order to "random"
// each random parameters only select one item // each random parameters only select one item
{ {
&TConfig{ &TConfig{
Parameters: configParameters, Parameters: configParameters,
ParametersSetting: &TParamsConfig{ ParametersSetting: &TParamsConfig{
Strategy: "random", PickOrder: "random",
}, },
}, },
1, // 1 * 1 * 1 1, // 1 * 1 * 1
}, },
// set some individual parameters strategy to "random" // set some individual parameters pick-order to "random"
// this will override overall strategy // this will override overall strategy
{ {
&TConfig{ &TConfig{
Parameters: configParameters, Parameters: configParameters,
ParametersSetting: &TParamsConfig{ ParametersSetting: &TParamsConfig{
Strategies: map[string]iteratorStrategy{ Strategies: map[string]iteratorStrategy{
"user_agent": "random", "user_agent": {Name: "user-identity", PickOrder: "random"},
}, },
}, },
}, },
@@ -203,7 +203,7 @@ func TestInitParametersIteratorCount(t *testing.T) {
Parameters: configParameters, Parameters: configParameters,
ParametersSetting: &TParamsConfig{ ParametersSetting: &TParamsConfig{
Strategies: map[string]iteratorStrategy{ Strategies: map[string]iteratorStrategy{
"username-password": "random", "username-password": {Name: "user-info", PickOrder: "random"},
}, },
}, },
}, },
@@ -349,7 +349,7 @@ func TestInitParametersIteratorContent(t *testing.T) {
ParametersSetting: &TParamsConfig{ ParametersSetting: &TParamsConfig{
Limit: 5, // limit could also be greater than total Limit: 5, // limit could also be greater than total
Strategies: map[string]iteratorStrategy{ Strategies: map[string]iteratorStrategy{
"username-password": "random", "username-password": {Name: "user-info", PickOrder: "random"},
}, },
}, },
}, },