Предположим, у меня есть API с двумя маршрутами, один из которых предназначен для сохранения пользователя, а другой - для получения пользователя, указанного ниже: -
router.go
package main
import (
"github.com/gin-gonic/gin"
"go-training/postAPI/controller"
)
type Route struct {
Name string
Method string
Pattern string
HandlerFunc func(*gin.Context)
}
type Routes []Route
var routes = Routes{
Route{"SaveUser", "POST", "/post", controller.SaveUser},
Route{"GetUser", "GET", "/post/:id", controller.GetUser},
}
func NewRouter() {
router := gin.Default()
v1 := router.Group("/api/v1")
for _, route := range routes {
switch route.Method {
case "GET":
v1.GET(route.Pattern, route.HandlerFunc)
case "POST":
v1.POST(route.Pattern, route.HandlerFunc)
case "PUT":
v1.PUT(route.Pattern, route.HandlerFunc)
case "DELETE":
v1.DELETE(route.Pattern, route.HandlerFunc)
default:
v1.GET(route.Pattern, func(c *gin.Context) {
c.JSON(200, gin.H{
"result": "Specify a valid http method with this route.",
})
})
}
}
router.Run(":8080")
}
При нажатии на этиurl localhost:8080/api/v1/post
method: - POST
почтальоном, он получит данные json от почтальона и войдет в базу данных, а при получении пользователем url localhost:8080/api/v1/post/:id
method: - GET
почтальоном, затем вернет совпадение пользователя сидентификатор введен.Теперь я хочу пройти нагрузочный тест (vegeta) этих API-интерфейсов, потому что я хочу видеть, сколько запросов потребуется в одну секунду.Я прочитал эту ссылку и внедрил программу, но я не знаю, как мне пройти нагрузочный тест моего API отдельно.
Может кто-нибудь сказать мне, как я буду проходить нагрузочный тестэти два API или любые ссылки?
Отредактировано
main.go
package main
func main() {
NewRouter()
GetVegeta()
}
vegeta.go
// Panic if there is an error
func check(err error) {
if err != nil {
panic(err)
}
}
func GetVegeta() {
var (
users int
)
// The Go random number generator source is deterministic, so we need to seed
// Configure our command line app
app := cli.NewApp()
app.Name = "Pokemon User Data Generator"
app.Usage = "generate a stream of test data for vegeta. Type 'pokemon help' for details"
// Add -users flag, which defaults to 5
app.Flags = []cli.Flag{
cli.IntFlag{
Name: "users",
},
}
// Our app's main action
app.Action = func(c *cli.Context) error {
// Combine verb and URL to a target for Vegeta
verb := c.Args().Get(0)
url := c.Args().Get(1)
target := fmt.Sprintf("%s %s", verb, url)
fmt.Println(verb)
fmt.Println(url)
fmt.Println(target)
if len(target) > 1 {
for i := 1; i < users; i++ {
fmt.Println(users)
}
} else {
// Return an error if we're missing the required command line arguments
return cli.NewExitError("You must specify the target in format 'VERB url'", 1)
}
return nil
}
app.Run(os.Args)
}
Эти файлы находятся в одной папке с именем Template
.Я запускаю всю эту папку с помощью команды ./Template -users=10 GET https://localhost:8080/api/v1/customer | vegeta attack -rate=10 -duration=30s | vegeta report
, запустив этот запуск всех API, и когда я нажму любой API из почтальона, он выдаст мне ошибку из bad method: [GIN]
и encode: can't detect encoding of "stdin"
Как я решу это, чтобы составить отчет о моих API.
Спасибо за ваше драгоценное время!