diff --git a/README.md b/README.md index 845490a9..e8911f39 100644 --- a/README.md +++ b/README.md @@ -82,6 +82,7 @@ func TestCaseDemo(t *testing.T) { AssertEqual("body.json.foo2", 12.3, "check args foo2"), hrp.Step("post form data"). POST("/post"). + WithHeaders(map[string]string{"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"}). WithParams(map[string]interface{}{ "foo1": "$varFoo1", // reference former extracted variable "foo2": "${max($a, $b)}", // 12.3; step level variables are independent, variable b is 3.45 here diff --git a/convert_test.go b/convert_test.go index b772b746..b03cc7b4 100644 --- a/convert_test.go +++ b/convert_test.go @@ -49,7 +49,8 @@ var demoTestCase = &TestCase{ AssertEqual("body.json.foo2", 12.3, "check args foo2"), Step("post form data"). POST("/post"). - WithParams(map[string]interface{}{ + WithHeaders(map[string]string{"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"}). + WithBody(map[string]interface{}{ "foo1": "$varFoo1", // reference former extracted variable "foo2": "${max($a, $b)}", // 12.3; step level variables are independent, variable b is 3.45 here }). diff --git a/examples/demo.json b/examples/demo.json index 855a73dd..4f371a05 100644 --- a/examples/demo.json +++ b/examples/demo.json @@ -100,7 +100,10 @@ "request": { "method": "POST", "url": "/post", - "params": { + "headers": { + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" + }, + "body": { "foo1": "$varFoo1", "foo2": "${max($a, $b)}" } diff --git a/examples/demo.yaml b/examples/demo.yaml index 35eec3c8..0bc18920 100644 --- a/examples/demo.yaml +++ b/examples/demo.yaml @@ -67,7 +67,9 @@ teststeps: request: method: POST url: /post - params: + headers: + Content-Type: application/x-www-form-urlencoded; charset=UTF-8 + body: foo1: $varFoo1 foo2: ${max($a, $b)} validate: diff --git a/examples/demo_test.go b/examples/demo_test.go index 301abf80..f7c19e82 100644 --- a/examples/demo_test.go +++ b/examples/demo_test.go @@ -49,6 +49,7 @@ func TestCaseDemo(t *testing.T) { AssertEqual("body.json.foo2", 12.3, "check args foo2"), hrp.Step("post form data"). POST("/post"). + WithHeaders(map[string]string{"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"}). WithParams(map[string]interface{}{ "foo1": "$varFoo1", // reference former extracted variable "foo2": "${max($a, $b)}", // 12.3; step level variables are independent, variable b is 3.45 here diff --git a/runner.go b/runner.go index cebf0392..d5d9a330 100644 --- a/runner.go +++ b/runner.go @@ -210,12 +210,23 @@ func (r *Runner) runStepRequest(step *TStep) (stepData *StepData, err error) { } var dataBytes []byte switch vv := data.(type) { - case map[string]interface{}: // post json - dataBytes, err = json.Marshal(vv) - if err != nil { - return nil, err + case map[string]interface{}: + contentType := req.Header.Get("Content-Type") + if strings.HasPrefix(contentType, "application/x-www-form-urlencoded") { + // post form data + formData := make(url.Values) + for k, v := range vv { + formData.Add(k, fmt.Sprint(v)) + } + dataBytes = []byte(formData.Encode()) + } else { + // post json + dataBytes, err = json.Marshal(vv) + if err != nil { + return nil, err + } + req.Header.Set("Content-Type", "application/json; charset=UTF-8") } - setContentType(req, "application/json; charset=UTF-8") case string: dataBytes = []byte(vv) case []byte: @@ -237,7 +248,6 @@ func (r *Runner) runStepRequest(step *TStep) (stepData *StepData, err error) { // do request action // req.Debug = r.debug - // resp, err := r.client.Do(string(step.Request.Method), step.Request.URL, v...) resp, err := r.client.Do(req) if err != nil { @@ -315,9 +325,3 @@ func setBodyBytes(req *http.Request, data []byte) { req.Body = ioutil.NopCloser(bytes.NewReader(data)) req.ContentLength = int64(len(data)) } - -func setContentType(req *http.Request, contentType string) { - if req.Header.Get("Content-Type") == "" { - req.Header.Set("Content-Type", contentType) - } -}