服务器压力测试工具0——需求与设计

简介

目前网上有各种服务器的压力测试工具,大多针对于支持http协议的web服务器。现在需要实现一个压力测试工具,能够实现对各种连接协议的服务器进行测试,包括但不限于http,tcp,websocket协议。

功能需求

1.能够实时获取服务器对客户端请求的最大最小以及平均响应时间,百分之九十响应时间,超时任务数,请求错误数,错误率和实时的QPS,并同步监控服务器的性能信息。
2.可以实现对不同类型连接协议进行测试,包括但不限于HTTP,TCP,WEBSOCKET连接。
3.实现对不同的业务场景进行单一测试以及组合测试。
4.因为可能存在一台压力机性能问题,所以需要实现可控制多台压力机同时对服务器进行测试,同时开启,同时停止。并且控制端能够获取当前所有压力机的运行情况与测试数据。
5.能够控制服务器在指定的QPS运行,也能够测试服务器的极限QPS。
6.获取的数据存储到数据库。
7.能够以图表的形式实时展示数据。

设计

压力端设计

工具压力端主要分为两个模块,控制器RobotCtr,压力生成器RobotSrv,以及业务模块biz。
控制器通过发送http请求控制压力机器人的start,stop和status。压力机器人则开http端口进行监听执行相应动作,可以持续向被测服务器产生大量请求进行压测,并实现对压力的控制和对数据的采集上报。最终数据上传至数据库。
在这里插入图片描述

数据收集展示端设计

在被测的服务器上部署相应的性能采集工具,实时的收集服务器的各类性能信息,并上传至数据库。
数据展示则提供一个数据展示的web服务器,能够实时的从服务器中拉取当前的测试数据,以及服务器性能情况等数据。
在这里插入图片描述

最终结果展示

部分效果最终如下图所示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

脚本使用简介: /******************************************************************************** void tcc_tell_user(long len,const char *fmt,...) void tcc_init_stochastic() int tcc_produce_stochastic(int a,int b) tcc_sscanf tcc_sprintf tcc_strcpy tcc_strcmp tcc_strstr tcc_strcat tcc_memcpy tcc_memcmp tcc_memset tcc_strlen tcc_malloc tcc_free *********************************************************************************/ void get_hex_string(unsigned char *in_dat,int in_len,char *ou_hex) { int i; char *t=(char*)tcc_malloc(8); ou_hex[0]=0; for(i=0;i<in_len;i++) { if(i%0x04==0 && i!=0) tcc_strcat(ou_hex," "); if(i%0x10==0 && i!=0) tcc_strcat(ou_hex,"\n"); tcc_sprintf(t,"X ",in_dat[i]); tcc_strcat(ou_hex,t); } tcc_free(t); } void msg_init() { // tcc_init_stochastic(); } void *msg_short_connect_form_data(long t,long s,long c,long *len) { char *data=(char*)tcc_malloc(128); *len=128; *(long*)(data+0x00)=128; *(long*)(data+0x04)=1; *(long*)(data+0x08)=0; *(long*)(data+0x0C)=0; int n=tcc_produce_stochastic(100,50000); tcc_sprintf(data+0x10,"hello%d",n); tcc_strcpy(data+0x20,"123456"); return data; } int msg_short_connect_recv_data(long s,long c,void *dat,long len) { unsigned char *ou_dat=(unsigned char*)tcc_malloc(5120); get_hex_string(dat,len,ou_dat); tcc_tell_user(5120,"s:%d c:%d len:%d\n%s\n\n",s,c,len,ou_dat); tcc_free(ou_dat); return 1; } void *msg_long_connect_form_data(long op,long s,long c,long *len) { char *data=(char*)tcc_malloc(128); *len=128; *(long*)(data+0x00)=128; *(long*)(data+0x04)=1; *(long*)(data+0x08)=0; *(long*)(data+0x0C)=0; int n=tcc_produce_stochastic(100,50000); tcc_sprintf(data+0x10,"hello%d",n); tcc_strcpy(data+0x20,"123456"); return data; } int msg_long_connect_recv_data(long s,long c,void *dat,long len) { unsigned char *ou_dat=(unsigned char*)tcc_malloc(5120); get_hex_string(dat,len,ou_dat); tcc_tell_user(5120,"s:%d c:%d len:%d\n%s\n\n",s,c,len,ou_dat); tcc_free(ou_dat); return 1; } void msg_free_data(void *arg) { tcc_free(arg); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值