From 0b1a92d8dd14c8654d8446382defe771d42b3830 Mon Sep 17 00:00:00 2001 From: "lilong.129" Date: Mon, 12 May 2025 15:24:12 +0800 Subject: [PATCH] refactor: NewCaseRunner --- internal/version/VERSION | 2 +- runner.go | 45 ++++++++++++-------------------------- step_testcase.go | 2 +- tests/runner_test.go | 2 +- tests/step_request_test.go | 2 +- 5 files changed, 18 insertions(+), 35 deletions(-) diff --git a/internal/version/VERSION b/internal/version/VERSION index c3714433..9be87ef0 100644 --- a/internal/version/VERSION +++ b/internal/version/VERSION @@ -1 +1 @@ -v5.0.0-beta-2505120918 +v5.0.0-beta-2505121525 diff --git a/runner.go b/runner.go index 7ea20de8..8877ede1 100644 --- a/runner.go +++ b/runner.go @@ -228,7 +228,7 @@ func (r *HRPRunner) Run(testcases ...ITestCase) (err error) { // run testcase one by one for _, testcase := range testCases { // each testcase has its own case runner - caseRunner, err := r.NewCaseRunner(*testcase) + caseRunner, err := NewCaseRunner(*testcase, r) if err != nil { log.Error().Err(err).Msg("[Run] init case runner failed") return err @@ -276,12 +276,16 @@ func (r *HRPRunner) Run(testcases ...ITestCase) (err error) { return runErr } -// NewCaseRunner creates a new case runner for testcase. -// each testcase has its own case runner -func (r *HRPRunner) NewCaseRunner(testcase TestCase) (*CaseRunner, error) { +// NewCaseRunner initializes a CaseRunner for a given testcase. +// Each testcase is associated with its own CaseRunner instance. +// If the provided hrpRunner is nil, a default HRPRunner will be created and used. +func NewCaseRunner(testcase TestCase, hrpRunner *HRPRunner) (*CaseRunner, error) { + if hrpRunner == nil { + hrpRunner = NewRunner(nil) + } caseRunner := &CaseRunner{ TestCase: testcase, - hrpRunner: r, + hrpRunner: hrpRunner, parser: NewParser(), uixtDrivers: make(map[string]*uixt.XTDriver), } @@ -289,7 +293,7 @@ func (r *HRPRunner) NewCaseRunner(testcase TestCase) (*CaseRunner, error) { // init parser plugin if config.PluginSetting != nil { - plugin, err := initPlugin(config.Path, r.venv, r.pluginLogOn) + plugin, err := initPlugin(config.Path, hrpRunner.venv, hrpRunner.pluginLogOn) if err != nil { return nil, errors.Wrap(err, "init plugin failed") } @@ -317,39 +321,18 @@ func (r *HRPRunner) NewCaseRunner(testcase TestCase) (*CaseRunner, error) { } // set request timeout in seconds - if config.RequestTimeout != 0 { - r.SetRequestTimeout(config.RequestTimeout) + if parsedConfig.RequestTimeout != 0 { + hrpRunner.SetRequestTimeout(parsedConfig.RequestTimeout) } // set testcase timeout in seconds - if config.CaseTimeout != 0 { - r.SetCaseTimeout(config.CaseTimeout) + if parsedConfig.CaseTimeout != 0 { + hrpRunner.SetCaseTimeout(parsedConfig.CaseTimeout) } caseRunner.TestCase.Config = parsedConfig return caseRunner, nil } -func NewCaseRunner(testcase TestCase) (*CaseRunner, error) { - caseRunner := &CaseRunner{ - TestCase: testcase, - } - // config := testcase.Config.Get() - - // TODO: init parser plugin - - // parse testcase config - parsedConfig, err := caseRunner.parseConfig() - if err != nil { - return nil, errors.Wrap(err, "parse testcase config failed") - } - - // TODO: set request timeout in seconds - // TODO: set testcase timeout in seconds - - caseRunner.TestCase.Config = parsedConfig - return caseRunner, nil -} - type CaseRunner struct { TestCase // each testcase init its own CaseRunner diff --git a/step_testcase.go b/step_testcase.go index 83c4b668..f438c0ff 100644 --- a/step_testcase.go +++ b/step_testcase.go @@ -80,7 +80,7 @@ func (s *StepTestCaseWithOptionalArgs) Run(r *SessionRunner) (stepResult *StepRe // merge & override extractors config.Export = mergeSlices(s.StepExport, config.Export) - caseRunner, err := r.caseRunner.hrpRunner.NewCaseRunner(*copiedTestCase) + caseRunner, err := NewCaseRunner(*copiedTestCase, r.caseRunner.hrpRunner) if err != nil { log.Error().Err(err).Msg("create case runner failed") return stepResult, err diff --git a/tests/runner_test.go b/tests/runner_test.go index e4745a5b..ba98f150 100644 --- a/tests/runner_test.go +++ b/tests/runner_test.go @@ -287,7 +287,7 @@ func TestSessionRunner(t *testing.T) { }, } - caseRunner, _ := hrp.NewRunner(t).NewCaseRunner(testcase) + caseRunner, _ := hrp.NewCaseRunner(testcase, hrp.NewRunner(t)) sessionRunner := caseRunner.NewSession() step := testcase.TestSteps[0] if !assert.Equal(t, step.Config().Variables["varFoo"], "${max($a, $b)}") { diff --git a/tests/step_request_test.go b/tests/step_request_test.go index 7ba74678..3eba1459 100644 --- a/tests/step_request_test.go +++ b/tests/step_request_test.go @@ -69,7 +69,7 @@ func TestRunRequestStatOn(t *testing.T) { Config: hrp.NewConfig("test").SetBaseURL("https://postman-echo.com"), TestSteps: []hrp.IStep{stepGET, stepPOSTData}, } - caseRunner, _ := hrp.NewRunner(t).SetHTTPStatOn().NewCaseRunner(testcase) + caseRunner, _ := hrp.NewCaseRunner(testcase, hrp.NewRunner(t).SetHTTPStatOn()) sessionRunner := caseRunner.NewSession() summary, err := sessionRunner.Start(nil) assert.Nil(t, err)