序言
首先聊一下对于我来说压力测试的目的:
压力测试和性能测试不一样,它是指测试系统的内存、CPU、磁盘网络IO在接近超负荷运行时所能承受最大并发量。
当然如果是不追求高并发的情况下,在现在计算机硬件性能大幅度提高的当下,没有什么问题是加一台服务器不能解决的,如果有那就加两台ヽ( ̄▽ ̄)ノ,所以在测试环境做压测是为了发现程序是否有严重的性能问题(比如SQL语句性能很有问题)导致在正常并发下使正常性能的系统出现内存、CPU不足甚至服务器挂掉等问题
反过来说,我做压测的目的是为了验证程序能否承受正常的并发,所以看中的指标有:
1.TPS(吞吐量)
2.响应时间超时的数量/请求次数
3.承受正常的请求数并发时,CPU和内存的占用*
ab命令
- 安装Apache,添加 ab命令的环境变量path
- 命令行使用ab:
ab -c <并发量> -n <总请求数> <url>
需要session的网页可以添加:-H "Cookie: cookie1_name=cookie1_value; cookie2_name=cookie2_value"
jenkins使用
下载war格式的包,使用java命令运行,每次启动都用该命令
java -jar jenkins.war
运行完成后,复制控制台输出的口令,打开http://localhost:8080/ ,输入口令,创建用户完成安装
jenkins配置环境变量:
1、系统设置中可设置全局变量
2、使用Envject插件 设置 job的局部变量: Properties Content 或Properties File Path(读取配置文件)
这里有个坑:在windows中设置path=c:\xx\ ,使用双反斜杠
3、引用环境变量:
系统命令行使用% %, shell 用$ ; python 用os.getenv("环境变量名")
ab+jenkins实践
这里的实践测试的URL是我在自己的VPS(单核CPU和1.5G内存)上部署的网站,方便随时查看系统,同时因为很多地方没优化,能承受的并发很小,所以看出性能问题来。
50的并发,每个网页总共请求300次:
网页1:http://www.valkyrie233.com/
网页2:http://www.valkyrie233.com/article
1.环境变量配置:
con=50
req=300
urls=http://www.valkyrie233.com/,http://www.valkyrie233.com/article
cookie=
2.构建执行的shell:
#!python.exe
import os
urls=str(os.getenv('urls')).split(',')
cookie=os.getenv('cookie')
for url in urls:
shell='ab -c %con% -n %req% '+url
if cookie!=None:
shell+='-H '+str(cookie)
os.system(shell)
3.执行构建
报告分析
1.jenkins打印输出:
2.观察系统性能监控,使用htop命令
3、分析问题:
网页1在CPU超负荷但内存还有空余的情况下,TPS过低,请求响应时间过高(超过5S很影响用户体验)
网页2在CPU有空余且内存还有空余的情况下,请求响应时间超级高,TPS也超级低,但网络带宽又有剩余的。
结论:网页1需要优化,网页2性能有严重问题