前言
之前公司产品做API并发测试,提出需求也不高,测试到1000的并发就可以。公司是使用jenkins平台做自动化集成、部署,我写了个并发测试脚本,再然软件集成部署完毕后,用shell脚本做并发测试,最后基本满足需求,毕竟是脚本语言不能奢求太多。
shell脚本一般是串行运行的,需要一条条按顺序执行命令,这对我们显然是不能满足测试API的要求,使用 【&】后台符 ,并发的数量不可控,用ps查进程计算数量有点浪费资源。
linux下mkfifo命令创建管道文件
管道文件可以工作在阻塞模式下,当读写都打开时才有返回,否则一直会阻塞。可以利用管道文件的这个特性,来控制并发的数量。脚本我做了简化,用get方法来测试,需要的可以自行修改,下面看一下脚本。
脚本内容解释
如图:
Total=500 #需要测试的总数
Proc=100 #并发数
URL=’http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp’
#这个是淘宝的时间API接口,我测试的时候100的并发,没把我的请求当爬虫,淘宝还是很给力的。
#mkfifo命令创建管道文件
#exec 7<>$fifo创建文件描述符【7】,可以从文件描述符【7】接受发送字符串,删除管道文件
api函数定义了curl命令模拟http请求,第一个for开启${Proc}个并发,当api函数执行完毕后会,会向文件描述符【7】发送字符串,后面就有意思了。
这里我们执行第二个for,定义n执行到总测试数跳出,在for语句的第一个命令是【read line】阻塞接收文件描述符【<&7】发来的字符串,当接到信息后才会往下继续执行,到这里大概就能看明白管道文件是怎么工作的吧。
在上面的api函数中每执行完一次curl调用,就会向文件描述符发送字符串,当【read line】接收到字符串时就会再次执行api函数,这样就时刻保持【Proc=100】次的并发了。直到【Total=500】次执行完毕
最后执行wait命令等待程序运行完毕后,结束父进程并关闭文件描述符
执行结果
最后我们看一下执行的结果,从最后10行的输出可以看出进程ID不是连续的,获取的linux格式时间也是不连贯不规律的,说明我的脚本是并行在处理。脚本获取API总数500次,并发100用时5s+。
这个结果是我在阿里云主机上测试的,配置有点差,不能占用公司资源,我这台云服务器跑到100并发cpu就满载了,有兴趣的朋友可以用高配的服务器测试。
如果你认同我的文章,留下赞再走,十分感谢。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!