Golang单元测试和压力测试
package main
import (
"net/http/httptest"
"testing"
)
// 模拟的HTTP处理函数
func mockHandler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello, World!"))
}
// 单元测试示例
func TestMockHandler(t *testing.T) {
// 创建一个模拟的HTTP请求
req := httptest.NewRequest("GET", "http://example.com/test", nil)
// 创建一个模拟的HTTP响应记录器
w := httptest.NewRecorder()
// 调用我们的处理函数
mockHandler(w, req)
// 检查响应是否符合预期
if w.Code != http.StatusOK {
t.Errorf("Expected status code %d, got %d", http.StatusOK, w.Code)
}
if w.Body.String() != "Hello, World!" {
t.Errorf("Expected body 'Hello, World!', got '%s'", w.Body.String())
}
}
// 压力测试示例
func BenchmarkMockHandler(b *testing.B) {
req := httptest.NewRequest("GET", "http://example.com/test", nil)
w := httptest.NewRecorder()
for i := 0; i < b.N; i++ {
mockHandler(w, req)
w.Body.Reset()
}
}
这个代码实例展示了如何使用httptest
包来模拟HTTP请求和响应,并编写单元测试和压力测试来验证HTTP处理函数的行为。在单元测试中,我们模拟了一个请求,并检查了响应的状态码和正文内容。在压力测试中,我们通过重置响应体来优化性能,以便能够运行更多的迭代。
评论已关闭