Documentation
¶
Overview ¶
Package webtest 提供 Web 测试工具,用于 enhance 框架。
该模块提供 HTTP 客户端测试工具,用于测试 Web 端点和控制器。 支持模拟 HTTP 请求、验证响应、测试中间件等功能。
架构设计 ¶
- TestServer: 测试服务器接口,用于启动临时 HTTP 服务
- TestClient: 测试客户端接口,用于发送 HTTP 请求
- RequestBuilder: 请求构建器接口,支持链式配置
- ResponseVerifier: 响应验证器接口,提供便捷的断言方法
核心功能 ¶
- 模拟请求: 支持 GET、POST、PUT、DELETE 等 HTTP 方法
- 响应验证: 支持状态码、响应头、响应体验证
- JSON 验证: 支持 JSON 响应体验证
- 中间件测试: 支持测试 HTTP 中间件
使用方式 ¶
创建测试服务器:
server := webtest.NewTestServer(router) defer server.Close()
发送请求:
resp := server.GET("/api/users").
WithHeader("Authorization", "Bearer token").
Execute()
验证响应:
resp.AssertStatus(200)
resp.AssertJSONPath("$.users[0].name", "John")
resp.AssertBodyContains("success")
请求构建 ¶
支持链式构建请求:
server.POST("/api/users").
WithJSON(map[string]any{"name": "John"}).
WithHeader("Content-Type", "application/json").
WithQuery("page", "1").
Execute()
响应断言 ¶
提供丰富的断言方法:
- AssertStatus: 断言 HTTP 状态码
- AssertHeader: 断言响应头
- AssertBody: 断言响应体
- AssertJSONPath: 断言 JSON 路径值
- AssertBodyContains: 断言响应体包含指定字符串
Index ¶
- type RequestBuilder
- type RequestSpec
- type ResponseSpec
- func (r *ResponseSpec) Body() string
- func (r *ResponseSpec) BodyContains(substring string) *ResponseSpec
- func (r *ResponseSpec) BodyEquals(expected string) *ResponseSpec
- func (r *ResponseSpec) Header(name, expected string) *ResponseSpec
- func (r *ResponseSpec) JSONBody(target any) *ResponseSpec
- func (r *ResponseSpec) Print() *ResponseSpec
- func (r *ResponseSpec) Recorder() *httptest.ResponseRecorder
- func (r *ResponseSpec) Status(expected int) *ResponseSpec
- func (r *ResponseSpec) StatusIsBadRequest() *ResponseSpec
- func (r *ResponseSpec) StatusIsCreated() *ResponseSpec
- func (r *ResponseSpec) StatusIsForbidden() *ResponseSpec
- func (r *ResponseSpec) StatusIsNoContent() *ResponseSpec
- func (r *ResponseSpec) StatusIsNotFound() *ResponseSpec
- func (r *ResponseSpec) StatusIsOk() *ResponseSpec
- func (r *ResponseSpec) StatusIsUnauthorized() *ResponseSpec
- type ResponseVerifier
- type TestServer
- type WebTestClient
- func (c *WebTestClient) BaseURL(url string) *WebTestClient
- func (c *WebTestClient) Delete(path string) *RequestSpec
- func (c *WebTestClient) Get(path string) *RequestSpec
- func (c *WebTestClient) Header(name, value string) *WebTestClient
- func (c *WebTestClient) Patch(path string) *RequestSpec
- func (c *WebTestClient) Post(path string) *RequestSpec
- func (c *WebTestClient) Put(path string) *RequestSpec
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type RequestBuilder ¶
type RequestBuilder interface {
// WithHeader 设置请求头。
WithHeader(name, value string) RequestBuilder
// WithJSON 设置 JSON 请求体。
WithJSON(data any) RequestBuilder
// WithBody 设置请求体。
WithBody(body []byte) RequestBuilder
// WithQuery 设置查询参数。
WithQuery(key, value string) RequestBuilder
// Execute 发起请求并返回响应验证器。
Execute() ResponseVerifier
}
RequestBuilder 请求构建器接口。
支持链式构建 HTTP 请求。
type RequestSpec ¶
type RequestSpec struct {
// contains filtered or unexported fields
}
RequestSpec 请求规范,用于链式构建 HTTP 请求。
func (*RequestSpec) ContentType ¶
func (r *RequestSpec) ContentType(contentType string) *RequestSpec
ContentType 设置 Content-Type。
func (*RequestSpec) Header ¶
func (r *RequestSpec) Header(name, value string) *RequestSpec
Header 设置请求头。
type ResponseSpec ¶
type ResponseSpec struct {
// contains filtered or unexported fields
}
ResponseSpec 响应规范,用于链式断言 HTTP 响应。
func (*ResponseSpec) BodyContains ¶
func (r *ResponseSpec) BodyContains(substring string) *ResponseSpec
BodyContains 断言响应体包含指定子串。
func (*ResponseSpec) BodyEquals ¶
func (r *ResponseSpec) BodyEquals(expected string) *ResponseSpec
BodyEquals 断言响应体等于指定字符串。
func (*ResponseSpec) Header ¶
func (r *ResponseSpec) Header(name, expected string) *ResponseSpec
Header 断言响应头。
func (*ResponseSpec) JSONBody ¶
func (r *ResponseSpec) JSONBody(target any) *ResponseSpec
JSONBody 解析 JSON 响应体到目标对象。
func (*ResponseSpec) Recorder ¶
func (r *ResponseSpec) Recorder() *httptest.ResponseRecorder
Recorder 获取底层 ResponseRecorder。
func (*ResponseSpec) Status ¶
func (r *ResponseSpec) Status(expected int) *ResponseSpec
Status 断言状态码。
func (*ResponseSpec) StatusIsBadRequest ¶
func (r *ResponseSpec) StatusIsBadRequest() *ResponseSpec
StatusIsBadRequest 断言 400 状态码。
func (*ResponseSpec) StatusIsCreated ¶
func (r *ResponseSpec) StatusIsCreated() *ResponseSpec
StatusIsCreated 断言 201 状态码。
func (*ResponseSpec) StatusIsForbidden ¶
func (r *ResponseSpec) StatusIsForbidden() *ResponseSpec
StatusIsForbidden 断言 403 状态码。
func (*ResponseSpec) StatusIsNoContent ¶
func (r *ResponseSpec) StatusIsNoContent() *ResponseSpec
StatusIsNoContent 断言 204 状态码。
func (*ResponseSpec) StatusIsNotFound ¶
func (r *ResponseSpec) StatusIsNotFound() *ResponseSpec
StatusIsNotFound 断言 404 状态码。
func (*ResponseSpec) StatusIsOk ¶
func (r *ResponseSpec) StatusIsOk() *ResponseSpec
StatusIsOk 断言 200 状态码。
func (*ResponseSpec) StatusIsUnauthorized ¶
func (r *ResponseSpec) StatusIsUnauthorized() *ResponseSpec
StatusIsUnauthorized 断言 401 状态码。
type ResponseVerifier ¶
type ResponseVerifier interface {
// AssertStatus 断言 HTTP 状态码。
AssertStatus(expected int) ResponseVerifier
// AssertHeader 断言响应头。
AssertHeader(name, expected string) ResponseVerifier
// AssertBody 断言响应体。
AssertBody(expected string) ResponseVerifier
// AssertBodyContains 断言响应体包含指定字符串。
AssertBodyContains(substring string) ResponseVerifier
// Body 获取响应体字符串。
Body() string
// StatusCode 获取 HTTP 状态码。
StatusCode() int
}
ResponseVerifier 响应验证器接口。
提供便捷的断言方法验证 HTTP 响应。
type TestServer ¶
type TestServer interface {
// GET 发起 GET 请求并返回请求构建器。
GET(path string) RequestBuilder
// POST 发起 POST 请求并返回请求构建器。
POST(path string) RequestBuilder
// PUT 发起 PUT 请求并返回请求构建器。
PUT(path string) RequestBuilder
// DELETE 发起 DELETE 请求并返回请求构建器。
DELETE(path string) RequestBuilder
// Patch 发起 PATCH 请求并返回请求构建器。
Patch(path string) RequestBuilder
// Close 关闭测试服务器。
Close() error
// URL 获取服务器 URL。
URL() string
}
TestServer 测试服务器接口。
用于启动临时 HTTP 服务,测试 Web 端点和控制器。
type WebTestClient ¶
type WebTestClient struct {
// contains filtered or unexported fields
}
WebTestClient Web 测试客户端。
func CreateWebTestClient ¶
func CreateWebTestClient(handler http.Handler) *WebTestClient
CreateWebTestClient 创建 Web 测试客户端(便捷函数)。
func NewWebTestClient ¶
func NewWebTestClient(handler http.Handler) *WebTestClient
NewWebTestClient 创建 Web 测试客户端。
func (*WebTestClient) BaseURL ¶
func (c *WebTestClient) BaseURL(url string) *WebTestClient
BaseURL 设置基础 URL。
func (*WebTestClient) Delete ¶
func (c *WebTestClient) Delete(path string) *RequestSpec
Delete 发起 DELETE 请求。
func (*WebTestClient) Header ¶
func (c *WebTestClient) Header(name, value string) *WebTestClient
Header 设置默认请求头。
func (*WebTestClient) Patch ¶
func (c *WebTestClient) Patch(path string) *RequestSpec
Patch 发起 PATCH 请求。
func (*WebTestClient) Post ¶
func (c *WebTestClient) Post(path string) *RequestSpec
Post 发起 POST 请求。