mirror of
https://github.com/httprunner/httprunner.git
synced 2026-07-09 22:44:05 +08:00
feat: convertString
This commit is contained in:
29
parser.go
29
parser.go
@@ -39,15 +39,21 @@ func parseHeaders(rawHeaders map[string]string, variablesMapping map[string]inte
|
|||||||
parsedHeaders := make(map[string]string)
|
parsedHeaders := make(map[string]string)
|
||||||
headers := parseData(rawHeaders, variablesMapping).(map[string]interface{})
|
headers := parseData(rawHeaders, variablesMapping).(map[string]interface{})
|
||||||
for k, v := range headers {
|
for k, v := range headers {
|
||||||
if value, ok := v.(string); ok {
|
parsedHeaders[k] = convertString(v)
|
||||||
parsedHeaders[k] = value
|
|
||||||
} else {
|
|
||||||
parsedHeaders[k] = fmt.Sprintf("%v", v)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return parsedHeaders
|
return parsedHeaders
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func convertString(raw interface{}) string {
|
||||||
|
if value, ok := raw.(string); ok {
|
||||||
|
return value
|
||||||
|
} else {
|
||||||
|
// raw is not string, e.g. int, float, etc.
|
||||||
|
// convert to string
|
||||||
|
return fmt.Sprintf("%v", raw)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func parseData(raw interface{}, variablesMapping map[string]interface{}) interface{} {
|
func parseData(raw interface{}, variablesMapping map[string]interface{}) interface{} {
|
||||||
rawValue := reflect.ValueOf(raw)
|
rawValue := reflect.ValueOf(raw)
|
||||||
switch rawValue.Kind() {
|
switch rawValue.Kind() {
|
||||||
@@ -68,13 +74,8 @@ func parseData(raw interface{}, variablesMapping map[string]interface{}) interfa
|
|||||||
v := rawValue.MapIndex(k)
|
v := rawValue.MapIndex(k)
|
||||||
parsedValue := parseData(v.Interface(), variablesMapping)
|
parsedValue := parseData(v.Interface(), variablesMapping)
|
||||||
|
|
||||||
if key, ok := parsedKey.(string); ok {
|
key := convertString(parsedKey)
|
||||||
parsedMap[key] = parsedValue
|
parsedMap[key] = parsedValue
|
||||||
} else {
|
|
||||||
// parsed key is not string, e.g. int, float, etc.
|
|
||||||
// convert to string
|
|
||||||
parsedMap[fmt.Sprintf("%v", parsedKey)] = parsedValue
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return parsedMap
|
return parsedMap
|
||||||
default:
|
default:
|
||||||
@@ -313,3 +314,7 @@ func parseFunctionArguments(argsStr string) ([]interface{}, error) {
|
|||||||
|
|
||||||
return arguments, nil
|
return arguments, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func parseVariables(variables map[string]interface{}) (map[string]interface{}, error) {
|
||||||
|
return variables, nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -407,3 +407,24 @@ func TestParseDataStringWithFunctions(t *testing.T) {
|
|||||||
t.Fail()
|
t.Fail()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestConvertString(t *testing.T) {
|
||||||
|
testData := []struct {
|
||||||
|
raw interface{}
|
||||||
|
expect interface{}
|
||||||
|
}{
|
||||||
|
{"", ""},
|
||||||
|
{"abc", "abc"},
|
||||||
|
{"123", "123"},
|
||||||
|
{123, "123"},
|
||||||
|
{1.23, "1.23"},
|
||||||
|
{nil, "<nil>"},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, data := range testData {
|
||||||
|
value := convertString(data.raw)
|
||||||
|
if !assert.Equal(t, data.expect, value) {
|
||||||
|
t.Fail()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user