性能测试基础---事物、检查点、思考时间
·性能测试的脚本增强:
·事务:引入事务的目的是为了度量响应时间和TPS。在Jmeter中,对于事务的处理是分两种情况:·事务只是一个请求:只需要修改请求的名称,使其具有唯一性。不需要其它额外的操作。·事务包含多个请求:则需要使用逻辑控制器--事务控制器。·PS:建议勾选Generate parent sample,这样得到的时间会更加准确。
·检查点:在Jmeter,检查点通常都是通过断言组件来实现的。常用的断言组件就是:响应断言。·响应断言:·模式匹配:需要注意的就是:·包括和SubString的意义相当。服务器的响应中包含指定的预期值。·匹配和Equals的意义相当。服务器端响应等于or符合指定的预期值。
·包括和匹配是支持正则表达式的,而SubString和Equals是不支持正则表达式的。·要测试的模式:就是预期值。·思考时间:在Jmeter中,常用的思考时间组件有两个:·固定定时器:单位是毫秒·高斯随机定时器:作用就是:用来模拟:固定延迟+-2×偏差值。最小值等于0.
PS:一般来说,在性能测试过程中,我们往往建议通过随机思考时间的方式来模拟负载。
·集合点:在Jmeter中,集合点是通过定时器--Synchronizing Timer组件实现。·Number of Users:一次集合的人数。默认值为0,表示集合人数等于线程组中的线程总数。·Timeout:超时时间,是指第一个到达集合点的线程的等待时间,如果时间到达,则所有到达集合点的线程都会释放执行后续的请求。默认值为0,表示不超时,即必须等到足够的线程才会释放。
PS:以上组件的使用,一定要注意组件的作用域问题。
·Jmeter的场景相关的操作:·联机负载和IP欺骗:
·联机负载:Jmeter本身的性能问题,导致很多时候我们都需要采用分布式(联机负载)的方式来进行性能测试。
·前提条件:·控制机和负载机、负载机和被测服务器之间的网络是通畅。·控制机和负载机上具有相同的jmeter环境。
·操作步骤:·第一步:启动负载机上的Jmeter-server.bat。PS:默认情况下,server端采用的通信端口是1099,不被占用即可。如果需要修改该端口,则修改jmeter.properties文件中的server_port属性即可。要求端口未被占用。如果负载机的server_port被修改,则控制机上添加负载机的时候,host:port中的port也要对应修改。(不需要修改控制机上的server_port属性)。
·第二步:在控制机上添加负载机。是通过修改控制机的jmeter.properties文件来实现。属性:remote_hosts。示例:remote_hosts=127.0.0.1#remote_hosts=localhost:1099,localhost:2010remote_hosts=192.168.2.212:8000,192.168.2.100:1099PS:表示新增两台负载机,分别是2.212:8000,2.100:1099多台负载机之间使用逗号分隔。 修改之后,需要重启jmeter。
·第三步:启动。在jmeter中,远程启动有两种方式:·远程启动:选中某一台负载机,运行脚本。·远程全部启动:直接启动所有的负载机运行脚本。
·注意事项:1、从jmeter4.0开始,分布式负载开始支持基于https的模式(默认)。该模式下,需要额外进行操作:·在控制机上运行bin目录下的脚本:create-rmi-keystore.bat则会在bin目录下生成密钥文件:rmi_keystore.jks·将密钥文件rmi_keystore.jks复制到负载机的Jmeter的bin目录即可。
当然,也可以通过修改控制机与负载机的配置文件jmeter.properties,设置不使用https模式,而是采用http模式。#server.rmi.ssl.disable=false默认值是false,表示使用ssl模式。如果不希望使用,则修改为:server.rmi.ssl.disable=truePS:控制机和负载机都修改。
2、联机负载时,脚本的运行环境是负载机。这就意味着我们在做联机负载时,要尽可能的保证负载机和控制机的环境的一致性。常见的有:·系统环境变量·基础环境,比如说jmeter版本和JDK版本。·第三方文件(参数文件),需要人为的复制分发到负载机。脚本中的访问路径:·如果控制机和负载机的操作系统类型一致,则建议使用绝对路径。·如果控制机和负载机的操作系统类型不一致,则只能使用相对路径。·在本地(控制机上),当前路径是脚本所在路径。·在远程(负载机上),当前路径是Jmeter的bin目录所在路径。
3、远程全部启动时,如果负载机的数量大于等于两台。脚本是分别、独立、同步在不同的负载机上运行的。这就意味着,对于服务器而言,承受的压力是:线程组设计的压力×负载机的数量。
4、如果需要获取错误响应,则需要修改模式为:standard。默认情况下,负载机是只会将一些特定的数据反馈给控制机的,通常不会包含服务器的响应。则需要修改以下配置(包括控制机和负载机)。jmeter.save.saveservice.output_format=xmljmeter.save.saveservice.response_data.on_error=true
#Remote batching supportmode=Standard
·IP欺骗:Jmeter的http请求也是可以实现IP欺骗的。具体操作:·在负载机上,绑定IP地址。·在脚本中,http请求的实现模式要切换到httpclient模式。·Source IP Address中,填写绑定好的IP地址即可。PS:一般都是把绑定好的IP地址,写入参数文件,实现参数化。
·注意事项:参考LR讲课。
·监控:·监听器:·Summary report和聚合报告:在实际的测试过程中,我们一般是不会使用查看结果树组件,通常使用的是Summary report和聚合报告。·Summary report和聚合报告的指标解释:·Label:请求名称。·# Samples:请求所执行的次数。·Average:请求的平均响应时间·Min:请求的最小响应时间·Max:请求的最大响应时间·Std.Dev.:标准方差。PS:以上时间的单位都是毫秒。·error%:出错请求的比例。·Throughput:吞吐量,就是相当于LR中的TPS。PS:如果该值很小,会自动变更单位为/min(每分钟).
·Received KB/sec:每秒钟接收到的字节大小。·Sent KB/sec:每秒钟发送的字节大小。·Avg.Bytes:平均每个请求所产生的字节大小。
·聚合报告对比与Summary Report:·Median:中位值,又叫50% line,即50%的用户的响应时间小于等于该值。·90%line(95、99):是指90%的用户(请求)的响应时间是小于等于该值。PS:比例是可以通过jmeter.properties配置文件进行修改的。配置文件关键字:#aggregate_rpt_pct1=90#aggregate_rpt_pct2=95#aggregate_rpt_pct3=99PS:#表示注释,表示不起效(默认值).