Merge branch 'main' of https://github.com/httprunner/hrp into refactor-plugin

This commit is contained in:
debugtalk
2022-02-24 18:53:38 +08:00
2 changed files with 50 additions and 33 deletions

View File

@@ -282,46 +282,53 @@ func (s *tStep) makeValidate(entry *Entry) error {
return nil return nil
} }
if strings.HasPrefix(respBody.MimeType, "application/json") { if strings.HasPrefix(respBody.MimeType, "application/json") {
var data []byte
var err error
// response body is json // response body is json
if respBody.Encoding == "base64" { if respBody.Encoding == "base64" {
// decode base64 text // decode base64 text
data, err := base64.StdEncoding.DecodeString(respBody.Text) data, err = base64.StdEncoding.DecodeString(respBody.Text)
if err != nil { if err != nil {
return errors.Wrap(err, "decode base64 error") return errors.Wrap(err, "decode base64 error")
} }
} else if respBody.Encoding == "" {
// no encoding
data = []byte(respBody.Text)
} else {
// other encoding type
return nil
}
// convert to json
var body interface{}
if err = json.Unmarshal(data, &body); err != nil {
return errors.Wrap(err, "json.Unmarshal body error")
}
jsonBody, ok := body.(map[string]interface{})
if !ok {
return fmt.Errorf("response body is not json, not matched with MimeType")
}
// convert to json // response body is json
var body interface{} keys := make([]string, 0, len(jsonBody))
if err = json.Unmarshal(data, &body); err != nil { for k := range jsonBody {
return errors.Wrap(err, "json.Unmarshal body error") keys = append(keys, k)
} }
jsonBody, ok := body.(map[string]interface{}) // sort map keys to keep validators in stable order
if !ok { sort.Strings(keys)
return fmt.Errorf("response body is not json, not matched with MimeType") for _, key := range keys {
} value := jsonBody[key]
switch v := value.(type) {
// response body is json case map[string]interface{}:
keys := make([]string, 0, len(jsonBody)) continue
for k := range jsonBody { case []interface{}:
keys = append(keys, k) continue
} default:
// sort map keys to keep validators in stable order s.Validators = append(s.Validators, hrp.Validator{
sort.Strings(keys) Check: fmt.Sprintf("body.%s", key),
for _, key := range keys { Assert: "equals",
value := jsonBody[key] Expect: v,
switch v := value.(type) { Message: fmt.Sprintf("assert response body %s", key),
case map[string]interface{}: })
continue
case []interface{}:
continue
default:
s.Validators = append(s.Validators, hrp.Validator{
Check: fmt.Sprintf("body.%s", key),
Assert: "equals",
Expect: v,
Message: fmt.Sprintf("assert response body %s", key),
})
}
} }
} }
} }

View File

@@ -720,6 +720,16 @@ func (r *caseRunner) runStepRequest(step *TStep) (stepResult *stepData, err erro
req.Header.Set("Content-Type", "application/json; charset=utf-8") req.Header.Set("Content-Type", "application/json; charset=utf-8")
} }
} }
case []interface{}:
contentType := req.Header.Get("Content-Type")
// post json
dataBytes, err = json.Marshal(vv)
if err != nil {
return stepResult, err
}
if contentType == "" {
req.Header.Set("Content-Type", "application/json; charset=utf-8")
}
case string: case string:
dataBytes = []byte(vv) dataBytes = []byte(vv)
case []byte: case []byte: