1. 逻辑控制器
1. if逻辑控制器
要求:如果用户是张三我们就发送一个百度请求,否则就不发送。
- 新增一个用户变量 userName
- 新增一个逻辑控制器 > if控制器
- 把http请求拖到if控制器下面,让if控制器成为Http请求的父亲
- 执行发现条件满足,请求成功发送
- 改变条件。再次运行。我们可以发现条件不满足,请求不会发送
2. foreach控制器
要求:有一组关关键字,需要循环取出然后在用百度搜索
- 先创建出如下结构
- 创建3个有规律的变量名
- 设置foreach控制器
- 设置http请求并运行
2. 接口关联
比如接口2的参数需要接口1的结果作为查询条件
要求:获取 www.jd.com 网页的title字段作为www.baidu.com的查询条件
- 新建一个Http请求
- 在请求下面新建一个Xpath提取器。用来提取网页中的title
- 再新建一个请求百度,并引用val变量
- 运行之后是可以看到title属性已经取到了
3. Json提取器
上一个我们说了xpath提取器这里我们演示一下json提取器,其他的可以自行尝试
要求: 从接口返回的json中提取所有name值
- 设置http请求
- 新增一个json提取器
- 添加一个调式取样器
- 运行查看接口返回和调式取样器的结果
4. 跨越线程组传值
我的定义的变量一般只能在当前线程组中使用。不同线程组之间变量无法引用。那我们要怎么解决?
还是上面从获取www.jd.com网页的title字段作为www.baidu.com的查询条件的例子。
现在我们把www.jd.com的请求和www.baidu.com的请求放在不同线程组
- 构建请求
- 使用函数助手给全局设置一个变量
- 有了全局变量Gval我们怎么获取呢?还是使用函数助手生成获取全局变量的表达式
- 给百度请求设置好变量
- 为了保证每个线程组顺序执行,记得勾选独立运行每个线程组
- 选中查看结果树,运行
5. 性能测试
模拟各种正常的,峰值的测试环境,检测程序的各项性能指标是否达标
1. 高并发
要求: 同一时刻有100个人去访问同一个接口。统计高并发情况下平均响应时间和错误率
- 添加请求
- 为请求添加同步器
- 添加聚合报告
- 选中聚合报告,运行,查看结果
2. 高频率
QPS: query per seconds 每秒查询数,每秒访问多少次服务器
要求: 一个用户以20QPS的频率访问一个接口,持续15秒,统计服务器平均响应时间
- 添加一个常数吞吐量定时器
- 设置线程组
3.运行查看结果
6. 分布式
当单台机器的 CPU 或内存无法支撑数万甚至数十万的并发用户(Threads)时,就需要使用JMeter 分布式测试
其核心架构是“一主多从”:
- Master (控制机):负责分发测试脚本(.jmx)给各个 Slave,并汇总测试结果。
- Slaves (负载机/从机):负责执行具体的测试任务,向目标服务器发送请求。
为了测试,在本机运行两个jmeter
master配置
进入bin目录,修改jmeter.properties如下配置
# 禁用 SSL server.rmi.ssl.disable=true # 添加从机的ip和地址 remote_hosts=127.0.0.1:11000slave配置
进入bin目录,修改jmeter.properties如下配置
# 禁用 SSL server.rmi.ssl.disable=true启动从机
在从机的bin目录下面,启动完成后黑窗口不要关闭
jmeter-server-Djava.rmi.server.hostname=127.0.0.1-Dserver_port=11000正常启动Master
bin目录点击运行jmeter.bat,启动后能看到能连接到从机
随便建一个请求测试
7. 生成图形化报告
在Jmeter中可以以图形化(饼状图,柱状图。。。)的方式显示脚本运行结果,较于之前的聚合报告或者查看结果树更直接美观
生成图形化报告命令:
jmeter -n -t jmx脚本文件 -l 日志文件 -e -o 目录
-n 无图形化运行 -t 被运行的脚本 -l 将日志写到哪里 -e 生成测试报告 -o 输出到制定目录- 我们拿这个做个测试
- 在jmter的bin目录执行一下命令
jmeter -n -t D:\文档\jmeter\聚合报告.jmx -l D:\文档\jmeter\test.log -e -o D:\文档\jmeter\res
- 查看生成的结果
12.参考
参考视频:https://www.bilibili.com/video/BV1ty4y1q72g