You need to enable JavaScript to run this app. 使用Go语言Resty编写API自动化POST测试请求返回400的排查方法
优惠活动
大模型
产品
解决方案
定价
更多

使用Go语言Resty编写API自动化POST测试请求返回400的排查方法

核心问题定位

你在Postman中可正常调用的接口,在Resty中返回400错误,核心原因是两个代码层面的漏配,和接口本身的可用性无关:

  • Resty的请求头自动推断逻辑不覆盖原始字符串Body:当你用SetBody()传入手写的字符串格式JSON时,Resty不会自动将请求的Content-Type设置为application/json,默认会按照纯文本类型text/plain发送请求,服务端校验请求体格式不匹配,直接返回400参数错误。
  • 代码吞掉了所有请求错误:你在调用Post()方法时用空标识符_接收了返回的error值,一旦出现JSON格式不合法、网络层异常这类问题,你完全拿不到具体的报错信息,无法快速定位问题根源。

对应的修复步骤

  1. 给POST请求显式补充Content-Type: application/json的请求头声明,匹配服务端对JSON格式请求的校验要求
  2. 不再忽略请求返回的error值,增加错误日志输出,覆盖网络、序列化层面的异常场景
  3. 可以选择直接传Go原生map/struct作为请求体,Resty会自动完成JSON序列化并附带正确的请求头,避免手写JSON字符串的格式错误

修复后的可运行测试代码

func Test_Post(t *testing.T){
    client := resty.New()
    resp, err := client.R().
        SetHeader("Content-Type", "application/json").
        SetBody(map[string]string{
            "text": "Hello, I am learning how to test APIs with Postman!",
        }).
        Post("https://api.funtranslations.com/translate/yoda")

    // 先处理请求层异常
    if err != nil {
        t.Fatalf("请求发送异常: %v", err)
    }
    assert.Equal(t, 200, resp.StatusCode())
}

补充说明:Postman调用时自动通过的原因是,当你选择raw JSON格式的请求体时,Postman会自动帮你附加匹配的Content-Type头,这步自动逻辑在Resty中需要你手动显式配置。

内容的提问来源于stack exchange,提问作者Faz shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.14 09:45:03