mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-13 06:29:44 +08:00
feat: parseHeaders
This commit is contained in:
@@ -15,16 +15,21 @@ func TestCaseVariables(t *testing.T) {
|
||||
},
|
||||
TestSteps: []httpboomer.IStep{
|
||||
httpboomer.Step("get with params").
|
||||
WithVariables(map[string]interface{}{"var1": "bar1", "expectedStatusCode": 200}).
|
||||
WithVariables(map[string]interface{}{
|
||||
"var1": "bar1",
|
||||
"agent": "HttpBoomer",
|
||||
"expectedStatusCode": 200,
|
||||
}).
|
||||
GET("/get").
|
||||
WithParams(map[string]interface{}{"foo1": "$var1", "foo2": "bar2"}).
|
||||
WithHeaders(map[string]string{"User-Agent": "HttpBoomer"}).
|
||||
WithHeaders(map[string]string{"User-Agent": "$agent"}).
|
||||
Validate().
|
||||
AssertEqual("status_code", "$expectedStatusCode", "check status code").
|
||||
AssertEqual("headers.Connection", "keep-alive", "check header Connection").
|
||||
AssertEqual("headers.\"Content-Type\"", "application/json; charset=utf-8", "check header Content-Type").
|
||||
AssertEqual("body.args.foo1", "$var1", "check args foo1").
|
||||
AssertEqual("body.args.foo2", "bar2", "check args foo2"),
|
||||
AssertEqual("body.args.foo1", "bar1", "check args foo1").
|
||||
AssertEqual("body.args.foo2", "bar2", "check args foo2").
|
||||
AssertEqual("body.headers.\"user-agent\"", "HttpBoomer", "check header user agent"),
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
27
parser.go
27
parser.go
@@ -4,6 +4,7 @@ import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/url"
|
||||
"reflect"
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
@@ -31,15 +32,31 @@ func buildURL(baseURL, stepURL string) string {
|
||||
return uStep.String()
|
||||
}
|
||||
|
||||
func parseHeaders(rawHeaders map[string]string, variablesMapping map[string]interface{}) map[string]string {
|
||||
parsedHeaders := make(map[string]string)
|
||||
for k, v := range rawHeaders {
|
||||
parsedValue := parseString(v, variablesMapping)
|
||||
if value, ok := parsedValue.(string); ok {
|
||||
parsedHeaders[k] = value
|
||||
} else {
|
||||
parsedHeaders[k] = fmt.Sprintf("%v", parsedValue)
|
||||
}
|
||||
}
|
||||
return parsedHeaders
|
||||
}
|
||||
|
||||
func parseData(raw interface{}, variablesMapping map[string]interface{}) interface{} {
|
||||
switch value := raw.(type) {
|
||||
case string:
|
||||
rawValue := reflect.ValueOf(raw)
|
||||
switch rawValue.Kind() {
|
||||
case reflect.String:
|
||||
value := rawValue.String()
|
||||
value = strings.TrimSpace(value)
|
||||
return parseString(value, variablesMapping)
|
||||
case map[string]interface{}:
|
||||
case reflect.Map: // convert any map to map[string]interface{}
|
||||
parsedMap := make(map[string]interface{})
|
||||
for k, v := range value {
|
||||
parsedMap[k] = parseData(v, variablesMapping)
|
||||
for _, k := range rawValue.MapKeys() {
|
||||
v := rawValue.MapIndex(k)
|
||||
parsedMap[k.String()] = parseData(v.Interface(), variablesMapping)
|
||||
}
|
||||
return parsedMap
|
||||
default:
|
||||
|
||||
@@ -78,8 +78,8 @@ func (r *Runner) runStepRequest(step *TStep) error {
|
||||
// prepare request args
|
||||
var v []interface{}
|
||||
if len(step.Request.Headers) > 0 {
|
||||
headers := parseData(step.Request.Headers, step.Variables)
|
||||
v = append(v, req.Header(headers.(map[string]string)))
|
||||
headers := parseHeaders(step.Request.Headers, step.Variables)
|
||||
v = append(v, req.Header(headers))
|
||||
}
|
||||
if len(step.Request.Params) > 0 {
|
||||
params := parseData(step.Request.Params, step.Variables)
|
||||
|
||||
Reference in New Issue
Block a user