refactor: NewCaseRunner

This commit is contained in:
lilong.129
2025-05-12 15:24:12 +08:00
parent 4dfeffc32b
commit 0b1a92d8dd
5 changed files with 18 additions and 35 deletions

View File

@@ -1 +1 @@
v5.0.0-beta-2505120918
v5.0.0-beta-2505121525

View File

@@ -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

View File

@@ -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

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()
step := testcase.TestSteps[0]
if !assert.Equal(t, step.Config().Variables["varFoo"], "${max($a, $b)}") {

View File

@@ -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)