1. 如果现在有10000条数据保存在外部csv文件,每个线程读一条数据,而jmeter的线程数不可能开10000条,此时可以线程数500,设置循环次数为无限(或20次),CSV data set config设置 Recycle ON END = false, stop thread on EOF=true即可。意思就是当读到文件最后一条时停止线程,不重复利用。
2. 仅一次控制器,比如50个线程组,循环2次,如果某个请求设置了仅一次控制器,则该请求执行50次,不会执行循环。
3. 如果一次测试计划有两个线程组,第一个线程组进直播,第二个线程退出直播,测试数据如下:
- 线程时间都10秒,线程二增加一个固定定时器,在所有用户进完直播60秒后退出直播,循环次数都是1。会得到结果:线程1 10秒内执行完线程,接着暂时60秒,开始执行线程2
- 线程时间都是10秒,线程1 循环3次,线程2保持不变。结果:线程1开始时间10分10秒,第一次循环结束时间10分20秒,第二次循环10分22秒,第三次10分24秒,总耗时14秒。线程2开始时间10分20秒+等待60 = 11分10秒开始,11分20秒结束。
- 结论第二次以后的循环不用再次启动线程,利用之前生成好的线程,执行时间不用10秒。线程二是在线程1第一次循环结束后就开始的执行的,所以在结果查看树中会有部分开始时间的重叠。
4.用命令行启动Jmeter
- -h 帮助 -> 打印出有用的信息并退出
- -n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter
- -t 测试文件 -> 要运行的 JMeter 测试脚本文件
- -l 日志文件 -> 记录结果的文件
- -r 远程执行 -> 启动远程服务
- -H 代理主机 -> 设置 JMeter 使用的代理主机
- -P 代理端口 -> 设置 JMeter 使用的代理主机的端口号
- 参数传递
-D[prop_name]=[value] - defines a java system property value. -J[prop name]=[value] - defines a local JMeter property. -G[prop name]=[value] - defines a JMeter property to be sent to all remote servers.
启动本地测试D:\apache-jmeter-2.13\bin\jmeter -n -t D:\guestenter.jmx -Jthreadnum=5 -Jloop=2 -l D:\result.jtl 在用例中即可使用${__P(threadnum)}来设置线程数
启动远程测试D:\apache-jmeter-2.13\bin\jmeter -n -t D:\guestenter.jmx -Gthreadnum=5 -Gloop=2 -l D:\result.jtl -R 192.168.1.101在用例中即可使用${__P(threadnum)}来设置远程线程数和循环次数
5. jmeter 调用外部命令行,可用OS Process Sampler,python则会接受到三个参数
6. Linux 下使用分布式
1. server端修改jmeter-server.sh, RMI_HOST_DEF=-Djava.rmi.server.hostname=本机IP地址
2. 控制器端启动时需要传入-Djava.rmi.server.hostname=控制器的IP地址
7. 正则表达式提取器,提取多个值时,可用模板$1$2$表达多个匹配,并用"引用名称_g1"来表示分组名