无REST服务器(控制器)时如何测试REST客户端?
如何测试REST客户端的变更?
REST API分为两个核心部分:
- 客户端:负责配置请求头、传递请求负载,发起REST API调用
- 服务器:接收REST请求,执行业务逻辑并返回响应
如果API的设计已经确定,客户端和服务器可以并行开发。
测试REST服务器的变更时,我们可以借助Postman、Swagger、Advanced REST client这类现成的REST客户端工具。但面对REST客户端的变更测试,我们需要验证并展示请求的完整信息,比如请求URL、PUT/POST等请求方法、请求头,以及作为请求体发送的JSON负载。举个例子,我们需要展示的信息包括:
- 请求URL:http://localhost:11111/schemas/employee
- 请求方法:PUT
- 请求头:Content-Type : application/custom.schema+json
- 请求头:Accept : application/json
我曾尝试过一款工具,但它仅支持GET和POST请求,无法处理PUT请求。这里提供一段优化后的Go语言示例代码,既可以实现对应的客户端PUT请求,也能直接输出所需展示的请求信息:
package main import ( "bytes" "fmt" "io" "net/http" "os" "path/filepath" ) var testFile, _ = filepath.Abs("/testSchema.json") var schemaURL = "http://localhost:11111/schemas/employee" func manageSchema(schemaEndpoint string) error { pwd, _ := os.Getwd() employeeData, err := os.ReadFile(pwd + testFile) if err != nil { fmt.Printf("读取请求体文件失败:%v\n", err) return err } // 输出请求体内容 fmt.Println("请求体内容:") fmt.Println(string(employeeData)) // 构造PUT请求 request, err := http.NewRequest(http.MethodPut, schemaEndpoint, bytes.NewBuffer(employeeData)) if err != nil { fmt.Printf("构造请求失败:%v\n", err) return err } // 设置请求头 request.Header.Set("Content-Type", "application/custom.schema+json") request.Header.Set("Accept", "application/json") // 输出核心请求信息 fmt.Printf("\n请求URL:%s\n", schemaEndpoint) fmt.Printf("请求方法:%s\n", http.MethodPut) fmt.Println("请求头:") for k, v := range request.Header { fmt.Printf("%s : %s\n", k, v[0]) } // 发送请求 client := &http.Client{} response, err := client.Do(request) if err != nil { fmt.Printf("\n发送PUT请求失败(端点:%s):%v\n", schemaEndpoint, err) return err } defer func(Body io.ReadCloser) { err := Body.Close() if err != nil { fmt.Println("关闭响应体失败:", err) } }(response.Body) return nil } func main() { if err := manageSchema(schemaURL); err != nil { os.Exit(1) } }
注:原示例代码中补充了请求信息的输出逻辑,运行代码时就能直接看到所需展示的请求URL、方法、头信息和请求体内容。
内容的提问来源于stack exchange,提问作者sandeep kamath
相关产品推荐
相关产品推荐

