mirror of
https://github.com/httprunner/httprunner.git
synced 2026-06-03 23:09:36 +08:00
refactor: initParameterIterator
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user