fix: handle non-json response body

This commit is contained in:
debugtalk
2021-10-16 15:34:13 +08:00
parent 2dd3ac5b63
commit bb292aab8b
2 changed files with 12 additions and 8 deletions

View File

@@ -12,7 +12,7 @@ import (
"github.com/httprunner/httpboomer/builtin"
)
func NewResponseObject(t *testing.T, resp *req.Resp) *ResponseObject {
func NewResponseObject(t *testing.T, resp *req.Resp) (*ResponseObject, error) {
// prepare response headers
headers := make(map[string]string)
for k, v := range resp.Response().Header {
@@ -30,9 +30,8 @@ func NewResponseObject(t *testing.T, resp *req.Resp) *ResponseObject {
// parse response body
var body interface{}
if err := json.Unmarshal(resp.Bytes(), &body); err != nil {
log.Fatalf("[NewResponseObject] json.Unmarshal response body err: %v, body: %v",
err, string(resp.Bytes()))
return nil
// response body is not json, use raw body
body = string(resp.Bytes())
}
respObjMeta := respObjMeta{
@@ -46,15 +45,15 @@ func NewResponseObject(t *testing.T, resp *req.Resp) *ResponseObject {
respObjMetaBytes, _ := json.Marshal(respObjMeta)
var data interface{}
if err := json.Unmarshal(respObjMetaBytes, &data); err != nil {
log.Fatalf("[NewResponseObject] json.Unmarshal respObjMeta err: %v, respObjMetaBytes: %v",
log.Printf("[NewResponseObject] convert respObjMeta to interface{} error: %v, respObjMeta: %v",
err, string(respObjMetaBytes))
return nil
return nil, err
}
return &ResponseObject{
t: t,
respObjMeta: data,
}
}, nil
}
type respObjMeta struct {

View File

@@ -6,6 +6,7 @@ import (
"testing"
"github.com/imroc/req"
"github.com/pkg/errors"
)
// run API test with default configs
@@ -171,7 +172,11 @@ func (r *Runner) runStepRequest(step *TStep) (stepData *StepData, err error) {
defer resp.Response().Body.Close()
// new response object
respObj := NewResponseObject(r.t, resp)
respObj, err := NewResponseObject(r.t, resp)
if err != nil {
err = errors.Wrap(err, "init ResponseObject error")
return
}
// extract variables from response
extractors := step.Extract