From bb292aab8b0841d192a077da7de84c18fca40be6 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Sat, 16 Oct 2021 15:34:13 +0800 Subject: [PATCH] fix: handle non-json response body --- response.go | 13 ++++++------- runner.go | 7 ++++++- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/response.go b/response.go index beaca56c..7abeb607 100644 --- a/response.go +++ b/response.go @@ -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 { diff --git a/runner.go b/runner.go index 0180c84b..d812b4c6 100644 --- a/runner.go +++ b/runner.go @@ -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