refactor: NewCaseRunner

This commit is contained in:
lilong.129
2025-05-12 15:25:32 +08:00
parent 4dfeffc32b
commit 0b1a92d8dd
5 changed files with 18 additions and 35 deletions
+1 -1
View File
@@ -1 +1 @@
v5.0.0-beta-2505120918 v5.0.0-beta-2505121525
+14 -31
View File
@@ -228,7 +228,7 @@ func (r *HRPRunner) Run(testcases ...ITestCase) (err error) {
// run testcase one by one // run testcase one by one
for _, testcase := range testCases { for _, testcase := range testCases {
// each testcase has its own case runner // each testcase has its own case runner
caseRunner, err := r.NewCaseRunner(*testcase) caseRunner, err := NewCaseRunner(*testcase, r)
if err != nil { if err != nil {
log.Error().Err(err).Msg("[Run] init case runner failed") log.Error().Err(err).Msg("[Run] init case runner failed")
return err return err
@@ -276,12 +276,16 @@ func (r *HRPRunner) Run(testcases ...ITestCase) (err error) {
return runErr return runErr
} }
// NewCaseRunner creates a new case runner for testcase. // NewCaseRunner initializes a CaseRunner for a given testcase.
// each testcase has its own case runner // Each testcase is associated with its own CaseRunner instance.
func (r *HRPRunner) NewCaseRunner(testcase TestCase) (*CaseRunner, error) { // 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{ caseRunner := &CaseRunner{
TestCase: testcase, TestCase: testcase,
hrpRunner: r, hrpRunner: hrpRunner,
parser: NewParser(), parser: NewParser(),
uixtDrivers: make(map[string]*uixt.XTDriver), uixtDrivers: make(map[string]*uixt.XTDriver),
} }
@@ -289,7 +293,7 @@ func (r *HRPRunner) NewCaseRunner(testcase TestCase) (*CaseRunner, error) {
// init parser plugin // init parser plugin
if config.PluginSetting != nil { 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 { if err != nil {
return nil, errors.Wrap(err, "init plugin failed") 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 // set request timeout in seconds
if config.RequestTimeout != 0 { if parsedConfig.RequestTimeout != 0 {
r.SetRequestTimeout(config.RequestTimeout) hrpRunner.SetRequestTimeout(parsedConfig.RequestTimeout)
} }
// set testcase timeout in seconds // set testcase timeout in seconds
if config.CaseTimeout != 0 { if parsedConfig.CaseTimeout != 0 {
r.SetCaseTimeout(config.CaseTimeout) hrpRunner.SetCaseTimeout(parsedConfig.CaseTimeout)
} }
caseRunner.TestCase.Config = parsedConfig caseRunner.TestCase.Config = parsedConfig
return caseRunner, nil 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 { type CaseRunner struct {
TestCase // each testcase init its own CaseRunner TestCase // each testcase init its own CaseRunner
+1 -1
View File
@@ -80,7 +80,7 @@ func (s *StepTestCaseWithOptionalArgs) Run(r *SessionRunner) (stepResult *StepRe
// merge & override extractors // merge & override extractors
config.Export = mergeSlices(s.StepExport, config.Export) config.Export = mergeSlices(s.StepExport, config.Export)
caseRunner, err := r.caseRunner.hrpRunner.NewCaseRunner(*copiedTestCase) caseRunner, err := NewCaseRunner(*copiedTestCase, r.caseRunner.hrpRunner)
if err != nil { if err != nil {
log.Error().Err(err).Msg("create case runner failed") log.Error().Err(err).Msg("create case runner failed")
return stepResult, err return stepResult, err
+1 -1
View File
@@ -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() sessionRunner := caseRunner.NewSession()
step := testcase.TestSteps[0] step := testcase.TestSteps[0]
if !assert.Equal(t, step.Config().Variables["varFoo"], "${max($a, $b)}") { if !assert.Equal(t, step.Config().Variables["varFoo"], "${max($a, $b)}") {
+1 -1
View File
@@ -69,7 +69,7 @@ func TestRunRequestStatOn(t *testing.T) {
Config: hrp.NewConfig("test").SetBaseURL("https://postman-echo.com"), Config: hrp.NewConfig("test").SetBaseURL("https://postman-echo.com"),
TestSteps: []hrp.IStep{stepGET, stepPOSTData}, TestSteps: []hrp.IStep{stepGET, stepPOSTData},
} }
caseRunner, _ := hrp.NewRunner(t).SetHTTPStatOn().NewCaseRunner(testcase) caseRunner, _ := hrp.NewCaseRunner(testcase, hrp.NewRunner(t).SetHTTPStatOn())
sessionRunner := caseRunner.NewSession() sessionRunner := caseRunner.NewSession()
summary, err := sessionRunner.Start(nil) summary, err := sessionRunner.Start(nil)
assert.Nil(t, err) assert.Nil(t, err)