mirror of
https://github.com/httprunner/httprunner.git
synced 2026-09-05 07:26:55 +08:00
fix: post form data
This commit is contained in:
@@ -82,6 +82,7 @@ func TestCaseDemo(t *testing.T) {
|
|||||||
AssertEqual("body.json.foo2", 12.3, "check args foo2"),
|
AssertEqual("body.json.foo2", 12.3, "check args foo2"),
|
||||||
hrp.Step("post form data").
|
hrp.Step("post form data").
|
||||||
POST("/post").
|
POST("/post").
|
||||||
|
WithHeaders(map[string]string{"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"}).
|
||||||
WithParams(map[string]interface{}{
|
WithParams(map[string]interface{}{
|
||||||
"foo1": "$varFoo1", // reference former extracted variable
|
"foo1": "$varFoo1", // reference former extracted variable
|
||||||
"foo2": "${max($a, $b)}", // 12.3; step level variables are independent, variable b is 3.45 here
|
"foo2": "${max($a, $b)}", // 12.3; step level variables are independent, variable b is 3.45 here
|
||||||
|
|||||||
+2
-1
@@ -49,7 +49,8 @@ var demoTestCase = &TestCase{
|
|||||||
AssertEqual("body.json.foo2", 12.3, "check args foo2"),
|
AssertEqual("body.json.foo2", 12.3, "check args foo2"),
|
||||||
Step("post form data").
|
Step("post form data").
|
||||||
POST("/post").
|
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
|
"foo1": "$varFoo1", // reference former extracted variable
|
||||||
"foo2": "${max($a, $b)}", // 12.3; step level variables are independent, variable b is 3.45 here
|
"foo2": "${max($a, $b)}", // 12.3; step level variables are independent, variable b is 3.45 here
|
||||||
}).
|
}).
|
||||||
|
|||||||
+4
-1
@@ -100,7 +100,10 @@
|
|||||||
"request": {
|
"request": {
|
||||||
"method": "POST",
|
"method": "POST",
|
||||||
"url": "/post",
|
"url": "/post",
|
||||||
"params": {
|
"headers": {
|
||||||
|
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
|
||||||
|
},
|
||||||
|
"body": {
|
||||||
"foo1": "$varFoo1",
|
"foo1": "$varFoo1",
|
||||||
"foo2": "${max($a, $b)}"
|
"foo2": "${max($a, $b)}"
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-1
@@ -67,7 +67,9 @@ teststeps:
|
|||||||
request:
|
request:
|
||||||
method: POST
|
method: POST
|
||||||
url: /post
|
url: /post
|
||||||
params:
|
headers:
|
||||||
|
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
|
||||||
|
body:
|
||||||
foo1: $varFoo1
|
foo1: $varFoo1
|
||||||
foo2: ${max($a, $b)}
|
foo2: ${max($a, $b)}
|
||||||
validate:
|
validate:
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ func TestCaseDemo(t *testing.T) {
|
|||||||
AssertEqual("body.json.foo2", 12.3, "check args foo2"),
|
AssertEqual("body.json.foo2", 12.3, "check args foo2"),
|
||||||
hrp.Step("post form data").
|
hrp.Step("post form data").
|
||||||
POST("/post").
|
POST("/post").
|
||||||
|
WithHeaders(map[string]string{"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"}).
|
||||||
WithParams(map[string]interface{}{
|
WithParams(map[string]interface{}{
|
||||||
"foo1": "$varFoo1", // reference former extracted variable
|
"foo1": "$varFoo1", // reference former extracted variable
|
||||||
"foo2": "${max($a, $b)}", // 12.3; step level variables are independent, variable b is 3.45 here
|
"foo2": "${max($a, $b)}", // 12.3; step level variables are independent, variable b is 3.45 here
|
||||||
|
|||||||
@@ -210,12 +210,23 @@ func (r *Runner) runStepRequest(step *TStep) (stepData *StepData, err error) {
|
|||||||
}
|
}
|
||||||
var dataBytes []byte
|
var dataBytes []byte
|
||||||
switch vv := data.(type) {
|
switch vv := data.(type) {
|
||||||
case map[string]interface{}: // post json
|
case map[string]interface{}:
|
||||||
dataBytes, err = json.Marshal(vv)
|
contentType := req.Header.Get("Content-Type")
|
||||||
if err != nil {
|
if strings.HasPrefix(contentType, "application/x-www-form-urlencoded") {
|
||||||
return nil, err
|
// 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:
|
case string:
|
||||||
dataBytes = []byte(vv)
|
dataBytes = []byte(vv)
|
||||||
case []byte:
|
case []byte:
|
||||||
@@ -237,7 +248,6 @@ func (r *Runner) runStepRequest(step *TStep) (stepData *StepData, err error) {
|
|||||||
|
|
||||||
// do request action
|
// do request action
|
||||||
// req.Debug = r.debug
|
// req.Debug = r.debug
|
||||||
// resp, err := r.client.Do(string(step.Request.Method), step.Request.URL, v...)
|
|
||||||
|
|
||||||
resp, err := r.client.Do(req)
|
resp, err := r.client.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -315,9 +325,3 @@ func setBodyBytes(req *http.Request, data []byte) {
|
|||||||
req.Body = ioutil.NopCloser(bytes.NewReader(data))
|
req.Body = ioutil.NopCloser(bytes.NewReader(data))
|
||||||
req.ContentLength = int64(len(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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user