From 6ca9c5236be9f352b7c5373a319400946ac3b661 Mon Sep 17 00:00:00 2001 From: "lilong.129" Date: Wed, 19 Apr 2023 15:51:46 +0800 Subject: [PATCH] fix #1467: failed to parse parameters with plugin functions --- docs/CHANGELOG.md | 3 ++- hrp/internal/version/VERSION | 2 +- hrp/parameters.go | 8 ++++---- hrp/parameters_test.go | 24 ++++++++++++++++-------- hrp/runner.go | 3 +-- 5 files changed, 24 insertions(+), 16 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 63bc74ce..524aca34 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## v4.3.3 (2023-04-18) +## v4.3.3 (2023-04-19) **go version** @@ -18,6 +18,7 @@ - fix: screencap compatibility for shell v1 and v2 protocol - fix: display parsed url in html report - fix: fast fail not closing the websocket connection +- fix #1467: failed to parse parameters with plugin functions - fix #1549: avoid duplicate creating plugins ## v4.3.2 (2022-12-26) diff --git a/hrp/internal/version/VERSION b/hrp/internal/version/VERSION index 92e4a34f..c294f2b5 100644 --- a/hrp/internal/version/VERSION +++ b/hrp/internal/version/VERSION @@ -1 +1 @@ -v4.3.3.2304182207 \ No newline at end of file +v4.3.3 \ No newline at end of file diff --git a/hrp/parameters.go b/hrp/parameters.go index af54afa0..69a35904 100644 --- a/hrp/parameters.go +++ b/hrp/parameters.go @@ -38,8 +38,8 @@ type iteratorStrategy struct { PickOrder iteratorPickOrder `json:"pick_order,omitempty" yaml:"pick_order,omitempty"` } -func initParametersIterator(cfg *TConfig) (*ParametersIterator, error) { - parameters, err := loadParameters(cfg.Parameters, cfg.Variables) +func (p *Parser) initParametersIterator(cfg *TConfig) (*ParametersIterator, error) { + parameters, err := p.loadParameters(cfg.Parameters, cfg.Variables) if err != nil { return nil, err } @@ -236,7 +236,7 @@ configParameters = { ] } */ -func loadParameters(configParameters map[string]interface{}, variablesMapping map[string]interface{}) ( +func (p *Parser) loadParameters(configParameters map[string]interface{}, variablesMapping map[string]interface{}) ( map[string]Parameters, error) { if len(configParameters) == 0 { @@ -263,7 +263,7 @@ func loadParameters(configParameters map[string]interface{}, variablesMapping ma // => [["test1", "111111"], ["test2", "222222"]] // e.g. "app_version": "${gen_app_version()}" // => ["1.0.0", "1.0.1"] - parsedParameterContent, err := newParser().ParseString(rawValue.String(), variablesMapping) + parsedParameterContent, err := p.ParseString(rawValue.String(), variablesMapping) if err != nil { log.Error().Err(err). Str("parametersRawContent", rawValue.String()). diff --git a/hrp/parameters_test.go b/hrp/parameters_test.go index 02176415..4d2781f2 100644 --- a/hrp/parameters_test.go +++ b/hrp/parameters_test.go @@ -74,8 +74,9 @@ func TestLoadParameters(t *testing.T) { variablesMapping := map[string]interface{}{ "file": "account.csv", } + parser := newParser() for _, data := range testData { - value, err := loadParameters(data.configParameters, variablesMapping) + value, err := parser.loadParameters(data.configParameters, variablesMapping) if !assert.Nil(t, err) { t.Fatal() } @@ -92,21 +93,25 @@ func TestLoadParametersError(t *testing.T) { { map[string]interface{}{ "username_password": fmt.Sprintf("${parameterize(%s/account.csv)}", hrpExamplesDir), - "user_agent": []interface{}{"iOS/10.1", "iOS/10.2"}}, + "user_agent": []interface{}{"iOS/10.1", "iOS/10.2"}, + }, }, { map[string]interface{}{ "username-password": fmt.Sprintf("${parameterize(%s/account.csv)}", hrpExamplesDir), - "user-agent": []interface{}{"iOS/10.1", "iOS/10.2"}}, + "user-agent": []interface{}{"iOS/10.1", "iOS/10.2"}, + }, }, { map[string]interface{}{ "username-password": fmt.Sprintf("${param(%s/account.csv)}", hrpExamplesDir), - "user_agent": []interface{}{"iOS/10.1", "iOS/10.2"}}, + "user_agent": []interface{}{"iOS/10.1", "iOS/10.2"}, + }, }, } + parser := newParser() for _, data := range testData { - _, err := loadParameters(data.configParameters, map[string]interface{}{}) + _, err := parser.loadParameters(data.configParameters, map[string]interface{}{}) if !assert.Error(t, err) { t.Fatal() } @@ -240,8 +245,9 @@ func TestInitParametersIteratorCount(t *testing.T) { 1, }, } + parser := newParser() for _, data := range testData { - iterator, err := initParametersIterator(data.cfg) + iterator, err := parser.initParametersIterator(data.cfg) if !assert.Nil(t, err) { t.Fatal() } @@ -288,8 +294,9 @@ func TestInitParametersIteratorUnlimitedCount(t *testing.T) { }, }, } + parser := newParser() for _, data := range testData { - iterator, err := initParametersIterator(data.cfg) + iterator, err := parser.initParametersIterator(data.cfg) if !assert.Nil(t, err) { t.Fatal() } @@ -370,8 +377,9 @@ func TestInitParametersIteratorContent(t *testing.T) { map[string]interface{}{}, }, } + parser := newParser() for _, data := range testData { - iterator, err := initParametersIterator(data.cfg) + iterator, err := parser.initParametersIterator(data.cfg) if !assert.Nil(t, err) { t.Fatal() } diff --git a/hrp/runner.go b/hrp/runner.go index e3bfab71..d8e67b57 100644 --- a/hrp/runner.go +++ b/hrp/runner.go @@ -386,7 +386,7 @@ func (r *CaseRunner) parseConfig() error { r.parsedConfig.WebSocketSetting.checkWebSocket() // parse testcase config parameters - parametersIterator, err := initParametersIterator(r.parsedConfig) + parametersIterator, err := r.parser.initParametersIterator(r.parsedConfig) if err != nil { log.Error().Err(err). Interface("parameters", r.parsedConfig.Parameters). @@ -629,7 +629,6 @@ func (r *SessionRunner) GetSummary() (*TestCaseSummary, error) { return caseSummary, nil } - // updateSummary updates summary of StepResult. func (r *SessionRunner) updateSummary(stepResult *StepResult) { switch stepResult.StepType {