在工作中开发完需求,经常要做一些功能、性能的测试。
功能测试用python、shell之类的脚本,勉强可以胜任。性能压力测试再手动写脚本,就有点力不从心了。
给大家推荐一些常用的工具和其中部分工具的体验报告:
Apache Bench
JMeter
Locust python
loadrunner https://softwaresupport.softwaregrp.com/doc/KM02004789?fileName=LR_12.50_Tutorial_zh.pdf
webbench
Gatling
1、最新版本的Locust不支持python 2了,最后支持python 2 的版本是 0.13.5,下载地址https://github.com/locustio/locust/releases?after=0.14.2
2、编译 python setup.py build
安装会报缺少依赖,因为机器没有外网,需要去https://pypi.org/手动下载依赖
我采用的方法是通过 ~/.pip/pip.conf 配置一个公司的镜像源,配置方法
[global] index-url = 公司镜像源地址
3、安装 python setup.py install
安装完成后执行,locust --help 如果没有报错,则安装成功
locust -f besttest.py --host=http://127.0.0.1 -P 8080 --loglevel ERR
besttest.py 可以自行上网搜索教程,简单例子:
from locust import HttpLocust, TaskSet, task
class BestTest(TaskSet):
@task
def index(self):
self.client.get('/')
class BestTestIndexUser(HttpLocust):
task_set = BestTest
min_wait = 0
max_wait = 0
def wait_time(self):
return 0.001
1、有图形界面展示压测过程的数据(qps、时延)变化
2、有集群模式,可以把多台机器上的locust组成一个集群,来提高压测qps
1、性能比ab、wrk等差不少
python单进程只跑在一个核,单实例最多压到 700左右,单核CPU 100%。
2、大压力下,耗时统计不准
locust 跑在单独一台机器上,压的是另一台机器上的nginx的静态页面,nginx几乎没耗啥cpu。从nginx的日志看,耗时都为0,但是从locust的结果看,平均耗时却有10ms。
apache自带的工具,安装比较简单,安装步骤略。
ab -n 10000000 -c 100 http://host:port/
ab -n 1000000 -c 100 -k http://host:port/
是单进程单线程的方式运行,-k 参数复用长连接,显著提高性能。
ap测试性能很高,没有locust的只跑在单核的问题。
测试用的8核的cvm,压nginx的静态页面。
1、不加-k参数,短连接,能跑到 2w+ qps。ab进程CPU占用在80%。分摊到多个核,每个核才 10%。
2、加-k参数,长连接,能跑到 8w+ qps。ab进程CPU占用仍然只有80%
1、无图形界面,不像locus那样能实时展示qps和时延变化曲线。只有一个最终的简单分析报告。
2、无法实现复杂业务逻辑,只适合静态页面。
直接去官网 https://jmeter.apache.org/download_jmeter.cgi
下载最新版本,无需安装即可直接使用。java实现,windows和linux是同一个包。
1、新建线程组,可以配置测试并发线程数等
2、增加模版,可以配置通一些用的请求参数,测试地址和代理等
3、增加用户参数,可以配置测试集公用的参数
4、增加实际请求组件,每个组件为一个测试case
4.1 可以通过JSR223预处理程序,设置每个请求的参数,包括计算签名、设置用户变量等业务相关的逻辑。
4.2 可以自定义http头、http cookie等信息。
5、增加各种监听器来查看测试case集的执行结果。jmeter提供了很多查看结果的方式,包括图形、表格、详细信息等,具体可以查看官方文档: https://jmeter.apache.org/usermanual/component_reference.html#listeners
6、在windows下构建好测试case后,在linux下用命令行启动测试case:
./bin/jmeter.sh -n -t ./ci_asr_test_mikenwang.jmx -l test.result -e -o test.folder
1、可以通过java/beanshell、javascript、groovy等脚本语言、以及jmeter本身的逻辑器控制编写复杂的测试case
2、有集群方式
对于简单测试比较重,上手略复杂
1、无复杂业务逻辑、且对qps要求较高的建议用ab、wrk
2、qps在几百以内、且有复杂业务逻辑(用python编程实现)的测试,建议用locust
3、qps要求较高、且有复杂业务逻辑(用java、js、groovy等支持JSR223标准的开发语言)、且需要比较详尽的测试报表的,建议用jmeter
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。