近来有需求要对HTTP接口进行压测,于是去了解了一下JMeter,发现虽然功能强大,但本身依赖JAVA,并且依赖图形化界面,不够轻量化,所以想着自己写一个基于命令行的轻量级压测工具,于是就有了httptester。

httptester是采用GO语言来编写的,尽管目前仍是早期版本,但是基本功能已经没有问题了。

快速开始

httptester是一个二进制可执行文件,无需安装。

下载最新版本:https://github.com/rocketk/httptester/releases

国内镜像地址:https://gitee.com/rocketk/httptester

找到自己平台对应的版本下载至本地,将其所在目录放入系统环境变量中。

常用命令

获取帮助信息

最简单的压测命令(以压测百度首页为例)

设定并发量、循环次数、超时时间

结果

字段含义
total count总共的http请求数量,等于loop*concurrency
success count总共成功的http请求数量
failed count失败的请求数量,不同于 error count ,只有被【断言】校验不通过的才算失败
error count错误数量,一般是超时或http接口不可用
nature duration自然耗时(区别于下面的总体耗时)
total cost总体耗时,每个请求的耗时加总起来的总耗时,在并发情况下会大于自然耗时
max最大单次请求耗时
min最小单次请求耗时
median单次请求耗时中位数
mean平均每次请求耗时
standard deviation每次请求耗时标准差
throughput吞吐量,数值等于 success_count / nature_duration

httptester-demo-pic

启动示例服务

为了更好地测试各种Assertion表达式,你可以通过以下命令启动一个Restful风格的API服务:

此示例服务是一个典型的Restful风格的API服务,包含以下操作(以curl命令为例):

列出全部用户

增加一个新用户

更新一个已有用户

注意将{id}改为实际的用户id

删除一个已有用户

Assertion

在默认情况下,httptester并不会做断言检测,也就是说只要http请求得到了响应,不论其返回的响应是什么,不论响应码是什么,都会按照成功来计算。但很多情况下,你需要判断其结果是否正确。

当前版本的httptester支持3种断言,即 响应码断言 / JSON断言 / 正则表达式断言

以上一节Restful-API服务接口中的“列出所有用户”为例,curl格式如下:

返回结果:

接下来我们来看在httptester中如何来写断言。

响应码断言

使用--assert-status-codes来设定响应码断言,下面的例子表示,只有当http响应码为200201时才算请求成功

JSON断言

此次我们使用“新增一个用户”为例,它的返回值如下:

假设我们认为返回值中的name值要等于NewUser,那么我可以使用--assert-json-expression来达到这一目的。注意双等号两侧的空格是必须的。

更为复杂的例子

添加header 设定method 添加body 添加timeout

-e表示如果出现失败或报错,将错误信息打印出来

 


如果对这个小工具感兴趣,欢迎给我点赞。 如果有任何问题或建议,也欢迎给在此项目中给我提issue或者pull request。