网站性能测试之负载测试
在进行性能测试之前首先需要明确,该网站架构是B/S;
影响性能因素:客户端网页加载时间;数据传输(网络传输)时间;系统业务数据处理时间
实际上数据传输的时间我们是没有办法控制的。客户端网页加载的时间也是依据客户当时的网速决定的,我们可以测试的是在某一个固定网速下客户端网页加载时间,和优化代码,尽量减小系统业务数据处理时间。
接下来明确整个网站的架构是前端和后端分离的,在执行某一个controller的接口时,返回的内容可以仅仅是json,而不需要渲染整个页面,在测试业务数据的返回接口时顺便还可以进行功能测试:
在清楚这些概念之后,将性能的测试指标进行了简单概括,如下图
测试指标:交易响应时间。
测试工具:Jmeter+BadBoy
多用户并发登录
首页包含的图片,js,css资源,以及访问的接口比较多,并且在登录成功之后还需要对首页进行刷新,所以这里对首页的并发登录进行测试:
首先是在数据库里利用函数创建了1000个用户:
之后为了模仿用户同时并发登录(实际上不是真正的并发,有进程的快速切换):设置了定时器,等待所有的用户都来之后一起执行/user/login请求:
设置连接时间2000ms,响应时间4000ms:(时间过长用户对于网站的满意度和期待度会下降)
用户数:600时
用户数500
用户数:350
故当用户并发在350-400之间时,几乎每一个请求都可以返回。
这里99%line的用户都在2s左右达到了要求,继续增加用户,error会升高,这里将数据响应时间设置成了4s,所有超过响应时间的会显示错误。
关键Part测试
对于该网站来说:实际上用户真正的需求是查询新发布的岗位,这里/getoffers以及查询时/getoffers?search=’’&city=’’这几个接口是经常访问到的:
这里首先去有关校招的网站上爬取了8000多条数据,然后加上琪琳添加上的数据,来进行了/getoffers这个接口的数据返回情况的测试:
这里使用的是局部刷新,返回第一页页数据和返回其他页数据的过程都是差不太多的。
这里测试了返回第一页的数据:
经过分析,主要想得到的是用户一起去访问getoffers接口,但是在这里可以看到这里的四个请求并不是同时的,所以这里设置了定时器,只有全部登录之后,等到集合满之后一起点击getoffers,获取结果为:
设置同一组url都来了之后一起进行请求;设置每一个url的超时时间:
连接超时时间:3000ms,响应返回数据:4000ms
在还未运行的时候,数据不是很充分,所以这里以job为例,这里爬取了job信息:8214条信息来进行测试:岗位的显示:
当线程:500时,先一起登录,利用定时器,等都来了之后一起点击alljob
这里可以看到alljob的请求,错误率还是挺高的, 故减少线程
当线程:400时
错误率为0%,此时系统对所有的请求做了正确的响应。
当线程:450时
错误率为0%,此时系统对所有的请求做了正确的响应。
但是当线程 475时,就会出现错误了
所以在数据量8000左右时,用户450以内的请求基本都可以得到正确的响应,当数据量继续增加时,可以同时以4s响应时间响应的并发用户数应该会少一些了。
按照上述的方法继续对话题的获取页进行测试:
用户数:1200时:
这里没有导出数据,访问所有话题的可能是话题量少,所以用户并发可以多一些,之后可以多添加一些话题再继续进行测试。这里就没有对其他的页面进行测试了,访问量也没有这几个页面大
总结
主要就是分析网站,找出可能瓶颈的接口,对其进行多用户的负载测试,在之后的代码的推荐算法和数据库的设计中看看怎样还可以优化一下。
对于jmeter的使用还得加强一下