第 7 周作业
发布于: 2020 年 09 月 23 日
压测工具
写一个web压测工具。
输入
- url 
- 请求总次数 
- 并发数 
输出
- 平均响应时间 
- 95%响应时间 
测试
- 10并发 
- 100请求 
- 压测:http://www.baidu.com 
package mainimport (	"fmt"	"net/http"	"sort"	"sync"	"sync/atomic"	"time")func main() {	results := pressure("http://www.baidu.com", 100, 10)	items, errors := getItemsAndErrors(results)	fmt.Printf("avg:%f, pct95:%d, errors:%d", avg(items), pct95(items), errorCount(errors))}type result struct {	ms int64	ok bool}func pressure(url string, counts, concurrent int) []result {	var wg sync.WaitGroup	var c uint64	wg.Add(concurrent)	ch := make(chan result, concurrent)	for i := 0; i < concurrent; i++ {		go func() {			wg.Wait()			for ; atomic.AddUint64(&c, 1) <= uint64(counts); {				ms, ok := getUrl(url)				ch <- result{ms: ms, ok: ok}			}		}()		wg.Done()	}	results := make([]result, 0, counts)	for r := range ch {		results = append(results, r)		if len(results) == counts {			break		}	}	return results}func getUrl(url string) (ms int64, ok bool) {	start := time.Now()	resp, err := http.Get(url)	if err != nil {		fmt.Println(err)		return 0, false	}	defer resp.Body.Close()	//fmt.Println(resp)	return time.Since(start).Milliseconds(), err == nil}func avg(items []int64) float64 {	sum := int64(0)	for _, i := range items {		sum += i	}	return float64(sum) / float64(len(items))}func pct95(items []int64) int64 {	ints := make([]int, len(items))	for i, item := range items {		ints[i] = int(item)	}	sort.Ints(ints)	pct95Position := len(items) * 95 / 100	return int64(ints[pct95Position])}func errorCount(oks []bool) int {	count := 0	for _, ok := range oks {		if !ok {			count++		}	}	return count}func getItemsAndErrors(results []result) ([]int64, []bool) {	items, errors := make([]int64, len(results)), make([]bool, len(results))	for i, r := range results {		items[i] = r.ms		errors[i] = r.ok	}	return items, errors}
划线
评论
复制
发布于: 2020 年 09 月 23 日阅读数: 34
版权声明: 本文为 InfoQ 作者【Vincent】的原创文章。
原文链接:【http://xie.infoq.cn/article/3f1ef7fe7a706662a18c51ecd】。文章转载请联系作者。

Vincent
关注
还未添加个人签名 2018.07.06 加入
上个课还要写作业,哎,挺好,挺好。











 
    
评论