###
再次系统的整理一下深入一下性能测试
###
一,线程组
1,jmeter的线程组是性能测试的资源调度池
2,有三种线程组
setup thread 做一些初始化操作,比如登陆,
thread 具体的业务
teardown thread 做一些结束之后的操作, 比如退出等,
3,可以控制并发数,执行策略
###
二,简单使用
####
1 先使用python启动一个web服务
使用flask
import flask app = flask.Flask(__name__) @app.route("/") def hello(): return "hello world " if __name__ == '__main__': app.run()
###
2, 添加脚本
3,设置并发比如5个
###
4,运行,查看结果
###
二,线程组的一些参数
1,取样器出现错误之后的操作
有几个,可以根据需要选择
2,线程数
这就是模拟的用户数
线程组,单台机器不要设置太大,你设置太大了,没有用,可能内存都溢出了,并不能有效模拟用户发起请求,
比如你设置1万个线程,没有用,
具体一个机器能支持多少并发,需要测试一下,
只要你设置了一个数量,而且还能正常发起请求,那就行,
3,ramp-up time
参数 ramp-up period 用于告知JMeter 要在多长时间内建立全部的线程。
JMeter 将立即建立所有线程,假设ramp-up period 设置成T 秒, 全部线程数设置成N个, JMeter 将每隔T/N秒建立一个线程。
所以线程组合ramp-up time是有一个关系的,就是,线程数量/ramp-up time 就 等于1秒内,请求多少次,
比如线程组500,ramp-up5,然后你运行,就会一秒100次请求
1.1 深刻理解ramp-up time
线程组的大部分参数是不言自明的,只有ramp-up period有些难以理解, 因为如何设置适当的值并不轻易。
首先,假如要使用大量线程的话,ramp-up period 一般不要设置成零。
因为假如设置成零,Jmeter将会在测试的开始就建立全部线程并立即发送访问请求, 这样一来就很轻易使服务器饱和,更重要的是会隐性地增加了负载,这就意味着服务器将可能过载,不是因为平均访问率高而是因为所有线程的第一次并发访问而引起的不正常的初始访问峰值,可以通过Jmeter的聚合报告监听器看到这种现象。
这种异常不是我们需要的,因此,确定一个合理的ramp-up period 的规则就是让初始点击率接近平均点击率。当然,也许需要运行一些测试来确定合理访问量。
基于同样的原因,过大的ramp-up period 也是不恰当的,因为将会降低访问峰值的负载,换句话说,在一些线程还未启动时,初期启动的部分线程可能已经结束了。
1.2 那么,如何检验ramp-up period 太小了或者太大了呢?
首先,推测一下平均点击率并用总线程除点击率来计算初始的ramp-up period。 例如,假设线程数为100, 估计的点击率为每秒10次, 那么估计的理想ramp-up period 就是 100/10 = 10 秒。
那么,应怎样来提出一个合理的估算点击率呢?没有什么好办法,必须通过运行一次测试脚本来获得。
另外这个每秒点击多少次,如果已经上线了,比较准确的做法应该是监控现网的环境,得到一个基准值,这就是一个真实的平均点击率了,这是一个压测的依据,
其次, 在测试计划(test plan)中增加一个聚合报告监听器,其中包含了所有独立的访问请求(一个samplers)的平均点击率。
第一次取样的点击率(如http请求)与ramp-up period 和线程数量密切相关。通过调整ramp-up period 可以使首次取样的奠基率接近平均取样的点击率。
第三, 查验一下Jmeter日志(文件位置:JMeter_Home_Directory/bin) 的最后一个线程开始时第一个线程是否真正结束了,二者的时间差是否正常。
总之,是否能确定一个适当的ramp-up time 取决于以下两条规则:
第一个取样器的点击率(hit rate)是否接近其他取样器的平均值,从而能否避免ramp-up period 过小。
在最后一个线程启动时,第一个线程是否在真正结束了,最好二者的时间要尽可能的长,以避免ramp-up period过大。
有时,这两条规则的结论会互相冲突。 这就意味着无法找到同时满足两条规则的合适的ramp-up period。
糟糕的测试计划通常会导致这些问题,这是因为在这样的测试计划里,取样器将不能充分地采集数据,可能因为测试计划执行时间太短并且线程会很快的运行结束。
#####
4,循环
上面的线程500个,ramp-up 5秒,永远执行,
那么一秒就是100个请求,会永远执行下去,
5,调度器,
如果不要一直执行下去,可以设置一下执行时间,单位秒,比如360秒,就是运行5分钟,就停止了,
####
####