Apache Benchmark修改,支持发送不同数据包

本文介绍了一种修改Apache Benchmark的方法,使其支持每次发送不同的POST数据,以适应接口性能测试的需求。通过分析AB的源码,了解其工作原理,并针对-p参数进行改造,实现了-m参数来指定多重POST请求。改造主要涉及3个方面:增加全局变量存储多个Http包,设计状态机解析特定格式的文件,以及利用已有的全局变量作为下标发送不同的buffer。修改后的代码已上传至GitHub。
摘要由CSDN通过智能技术生成

    起因是,工作中一些接口需要性能测试,首先考录本地代码的测试工具,因为测试工具本身的性能开销很小,更加合适,然后AB(Apache Benchmark)简单便捷,但是,AB的-p参数只支持读取一个post数据文件,然后重复发送一样的内容,在我的接口处理同样数据时,只有第一次是真正的新增,而后只是快速返回之前的数据,所以这并不能体现新增接口的性能。

    为了寻求使用AB实现每次发送不同的POST数据,翻了下源代码。

    AB的实现很简单,根据不同参数拿到不同的值,直接存到一堆全局变量里面。test函数负责读取一些全局变量,创建socket连接,使用非阻塞的socket,同时创建C个连接,通过-c参数指定的并发数就是这里的连接数,这里并不是多线程去请求,因为是非阻塞,所以直接循环connect即可实现并发。然后用异步的epoll方式取处理封装好的Http请求header及body。发送的次数N由参数-n指定。请求完成之后output_html_results函数或output_results函数计算请求时间之类的结果并输出。

    下面来分析下-p参数,-p指定一个文件,这个文件存有Http请求的body。open_postfile函数读取文件内容。apr_file_open,apr_file_info_get,apr_file_read_full是APR库里面封装的文件操作系列函数。AB中用apr_file_read_full读取整个文件内容并存储在全局变量postdata(buffer containing data from postfile)中,然后发送的时候将其拼装到Http的Body通过Socket发送给url。

    根据以上-p的原理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值