一.DDT数据驱动
基础配置:线程组--添加--配置元件--CSV Data Setting
文件名称中文件的格式:可以使用txt方式也可以使用csv的方式,但是尽量使用txt的方式
主要是因为编码的不一致,csv文件的编码不是utf-8,txt的文件编码是utf-8,如果使用csv文件配置写的是utf-8就会导致csv文件变慢。
文件的路径:默认使用的是绝对路径,是csv/txt文件所在的位置,也可以配置相对路径,可以是jmeter的bin路径下,也可以是jmeter的所在的脚本位置,所以文本保存在这两个路径下可以直接写文件名;或者使用./文件名的写法,这种写法可以跨平台。
使用csv进行测试的时候坚决不用csxread函数。
是否使用引号:必须是一对英文的引号。
遇到文件结束符再次循环:当设置成true,如果循环次数大于文件里面的数据,此时循环次数=文件中里面的数据的个数,当设置成false,如果循环次数大于文件里的数据,此时文件中数据读取完成以后,会重新从文件中开头就行读取,直到达到循环次数。
遇到文件结束符停止线程:当设置成true,如果线程数大于文件里面的数据,此时线程数=文件中里面的个数,达到以后就会将线程给停掉,当设置成false,如果线程数大于文件中的数据,此时文件中数据读取完成以后,会重新从文件中开头进行读取,直到满足到最大线程数。
二.逻辑控制器
循环控制器
路径:线程组--添加逻辑控制器--循环控制器
定义:在此循环控制器下的请求设置了循环多次就会调用多次
for each控制器
路径:线程组--添加逻辑控制器--foreach控制器
定义:可以对里面的参数进行不同数据调用进行循环,类似V函数的拼接,常用于变量名称中带有_变量的引用
if条件控制器
路径:线程组--添加逻辑控制器--if条件控制器
定义:默认情况下,条件框中要使用_jexl3或者_groovy这个函数,函数的结果为true或者false,决定了此循环控制器下面的取样器是否执行,这个表达式的编写可以使用函数助手进行编写
备注:如果不勾选interpret condition as variable express 这个选项就是把条件框中的表达式当成js脚本进行执行,根据执行结果的真假进行判断是否执行条件控制器下面的请求
事务控制器
路径:线程组--添加逻辑控制器--事务控制器
定义:默认情况下,一个取样器就是一个事务,如果要控制多个取样器在一个事务中,必须要勾选Generate parent sample----这样才能把多个请求控制在一个事务中。
常见问题:性能测试中需要勾选Generate parent sample选项么??
1. 性能测试中先做单接口的性能测试,再做多接口的性能测试
2. 多接口的性能测试需要勾选进行合并
3. 性能测试中,需要测试出单个接口的性能测试指标,然后多个接口的性能测试指标,然后勾选此选项合并得到业务场景的性能指标
临界控制器
路径:线程组--添加逻辑控制器--临界控制器
定义:主要用来严格控制请求顺序,锁名称默认是global_lock,是一个固定的锁,将性能测试的并发执行变成串行。将固定锁变成动态锁,获取多把锁使用${__threadNum}函数将锁名称命名为这个。
仅一次控制器:
路径:线程组--添加逻辑控制器--仅一次
定义:一个线程用户只会执行一次,并发用户数假设设置10个,不管循环次数设置多少次,其下挂载的取样器只会运行十次;并发用户数假设设置10个,不管运行时间设置多久,其下挂载的取样器只会运行十次。
三.聚合报告
在性能测试中经常会添加聚合报告去查看对应的性能指标,但是看聚合报告中对应的结果数据也是有条件的:
1.没有网络瓶颈:因为看聚合报告的时候会将吞吐量看成是tps,但是吞吐量跟tps只有在网络没有瓶颈的时候才相同(吞吐量:衡量网络的能力指标,tps是从一个事务发出到网络最后回来是一个事务的响应时间,在网络没有瓶颈的时候,吞吐量是等于tps的)
怎么判断没有网络瓶颈呢??
聚合报告的最后两列,接收/发送是吞吐率,假设网络的1MB那最大的带宽就是1MB=1*1024kb=1024/8KB=128KB/s ;最大通过的是128kB/s,吞吐率小于这个就是没有网络瓶颈。
2.并发用户数不变:在整个测试过程中国并发用户数不变才有参考的价值,如果是在做负载测试,这个时候并发用户数是在不断的变化的,这个时候聚合报告里面的吞吐量就没有参考价值
3.聚合报告中有参考的响应时间是90%的响应时间