Đi thử nghiệm các gói để cải thiện năng suất
Kiểm thử phần mềm là một quá trình đánh giá các chỉ số của chương trình bằng cách sử dụng các công cụ, tập lệnh hoặc thủ công.
Kiểm thử là một phần không thể thiếu của chu trình phát triển phần mềm. Kiểm tra toàn diện cung cấp thông tin chuyên sâu về tính toàn vẹn của ứng dụng của bạn.
Bạn có thể ngăn chặn và sửa lỗi bằng cách viết các bài kiểm tra, đánh giá hiệu suất chương trình và tự động hóa quy trình làm việc.
Mục Lục
Bắt đầu với thử nghiệm trong khi di chuyển
Thư viện tiêu chuẩn Go cung cấp một thử nghiệm bưu kiện. Các thử nghiệm gói có điểm chuẩn, mờ, bỏ qua, kiểm tra phụ, điểm chuẩn phụ và các chức năng khác.
Kiểm tra với gói này rất dễ dàng. Dưới đây là một cấu trúc kiểm tra đơn giản sẽ đóng vai trò như một mô hình cho bài kiểm tra:
type Cases struct {
expected int
actual int
argument string
}
Đây là một hàm đơn giản chuyển đổi chuỗi thành số nguyên. Thử nghiệm của bạn sẽ kiểm tra chức năng này.
import (
"strconv"
)func StringToInteger(str string) int {
integer, err := strconv.Atoi(str)
if err != nil {
return 0
}
return integer
}
Các StringToInteger hàm trả về 0 nếu có lỗi khi chuyển đổi và số nguyên nếu không có lỗi.
Đây là một hàm kiểm tra cho StringToInteger:
func TestStringToInteger(test *testing.T) {
expectedInt := StringToInteger("3")caseInstance := Cases {
expected: expectedInt,
actual: 3,
}
if caseInstance.expected == caseInstance.actual {
} else {
test.Fail()
}
}
Các TestStringToInteger chức năng kiểm tra chấp nhận một thử nghiệm.T đối tượng như đối số của nó. Các mong đợi biến giữ kết quả của chuyển đổi chuỗi. Các caseInstance biến là cấu trúc Trường hợp khởi tạo cho thử nghiệm. Các nếu câu lệnh so sánh giá trị mong đợi và giá trị thực tế.
Các Thất bại phương thức trả về một bài kiểm tra không thành công trong câu lệnh else nếu các giá trị không bằng nhau.
Go cung cấp một kiểm tra lệnh để tự động hóa và truy xuất thông tin chi tiết về các bài kiểm tra và chương trình của bạn.
go test
go help test
Trang trợ giúp cung cấp thông tin chi tiết về cách đi kiểm tra làm:
Hệ sinh thái cờ vây là nơi có nhiều thư viện giúp thử nghiệm dễ tiếp cận và linh hoạt hơn. Có rất nhiều chức năng ngoài thử nghiệm gói, bao gồm hồi quy và kiểm thử đơn vị.
Gói Chứng thực
Gói Testify là một trong những khuôn khổ Go phổ biến nhất để thử nghiệm các gói. Nó cung cấp các công cụ bạn sẽ cần để viết các bài kiểm tra hiệu quả, với các chức năng của bộ kiểm tra, chế nhạo và xác nhận dễ dàng.
Testify phù hợp với phát triển theo hướng thử nghiệm vì gói cung cấp chế nhạo bưu kiện. Điều này cung cấp một cơ chế để viết các đối tượng giả mà bạn có thể sử dụng thay cho các đối tượng thực trong thử nghiệm.
Gói này cũng cung cấp:
- Một khẳng định gói cung cấp các phương pháp hữu ích để viết các bài kiểm tra thân thiện, dễ đọc.
- Một yêu cầu gói tương tự như khẳng định gói trả về kết quả boolean.
- Một Thượng hạng gói cho bộ thử nghiệm có cấu trúc.
Testify mở rộng trên thử nghiệm gói và bạn có thể sử dụng đi kiểm tra lệnh để chạy các bài kiểm tra được viết bằng gói Testify.
Testify hỗ trợ các phiên bản Go từ 1.13. Bạn có thể thêm gói làm phụ thuộc dự án bằng lệnh này:
go get github.com/stretchr/testify
Đây là một bài kiểm tra xác nhận đơn giản với gói Testify của khẳng định bưu kiện:
package mainimport (
"testing"
"github.com/stretchr/testify/assert"
)
func TestSomething(t *testing.T) {
assert.Equal(t, 123, 123, "they should be equal")
assert.NotEqual(t, 123, 456, "they should not be equal")
}
Các TestSomething chức năng kiểm tra có cấu trúc kiểu kiểm tra của thử nghiệm gói như một đối số. Các Bình đẳng và Không công bằng các phương pháp dành cho bình đẳng và các khẳng định dựa trên bất bình đẳng từ Testify’s khẳng định bưu kiện.
Gói GoConvey
GoConvey là một công cụ kiểm tra Go được ưu tiên cho tính dễ hiểu đối với thử nghiệm bưu kiện. Nó bao gồm chức năng kiểm tra thiết bị đầu cuối (CLI) và trình duyệt (GUI).
Gói GoConvey tích hợp với thử nghiệm , cung cấp giao diện người dùng web để làm việc với các bài kiểm tra Go gốc. Nó cũng bao gồm chức năng cho kiểm tra hồi quy, kết quả đầu ra có thể tùy chỉnh và tạo mã kiểm tra. Bạn có thể chạy thử nghiệm tự động, truy cập các định dạng phạm vi trong HTML và tùy chỉnh GUI.
Chạy lệnh này trong phần cuối của không gian làm việc Go của bạn để cài đặt gói Go Convey.
go get github.com/smartystreets/goconvey
Đây là một ví dụ đơn giản về việc viết các bài kiểm tra với gói GoConvey.
package mainimport (
. "github.com/smartystreets/goconvey/convey"
"testing"
)
func TestSomething(t *testing.T) {
Convey("Declare variable", t, func() {
x := 1
Convey("increment variable", func() {
x++
Convey("assert equality", func() {
So(x, ShouldEqual, 2)
})
})
})
}
Bạn sẽ cần nhập chuyên chở gói sử dụng ký hiệu chấm cho bài kiểm tra.
Chức năng Truyền tải từ Chuyên chở gói giúp xác định phạm vi kiểm tra. Cuối cùng Chuyên chở lệnh gọi hàm trong ví dụ mã xác nhận sự bình đẳng giữa x biến và 2sử dụng ShouldEqual hàm số.
Gói kỳ vọng HTTP
Gói HTTP Expect là một gói khai báo dễ sử dụng, ngắn gọn, dành cho thử nghiệm API REST và HTTP end-to-end của Go. Bạn có thể sử dụng nó để xây dựng các yêu cầu HTTP tăng dần và kiểm tra các phản hồi và tải trọng của chúng một cách đệ quy.
Các httpexpect gói là một tập hợp các trình xây dựng có khả năng tạo ra các yêu cầu và xác nhận HTTP trên các phản hồi và tải trọng HTTP. Nó được xây dựng trên http, thử nghiệmvà các gói khác. Gói này cũng hoạt động tốt với httptest bưu kiện.
httpexpect cung cấp chức năng xây dựng yêu cầu với xây dựng URL, tiêu đề, cookie và tải trọng. Nó xử lý các xác nhận phản hồi, xác nhận trọng tải, in ấn đẹp và WebSockets.
Chạy lệnh này trong phần cuối của thư mục làm việc của bạn để cài đặt httpexpect bưu kiện.
go get github.com/gavv/httpexpect
Đây là một ví dụ đơn giản về việc kiểm tra một hàm xử lý với httpexpect bưu kiện.
package mainimport (
"fmt"
"github.com/gavv/httpexpect/v2"
"net/http"
"net/http/httptest"
"testing"
)
func exampleHandler() http.Handler {
return http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
fmt.Fprintln(writer, "Hello World")
})
}
func TestexampleHandler(t *testing.T) {
handler := exampleHandler()
server := httptest.NewServer(handler)
defer server.Close()
expect := httpexpect.New(t, server.URL)
expect.GET("/").
Expect().
Status(http.StatusOK).JSON().Array().Empty()
}
Các exampleHandler hàm xử lý trả về một trình xử lý HTTP cho httpexpect bưu kiện. Các TestexampleHandler hàm khai báo một thể hiện của hàm xử lý. Sau đó, nó tạo một máy chủ mới để kiểm tra điểm cuối với httptest bưu kiện.
Các chờ đợi biến là của bạn httpexpect ví dụ đánh vào LẤY yêu cầu đường dẫn gốc của điểm cuối trên máy chủ. Các Trạng thái hàm trả về mã trạng thái (trong trường hợp này, 200) nếu thử nghiệm thành công.
Viết các bài kiểm tra toàn diện và trực quan
Kiểm tra đi một chặng đường dài trong việc đánh giá tính toàn vẹn của ứng dụng của bạn và có nhiều mẫu và phương pháp kiểm tra bạn có thể sử dụng cho các chương trình của mình. Cốt lõi của quy trình thử nghiệm của bạn, bạn nên viết các thử nghiệm trực quan mà bạn có thể cải thiện khi các chương trình của bạn thay đổi theo thời gian.