Skip to content

Instantly share code, notes, and snippets.

@jemygraw
Last active May 9, 2016 04:02
Show Gist options
  • Save jemygraw/d5603ab0728169caa2f6 to your computer and use it in GitHub Desktop.
Save jemygraw/d5603ab0728169caa2f6 to your computer and use it in GitHub Desktop.
load test for server
package main
import (
"flag"
"fmt"
"io"
"net/http"
"os"
"runtime"
"sync"
"sync/atomic"
"time"
)
func main() {
runtime.GOMAXPROCS(runtime.NumCPU())
var yes int32 = 0
var no int32 = 0
wg := sync.WaitGroup{}
var worker int
var url string
var times int
flag.IntVar(&times, "times", 0, "test times")
flag.IntVar(&worker, "worker", 0, "routine count")
flag.StringVar(&url, "url", "", "url to test")
flag.Parse()
if worker == 0 {
fmt.Println("Err: no worker")
return
}
if times == 0 {
fmt.Println("Err: no times")
return
}
if url == "" {
fmt.Println("Err: no url")
return
}
for i := 1; i <= times; i++ {
if i%worker == 0 {
wg.Wait()
}
wg.Add(1)
go func() {
defer wg.Done()
start := time.Now()
var err error = nil
resp, respErr := http.Get(url)
if respErr != nil {
err = respErr
} else {
defer resp.Body.Close()
devOut, devErr := os.OpenFile("/dev/null", os.O_WRONLY, 0666)
if devErr != nil {
err = devErr
} else {
defer devOut.Close()
_, cpErr := io.Copy(devOut, resp.Body)
if cpErr != nil {
err = cpErr
}
}
}
if err != nil {
fmt.Println(fmt.Sprintf("%s\t%s", err, time.Since(start)))
atomic.AddInt32(&no, 1)
} else {
fmt.Println(time.Since(start))
atomic.AddInt32(&yes, 1)
}
}()
}
wg.Wait()
fmt.Println()
fmt.Println("Ok:\t", yes)
fmt.Println("Fail:\t", no)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment