Как я буду делать нагрузочный тест (вегета) для нескольких методов несколько в Голанге - PullRequest
0 голосов
/ 15 октября 2018

Предположим, у меня есть 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.

Спасибо за ваше драгоценное время!

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

вы можете использовать https://linux.die.net/man/1/siege, и это позволит вам тестировать API и иметь отчет

0 голосов
/ 15 октября 2018

Vegeta принимает параметры параллелизма и времени, и вы можете создавать из них отчет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...