Go语言实现HTTP压测工具(4)——Demo开发与初期调试

0. 名叫goablite

这是我自己取的名字

很简单,go语言实现,类似ab,用的IDE为Lite~~~

1. 设计思路

  1. 输入参数为总的请求数,并发数,以及CPU数,前面几篇说明了总请求数和并发数的区别,放在代码里,总请求数应该是http.get(url)的次数,并发数就是打开的协程(goroutine)的个数了,CPU数直接拿runtine.GOMAXPROP就可以设置了;
  2. 返回每秒的完成的HTTP连接数,那就是计时,然后除成功连接的请求数就行了;

这么看来的话,好像是超级简单哎。。。

想起了当时写SQL的感觉,对于简单的任务来说,是很简单,但是,一旦数据量上去了,就难了。这个也一样,对于最基本,最常规的情况来说,可能很简单,我连加锁,通道都没用。按道理,应该是要用协程和通道配合使用,才能保证代码的鲁棒性。

不管了,学完语言基础,也就剩2天时间,也不想直接拿别人的看懂就行,还是想参考别人的,做个自己的。

2. 源代码

纯代码就不花篇幅帖在这了,放个github传送门吧 xiaozhou的Github

3. 输入参数情况调试

在运行之前,先对一些可能出现的输入用例测试一下。随便想想,就可能包括以下几种吧:

  1. 输入参数数量不对的,一个参数都不输入或者超出参数个数;
  2. 输入的参数格式或者名称不正确;
  3. 只有url,没有其他参数的;
  4. 输入参数不常规,例如并发数比总请求数还大;

4. 运行对比

刚写完的程序,也可以跑的通,但问题是,不知道结果对不对啊,然后就拿ab和google大佬开发的那个工具,来一起对比一下。

就拿CSDN的主页作为测试目标,测试命令为

ab -n 200 -c 20 http://www.csdn.net/index.html
  1. ab的测试结果

在这里插入图片描述

  1. hey的测试结果

在这里插入图片描述

  1. goablite的测试结果

在这里插入图片描述
不要看我只取了三个个例,我是对不同的参数和不同的网址进行了测试以后,得到的这三个代表。

如果只看RPS的话,那么基本情况就是这样,hey的值一般要比ab地很多,goablite的值要比ab高一些。对于ab我是很坚信的,对于hey我ij觉得应该也挺靠谱的,可这样的结果,让我有点为难啊。。。

5. 运行容错调试

在运行方面,应该还有很多需要调试的地方,比如

  1. 内存泄漏,在这个初期demo中还没使用Channel,不然很可能会因为堵塞造成泄漏;
  2. 加锁,和Channel一样,也还没加,如果这个工具还有二期的话,这些我都再加上。

6. 代码优化和重构

这一步还早的很。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值