mirror of
https://github.com/httprunner/httprunner.git
synced 2026-06-09 09:49:33 +08:00
Merge branch 'main' of https://github.com/httprunner/hrp into refactor-plugin
This commit is contained in:
@@ -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),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
10
runner.go
10
runner.go
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user