API 并发测试

2016-07-31  籽藤 

说起压力测试、性能测试工具,名气比较大的当属 LoadRunner 和 JMeter。但是他们对于某些场景下的 API 并发测试而言,都太重了。我这里强调的并发测试,是侧重功能性的校验,而不是收集服务器,数据库这些后台的性能指标。什么叫“功能性的校验”呢?比如说,我们要针对一笔订单接口并发退款,或者用同一个订单号并发创建订单,目的是为了保证后台逻辑无误。

对于这类 API 并发的功能测试,我之前一直是自己写脚本建线程去实现。后来发现项目中大量的接口都需要做这种测试,而且也有不少现成工具可以用,就懒得写了。

  • Apache Bench

熟悉 Linux 和 Mac 的人都知道 ab ,因为系统里自带了这个利器。用一行命令就可以做并发测试。

ab -n 100 -c 10 -l http://www.your_site.com

-n number 总的请求数

-c concurrency 并发数 

-l 表示当某个请求的回复长度不与第一个请求的回复长度一致时,不把它作为失败的请求

ab 使用很方便,可是问题在于,当我们需要在一个test中对多个 URL 进行并发请求的时候,ab没法做到。这时,我们可以用 siege。

  • siege

siege 安装方式有两种,可以用 homebrew:

brew install siege

还可以直接下载压缩包

curl -C - -O http://download.joedog.org/siege/siege-latest.tar.gz

tar -xvf siege-latest.tar.gz

cd siege-4.0.2

./configure
make
make install

常见参数

-t time 测试时间,比如 60s 或 5M

-c concurrency 并发数

-r repetitions 重复做几轮

-f text file 从外部文件读取参数值

-d delay 延迟时间默认是1秒; 如果设置为 -d 5 表示是在1-5秒之间的随机延迟时间

多个请求

在 siege-urls.txt 文件中定义两个不同的并发请求 Get 和 Post。order.json 中是 json格式的消息体。

https://api.appletest.com/v1/apps/app_f1KG/orders/12345

https://api.appletest.com/v1/apps/app_f1KG/orders/12345 POST <./order.json

执行命令

siege  --header="Authorization:Bearer your_username" -f siege-urls.txt

单个请求自然更简单:

POST:

siege -t3s -c20 -d5 --header="Authorization:Bearer your_username" 'https://api.appletest.com/v1/apps/app_f1KG/orders/12345 POST <./order.json'

GET:

siege -t60s -c20 -d10 --header="Authorization:Bearer your_username" https://api.appletest.com/v1/apps/app_f1KG/orders/12345

最后再多说几句,如果要实现 URL 之间的交互,比如维护不同并发用户的 Cookies,那还是用 JMeter吧。GUI界面丑归丑,好歹是个老牌工具,又可以录制,又有详细报告,没什么代码背景的测试人员也可以学起来。

1604°/16032 人阅读/1 条评论 发表评论

登录 后发表评论