From 60c1ad7188b1d171fe5a5ffddebde05dc8dfe294 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Wed, 13 Apr 2022 15:57:35 +0800 Subject: [PATCH] refactor: update config variables by parameters --- hrp/boomer.go | 6 +----- hrp/runner.go | 12 ++---------- hrp/session.go | 30 ++++++++++++++++++++++++------ hrp/step_testcase.go | 5 ++--- 4 files changed, 29 insertions(+), 24 deletions(-) diff --git a/hrp/boomer.go b/hrp/boomer.go index 4b96103f..a736f909 100644 --- a/hrp/boomer.go +++ b/hrp/boomer.go @@ -107,11 +107,7 @@ func (b *HRPBoomer) convertBoomerTask(testcase *TestCase, rendezvousList []*Rend parameterVariables = it.Next() } } - - if err := sessionRunner.parseConfig(parameterVariables); err != nil { - log.Error().Err(err).Msg("parse config failed") - return - } + sessionRunner.updateConfigVariables(parameterVariables) startTime := time.Now() for _, step := range testcase.TestSteps { diff --git a/hrp/runner.go b/hrp/runner.go index 9af9c80f..5037ecad 100644 --- a/hrp/runner.go +++ b/hrp/runner.go @@ -172,8 +172,7 @@ func (r *HRPRunner) Run(testcases ...ITestCase) error { parameterVariables = it.Next() } } - sessionRunner.parseConfig(parameterVariables) - if err = sessionRunner.Start(); err != nil { + if err = sessionRunner.Start(parameterVariables); err != nil { log.Error().Err(err).Msg("[Run] run testcase failed") return err } @@ -224,16 +223,9 @@ func (r *HRPRunner) NewSessionRunner(testcase *TestCase) (*SessionRunner, error) sessionRunner.parser.plugin = plugin // parse testcase config - if err := sessionRunner.parseConfig(nil); err != nil { + if err := sessionRunner.parseConfig(); err != nil { 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 } diff --git a/hrp/session.go b/hrp/session.go index a97ae94f..0c37525a 100644 --- a/hrp/session.go +++ b/hrp/session.go @@ -44,10 +44,14 @@ func (r *SessionRunner) LogOn() bool { } // Start runs the test steps in sequential order. -func (r *SessionRunner) Start() error { +// givenVars is used for data driven +func (r *SessionRunner) Start(givenVars map[string]interface{}) error { config := r.testCase.Config log.Info().Str("testcase", config.Name).Msg("run testcase start") + // update config variables with given variables + r.updateConfigVariables(givenVars) + // reset session runner r.resetSession() @@ -101,8 +105,16 @@ func (r *SessionRunner) MergeStepVariables(vars map[string]interface{}) (map[str return parsedVariables, nil } -// parseConfig parses testcase config with given variables, stores to parsedConfig. -func (r *SessionRunner) parseConfig(variables map[string]interface{}) error { +// updateConfigVariables updates config variables with given variables. +// this is used for data driven +func (r *SessionRunner) updateConfigVariables(givenVars map[string]interface{}) { + for k, v := range givenVars { + r.parsedConfig.Variables[k] = v + } +} + +// parseConfig parses testcase config, stores to parsedConfig. +func (r *SessionRunner) parseConfig() error { cfg := r.testCase.Config r.parsedConfig = &TConfig{} @@ -113,10 +125,9 @@ func (r *SessionRunner) parseConfig(variables map[string]interface{}) error { } // parse config variables - mergedVars := mergeVariables(variables, cfg.Variables) - parsedVariables, err := r.parser.ParseVariables(mergedVars) + parsedVariables, err := r.parser.ParseVariables(cfg.Variables) if err != nil { - log.Error().Interface("variables", mergedVars).Err(err).Msg("parse config variables failed") + log.Error().Interface("variables", cfg.Variables).Err(err).Msg("parse config variables failed") return err } r.parsedConfig.Variables = parsedVariables @@ -138,6 +149,13 @@ func (r *SessionRunner) parseConfig(variables map[string]interface{}) error { // ensure correction of think time config r.parsedConfig.ThinkTimeSetting.checkThinkTime() + // parse testcase config parameters + err = initParameterIterator(r.parsedConfig, "runner") + if err != nil { + log.Error().Interface("parameters", r.parsedConfig.Parameters).Err(err).Msg("parse config parameters failed") + return errors.Wrap(err, "parse testcase config parameters failed") + } + return nil } diff --git a/hrp/step_testcase.go b/hrp/step_testcase.go index d6c2929e..47151096 100644 --- a/hrp/step_testcase.go +++ b/hrp/step_testcase.go @@ -69,8 +69,6 @@ func (s *StepTestCaseWithOptionalArgs) Run(r *SessionRunner) (*StepResult, error if s.step.Name != "" { copiedTestCase.Config.Name = s.step.Name } - // merge & override variables - copiedTestCase.Config.Variables = mergeVariables(stepVariables, copiedTestCase.Config.Variables) // merge & override extractors copiedTestCase.Config.Export = mergeSlices(s.step.Export, copiedTestCase.Config.Export) @@ -81,7 +79,8 @@ func (s *StepTestCaseWithOptionalArgs) Run(r *SessionRunner) (*StepResult, error } start := time.Now() - err = sessionRunner.Start() + // run referenced testcase with step variables + err = sessionRunner.Start(stepVariables) stepResult.Elapsed = time.Since(start).Milliseconds() if err != nil { stepResult.Attachment = err.Error()