mirror of
https://github.com/httprunner/httprunner.git
synced 2026-09-07 16:40:50 +08:00
fix: parse map key
This commit is contained in:
@@ -39,6 +39,8 @@ func parseHeaders(rawHeaders map[string]string, variablesMapping map[string]inte
|
|||||||
if value, ok := parsedValue.(string); ok {
|
if value, ok := parsedValue.(string); ok {
|
||||||
parsedHeaders[k] = value
|
parsedHeaders[k] = value
|
||||||
} else {
|
} else {
|
||||||
|
// parsed value is not string, e.g. int, float, etc.
|
||||||
|
// convert to string
|
||||||
parsedHeaders[k] = fmt.Sprintf("%v", parsedValue)
|
parsedHeaders[k] = fmt.Sprintf("%v", parsedValue)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -55,8 +57,17 @@ func parseData(raw interface{}, variablesMapping map[string]interface{}) interfa
|
|||||||
case reflect.Map: // convert any map to map[string]interface{}
|
case reflect.Map: // convert any map to map[string]interface{}
|
||||||
parsedMap := make(map[string]interface{})
|
parsedMap := make(map[string]interface{})
|
||||||
for _, k := range rawValue.MapKeys() {
|
for _, k := range rawValue.MapKeys() {
|
||||||
|
parsedKey := parseString(k.String(), variablesMapping)
|
||||||
v := rawValue.MapIndex(k)
|
v := rawValue.MapIndex(k)
|
||||||
parsedMap[k.String()] = parseData(v.Interface(), variablesMapping)
|
parsedValue := parseData(v.Interface(), variablesMapping)
|
||||||
|
|
||||||
|
if key, ok := parsedKey.(string); ok {
|
||||||
|
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:
|
||||||
|
|||||||
+5
-3
@@ -134,7 +134,7 @@ func TestParseDataMapWithVariables(t *testing.T) {
|
|||||||
variablesMapping := map[string]interface{}{
|
variablesMapping := map[string]interface{}{
|
||||||
"var1": "foo1",
|
"var1": "foo1",
|
||||||
"val1": 200,
|
"val1": 200,
|
||||||
"var2": 123,
|
"var2": 123, // key is int
|
||||||
}
|
}
|
||||||
|
|
||||||
testData := []struct {
|
testData := []struct {
|
||||||
@@ -143,8 +143,10 @@ func TestParseDataMapWithVariables(t *testing.T) {
|
|||||||
}{
|
}{
|
||||||
{map[string]interface{}{"key": "$var1"}, map[string]interface{}{"key": "foo1"}},
|
{map[string]interface{}{"key": "$var1"}, map[string]interface{}{"key": "foo1"}},
|
||||||
{map[string]interface{}{"foo1": "$val1", "foo2": "bar2"}, map[string]interface{}{"foo1": 200, "foo2": "bar2"}},
|
{map[string]interface{}{"foo1": "$val1", "foo2": "bar2"}, map[string]interface{}{"foo1": 200, "foo2": "bar2"}},
|
||||||
// {map[string]interface{}{"$var1": "$val1"}, map[string]interface{}{"foo1": 200}},
|
// parse map key
|
||||||
// {map[string]interface{}{"$var2": "$val1"}, map[string]interface{}{123: 200}},
|
{map[string]interface{}{"$var1": "$val1"}, map[string]interface{}{"foo1": 200}},
|
||||||
|
// map key is int
|
||||||
|
{map[string]interface{}{"$var2": "$val1"}, map[string]interface{}{"123": 200}},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, data := range testData {
|
for _, data := range testData {
|
||||||
|
|||||||
Reference in New Issue
Block a user