golang分层测试之http压测脚本编写(1)

2020-04-28  本文已影响0人  周学习的名字被占了

前言

多线程并发-Goroutines

package main


import (
    "fmt"
    "time"
)

//并发执行的方法
func compute(value int) {
    for i := 0; i < value; i++ {
        time.Sleep(time.Second)
        fmt.Println(i)
    }
}

func main() {
    fmt.Println("Goroutine Println")

    //启动两个goroutines 

    go compute(10)
    go compute(10)

   time.Sleep(time.Second * 1)
}

使用Goroutines编写压测脚本

package main

import (
    "fmt"
    "net/http"
    "strings"
    "time"
)

var(
        no =0
        ok =0 //记录请求成功失败数
        useTime = 0.0 //使用时间
        num=100 //并发个数
)

func main() {
        startTime := time.Now().UnixNano()//记录并发开始时间
        goroutinetest(num)
        endTime := time.Now().UnixNano()
        useTime = float64(endTime-startTime) / 1e9 //记录所有请求完成时间
        fmt.Println("响应成功数:",ok)
        fmt.Println("相应失败数:",no)
        fmt.Println("qps :", fmt.Sprintf("%.4f", float64(num)/useTime))
}

func goroutinetest(num int) {
        for i := 0; i < num; i++ {
            go postdata()
        }
        time.Sleep(time.Second * 1)
}

func postdata(){
    resp, err := http.Post("http://www.baidu.com", "application/x-www-form-urlencoded", strings.NewReader("id=1"))
    if err != nil {
        panic(err)
    }
    //关闭连接
    defer resp.Body.Close()

    if resp.StatusCode != 200 {no += 1}//使用响应吗作为断言
    else{ok += 1}
}
go run godemotest3.go
响应成功数: 100
相应失败数: 0
qps : 99.9300

小结

上一篇下一篇

猜你喜欢

热点阅读