mirror of
https://github.com/httprunner/httprunner.git
synced 2026-07-06 23:11:21 +08:00
fix: handle non-json response body
This commit is contained in:
13
response.go
13
response.go
@@ -12,7 +12,7 @@ import (
|
|||||||
"github.com/httprunner/httpboomer/builtin"
|
"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
|
// prepare response headers
|
||||||
headers := make(map[string]string)
|
headers := make(map[string]string)
|
||||||
for k, v := range resp.Response().Header {
|
for k, v := range resp.Response().Header {
|
||||||
@@ -30,9 +30,8 @@ func NewResponseObject(t *testing.T, resp *req.Resp) *ResponseObject {
|
|||||||
// parse response body
|
// parse response body
|
||||||
var body interface{}
|
var body interface{}
|
||||||
if err := json.Unmarshal(resp.Bytes(), &body); err != nil {
|
if err := json.Unmarshal(resp.Bytes(), &body); err != nil {
|
||||||
log.Fatalf("[NewResponseObject] json.Unmarshal response body err: %v, body: %v",
|
// response body is not json, use raw body
|
||||||
err, string(resp.Bytes()))
|
body = string(resp.Bytes())
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
respObjMeta := respObjMeta{
|
respObjMeta := respObjMeta{
|
||||||
@@ -46,15 +45,15 @@ func NewResponseObject(t *testing.T, resp *req.Resp) *ResponseObject {
|
|||||||
respObjMetaBytes, _ := json.Marshal(respObjMeta)
|
respObjMetaBytes, _ := json.Marshal(respObjMeta)
|
||||||
var data interface{}
|
var data interface{}
|
||||||
if err := json.Unmarshal(respObjMetaBytes, &data); err != nil {
|
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))
|
err, string(respObjMetaBytes))
|
||||||
return nil
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return &ResponseObject{
|
return &ResponseObject{
|
||||||
t: t,
|
t: t,
|
||||||
respObjMeta: data,
|
respObjMeta: data,
|
||||||
}
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type respObjMeta struct {
|
type respObjMeta struct {
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/imroc/req"
|
"github.com/imroc/req"
|
||||||
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
// run API test with default configs
|
// 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()
|
defer resp.Response().Body.Close()
|
||||||
|
|
||||||
// new response object
|
// 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
|
// extract variables from response
|
||||||
extractors := step.Extract
|
extractors := step.Extract
|
||||||
|
|||||||
Reference in New Issue
Block a user