refactor: initParameterIterator

This commit is contained in:
debugtalk
2022-04-13 15:25:13 +08:00
parent 27ba5e0da5
commit d7348a0063
3 changed files with 24 additions and 26 deletions

View File

@@ -53,12 +53,6 @@ func (b *HRPBoomer) Run(testcases ...ITestCase) {
} }
for _, testcase := range testCases { for _, testcase := range testCases {
cfg := testcase.Config
err = initParameterIterator(cfg, "boomer")
if err != nil {
log.Error().Err(err).Msg("failed to init parameter iterator")
os.Exit(1)
}
rendezvousList := initRendezvous(testcase, int64(b.GetSpawnCount())) rendezvousList := initRendezvous(testcase, int64(b.GetSpawnCount()))
task := b.convertBoomerTask(testcase, rendezvousList) task := b.convertBoomerTask(testcase, rendezvousList)
taskSlice = append(taskSlice, task) taskSlice = append(taskSlice, task)
@@ -78,9 +72,7 @@ func (b *HRPBoomer) Quit() {
} }
func (b *HRPBoomer) convertBoomerTask(testcase *TestCase, rendezvousList []*Rendezvous) *boomer.Task { func (b *HRPBoomer) convertBoomerTask(testcase *TestCase, rendezvousList []*Rendezvous) *boomer.Task {
config := testcase.Config // init session runner for testcase
// each testcase has its own session runner
sessionRunner, err := b.hrpRunner.NewSessionRunner(testcase) sessionRunner, err := b.hrpRunner.NewSessionRunner(testcase)
if err != nil { if err != nil {
log.Error().Err(err).Msg("failed to create session runner") log.Error().Err(err).Msg("failed to create session runner")
@@ -91,6 +83,7 @@ func (b *HRPBoomer) convertBoomerTask(testcase *TestCase, rendezvousList []*Rend
b.plugins = append(b.plugins, sessionRunner.parser.plugin) b.plugins = append(b.plugins, sessionRunner.parser.plugin)
b.pluginsMutex.Unlock() b.pluginsMutex.Unlock()
} }
sessionRunner.resetSession()
// broadcast to all rendezvous at once when spawn done // broadcast to all rendezvous at once when spawn done
go func() { go func() {
@@ -101,11 +94,11 @@ func (b *HRPBoomer) convertBoomerTask(testcase *TestCase, rendezvousList []*Rend
}() }()
return &boomer.Task{ return &boomer.Task{
Name: config.Name, Name: testcase.Config.Name,
Weight: config.Weight, Weight: testcase.Config.Weight,
Fn: func() { Fn: func() {
testcaseSuccess := true // flag whole testcase result testcaseSuccess := true // flag whole testcase result
var transactionSuccess = true // flag current transaction result transactionSuccess := true // flag current transaction result
var parameterVariables map[string]interface{} var parameterVariables map[string]interface{}
// iterate through all parameter iterators and update case variables // iterate through all parameter iterators and update case variables

View File

@@ -152,26 +152,22 @@ func (r *HRPRunner) Run(testcases ...ITestCase) error {
// run testcase one by one // run testcase one by one
for _, testcase := range testCases { for _, testcase := range testCases {
// each testcase has its own session runner
sessionRunner, err := r.NewSessionRunner(testcase) sessionRunner, err := r.NewSessionRunner(testcase)
if err != nil { if err != nil {
log.Error().Err(err).Msg("[Run] init session runner failed") log.Error().Err(err).Msg("[Run] init session runner failed")
return err return err
} }
defer sessionRunner.parser.plugin.Quit() defer func() {
if sessionRunner.parser.plugin != nil {
sessionRunner.parser.plugin.Quit()
}
}()
cfg := testcase.Config
// parse config parameters
err = initParameterIterator(cfg, "runner")
if err != nil {
log.Error().Interface("parameters", cfg.Parameters).Err(err).Msg("parse config parameters failed")
return err
}
// 在runner模式下指定整体策略cfg.ParametersSetting.Iterators仅包含一个CartesianProduct的迭代器 // 在runner模式下指定整体策略cfg.ParametersSetting.Iterators仅包含一个CartesianProduct的迭代器
for it := cfg.ParametersSetting.Iterators[0]; it.HasNext(); { for it := sessionRunner.parsedConfig.ParametersSetting.Iterators[0]; it.HasNext(); {
var parameterVariables map[string]interface{} var parameterVariables map[string]interface{}
// iterate through all parameter iterators and update case variables // iterate through all parameter iterators and update case variables
for _, it := range cfg.ParametersSetting.Iterators { for _, it := range sessionRunner.parsedConfig.ParametersSetting.Iterators {
if it.HasNext() { if it.HasNext() {
parameterVariables = it.Next() parameterVariables = it.Next()
} }
@@ -210,6 +206,8 @@ func (r *HRPRunner) Run(testcases ...ITestCase) error {
return nil return nil
} }
// NewSessionRunner creates a new session runner for testcase.
// each testcase has its own session runner
func (r *HRPRunner) NewSessionRunner(testcase *TestCase) (*SessionRunner, error) { func (r *HRPRunner) NewSessionRunner(testcase *TestCase) (*SessionRunner, error) {
sessionRunner := &SessionRunner{ sessionRunner := &SessionRunner{
testCase: testcase, testCase: testcase,
@@ -230,5 +228,12 @@ func (r *HRPRunner) NewSessionRunner(testcase *TestCase) (*SessionRunner, error)
return nil, errors.Wrap(err, "parse testcase config failed") return nil, errors.Wrap(err, "parse testcase config failed")
} }
// parse testcase config parameters
err = initParameterIterator(sessionRunner.parsedConfig, "runner")
if err != nil {
log.Error().Interface("parameters", sessionRunner.parsedConfig.Parameters).Err(err).Msg("parse config parameters failed")
return nil, errors.Wrap(err, "parse testcase config parameters failed")
}
return sessionRunner, nil return sessionRunner, nil
} }

View File

@@ -124,14 +124,14 @@ func (r *SessionRunner) parseConfig(variables map[string]interface{}) error {
// parse config name // parse config name
parsedName, err := r.parser.ParseString(cfg.Name, parsedVariables) parsedName, err := r.parser.ParseString(cfg.Name, parsedVariables)
if err != nil { if err != nil {
return err return errors.Wrap(err, "parse config name failed")
} }
r.parsedConfig.Name = convertString(parsedName) r.parsedConfig.Name = convertString(parsedName)
// parse config base url // parse config base url
parsedBaseURL, err := r.parser.ParseString(cfg.BaseURL, parsedVariables) parsedBaseURL, err := r.parser.ParseString(cfg.BaseURL, parsedVariables)
if err != nil { if err != nil {
return err return errors.Wrap(err, "parse config base url failed")
} }
r.parsedConfig.BaseURL = convertString(parsedBaseURL) r.parsedConfig.BaseURL = convertString(parsedBaseURL)