Golang:使用gobench测试几次

时间:2014-06-02 23:16:04

标签: go

我正在与gobench合作,帮助我们测试请求并提供一些有关性能的指标。

我做了一个修改,在每次通话中发送我需要测试的网址。但是我发现它无法将该功能调用两次或更多次。

func GobenchMain(currectRoute *string) {
    startTime := time.Now()

    var done sync.WaitGroup
    results := make(map[int]*Result)
...
}

之后我意识到gobench文件的问题就在这一部分:

signalChannel := make(chan os.Signal, 2)
    signal.Notify(signalChannel, os.Interrupt, syscall.SIGTERM)
    go func() {
        _ = <-signalChannel
        printResults(results, startTime)
        os.Exit(0)
    }()

最后,这是我期望进行调用的方式,并且这样做会产生更多的请求。

package main

import (
    "fmt"
    "gobench"
)

var searchRoutes = []string{
    "http:www.myurl.com/request1",
    "http:www.myurl.com/request2",
    "http:www.myurl.com/request3",
    "http:www.myurl.com/request4",
}

func main() {
    for i := 0; i < len(searchRoutes); i++ {
        gobench.GobenchMain(&searchRoutes[i])
    }
...
}

我怎么能一次打电话给我的GobeachMain? ;目前使用类似的代码它只能调用一次,因为在gobench得到结果后,os.exit(0),如果我删除这一行,程序就会立即停止

1 个答案:

答案 0 :(得分:3)

gobench从未被设计为用作库。

只需调用类似这样的二进制文件

package main

import (
    "log"
    "os/exec"
)

func gobench(url string) {
    cmd := exec.Command("gobench", url)
    err := cmd.Run()
    if err != nil {
        log.Fatalf("Command finished with error: %v", err)
    }
}

var searchRoutes = []string{
    "http:www.myurl.com/request1",
    "http:www.myurl.com/request2",
    "http:www.myurl.com/request3",
    "http:www.myurl.com/request4",
}

func main() {
    for i := 0; i < len(searchRoutes); i++ {
        gobench(searchRoutes[i])
    }
}