POST:
URL:http://127.0.0.1:9999/postts
Content-Type: application/json
入参:
{
"usename": "test",
"password" : "test"
}
返回值:"success":"true"
GET:
URL:http://127.0.0.1:9999/geturl
返回值:"success": "get"
操作步骤:
操作步骤:
注:一般json形式的传参方式需要按此配置信息头
应用场景:有两个环境测试环境ip=192.168.1.188,预生产环境:ip=192.168.1.88,用Http请求默认值配置ip,可轻松实现两个环境之间的切换
操作步骤:
3. 如上图在Http请求默认值设置共性信息,在http请求取样器无需再设置ip,请求会调用默认值
说明:Http请求默认值说白了就是统一设置Http请求属性参数,如协议、服务器名称或ip、端口号等的默认值,当Http请求属性参数不填的情况下调用默认值,但是如果Http请求对这些参数有定义,那么优先使用自定义参数
操作步骤:
选择线程组>>右键>>添加>>取样器>>调试取样器>>设置打印jmeter变量:
说明:可通过设置查看jmeter属性、变量以及系统属性等值,一般与监听器>>察看结果树配合使用
查看结果树值:如打印(变量)password=(值)test
操作步骤:
说明:如上图,不勾选“interpret condition as variable expression”,那就可以直接用表达式 1== 1判断为true执行http请求,如勾选“interpret condition as variable expression”,不能直接用表达式1==1,需借助函数助手_jexl3和_groovy函数计算为true/false,如果为true才可以执行http请求,如下图
前提条件:如D盘有文件cs.txt内容如下
#第一个参数,第二个参数,与CSV数据文件设置的分隔符设置相关
test,test
user,pwd
操作步骤:
说明:
#参数调用格式${usename},${password}
线程组 1-1 内容:
password=test
usename=test
线程组 1-2 内容:
password=pwd
usename=user
线程组 1-3 内容:
password=test
usename=test
操作步骤:
操作步骤:
注:设置随机数:100<=sjs<=200,直接调用变量:${__Random(100,200,sjs)}
操作步骤:
前提条件:设置线程数=2,循环测试=1
操作步骤:
用户参数说明:
名称:参数名称
用户:参数值
每次迭代更新一次:如果有多个线程(线程组线程数设置大于1)使用变量时勾选,不同的线程用不同的值,如果不勾选,所有线程用的是同一个值
参数:
1.可以定义多个参数,每个参数可以赋多个值
2.在用户值中,可以使用变量,如使用CSV函数 ${__CSVRead(D:\cs.txt,0)},在勾选每次迭代更新一次时,每一个线程都会生成新的值。
#线程1 内容:
POST data:
{
"usename": "test1",
"password" : "pass1"
}
#线程2 内容:
POST data:
{
"usename": "test2",
"password" : "pass2"
}
应用场景:登录获取token信息(一次请求,setUP线程组),用于订单查询、购买、结账等(多次请求,线程组)操作
操作路径:新建一个setUP线程组,名称线程组1,自定义一个全局变量;新建一个普通线程组,名称:线程组2;线程组2调用线程1的全局变量
操作步骤:
应用场景:如访问百度
操作步骤:选择线程组>>右键>>添加>>取样器>>http请求
说明:
端口号: https协议默认端口:443;http协议端口号:80,端口号不填则默认80
参数:${usename},usename在用户定义变量已定义;因入参为json格式,因此需在消息体数据 填写入参,具体如下图
操作步骤:
选择测试计划>>右键>>添加>>线程(用户)>>Setup线程组
说明:
- 所有操作都在普通线程组前执行,
- 应用场景举例:
A、测试数据库操作功能时,用于执行打开数据库连接的操作。
B、测试用户购物功能时,用于执行用户的注册、登录等操作- 其他属性参照4.2.2 线程组(普通)说明
应用场景:N个用户日夜不停的访问百度
操作步骤:
选择测试计划>>右键>>添加>>线程(用户)>>线程组
说明:
- 在取样器错误后要执行的动作
- 继续:忽略错误,继续执行;
- 启动下一进程循环: 忽略错误,线程当前循环终止,执行下一个循环;
- 停止线程:当前线程停止执行,不影响其他线程正常执行;
- 停止测试:整个测试会在所有当前正在执行的线程执行完毕后停止;
- 立即停止测试:整个测试会立即停止执行,当前正在执行的取样器可能会被中断;
这几个配置项控制了“当遇到错误的时候测试的执行策略”是否会继续执,一般默认“继续”
- 线程数
用户并发数,例如10个用户访问,则线程设置=10- Ramp-Up period(秒)
- 设置启动所有线程所需要的时间。如果选择了10个线程,并且ramp-up period是100秒,那么JMeter将使用100秒启动并运行10个线程。每个线程将在前一个线程启动后10(100/10)秒后启动。
- 当这个值设置的很小、线程数又设置的很大时,在刚开始执行时会对服务器产生很大的负荷
- 循环次数
可填写次数,如线程数=10,循环测试=5,聚合报告总样本=10*5=50,也可以勾选永远复选框,勾选之后请求一直发送- 持续时间
持续时间设置10秒,必须勾选循环测试复选框+调度复选框,只有这样可持续发送10秒钟请求- 启动延时
持续时间设置10秒,启动延迟时间设置5秒,必须勾选循环测试复选框+调度复选框+延迟创建线程直到需要复选框,只有这样,启动之后,延迟5秒钟,持续发送10秒钟请求
操作步骤:
选择测试计划>>右键>>添加>>线程(用户)>>TearDown线程组
说明:
1.所有操作都在普通线程组后执行
2.应用场景举例:
A、测试数据库操作功能时,用于执行关闭数据库连接的操作。
B、测试用户购物功能时,用于执行用户的退出等操作。
3.其他属性参照4.2.1.2 线程组(普通)说明
应用场景:用户每秒30的频率访问百度
前提条件:
在一个线程组下有一个http请求,线程组设置如下:
操作步骤:
说明:目标吞吐量是按每分钟的样本量计算,所以实际值=30(TPS)*60=1800
- This thread only(只有此线程):控制每个线程的吞吐量,选择这种模式时,总的吞吐量为设置的target Throughput 乘以该线程的数量
- All active threads(所有活动的线程):设置的target Throughput 将分配在每个活跃线程上,每个活跃线程在上一次运行结束后等待合理的时间后再次运行。活跃线程指同一时刻同时运行的线程。
- All active threads in current thread group(当前线程组钟的所有活动线程):设置的target Throughput 将分配在当前线程组的每一个活跃线程上,当测试计划中只有一个线程组时,该选项和All active threads 选项的效果完全相同。
- All avtive threads(shared)(所有活动线程(共享)):与All active threads的选项基本相同。唯一区别是,每个活跃线程都会在所有活跃线程上一次运行结束后等待合理的时间后再次运行。
- All active threads in current thread group(shared)(当前线程组钟的所有活动线程(共享)):与All active threads in current thread group 基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程的上一次运行结束后等待合理的时间后再次运行
聚合报告结果:
说明:如上图吞吐量(TPS)一直控制在30
应用场景:用户每隔一秒访问百度
操作步骤:
说明:单位毫秒,1000毫秒=1秒钟,如上设置,即可控制每一次http请求间隔1秒钟发送
应用场景:判断其正确性,例如登录是否成功;
前提条件:入参正确,请求返回的正确返回值:“success”:“true”;
操作步骤:
结果
说明:如上图结果,其中一个请求响应返回"success":"true"与测试模式设置一致,则返回正常状态=200,察看结果树显示绿色,其中一个请求相应返回空,则返回异常状态=400,显示红色
应用场景:下一个请求需要用到上一个请求的返回值,例如购买一件商品必须首先知道商品的价格;
前提条件:入参正确,请求返回的正确返回值:“success”:“true”;
操作步骤:
说明:
A.引用名称:下一个请求要引用的参数名称,如填写Atask,则可用${Atask}引用它。
B.正则表达式:
():括起来的部分就是要提取的。
.:匹配任何字符串。
+:一次或多次。
?:在找到第一个匹配项后停止。
B.模板:用$$引用起来,如果在正则表达式中有多个正则表达式,则可以是$2$$3$等等,表示解析到的第几个值给title。如:$1$表示解析到的第1个值
C.匹配数字:0代表随机取值,1代表全部取值,通常情况下填0
D.缺省值:如果参数没有取得到值,那默认给一个值让它取,我填的Error。
操作步骤:
选择线程组>>右键>>添加>>监视器>>聚合报告
说明: 性能测试重要参考依据,关键指标信息描述如下:
Samples(样本) -- 本次场景中一共完成了多少个线程
Average(平均值) -- 平均响应时间(ms)
Median (中位数)-- 统计意义上面的响应时间的中值
90% Line(90%) -- 所有线程中90%的线程的响应时间都小于xx
95% Line(95%) -- 所有线程中95%的线程的响应时间都小于xx
99% Line(99%) -- 所有线程中99%的线程的响应时间都小于xx
Min (最小值)-- 最小响应时间
Max(最大值) -- 最大响应时间
Error (异常%)-- 出错率
Troughput(吞吐量) -- 吞吐量
Received KB/sec(接收) -- 以接收流量做衡量的吞吐量
Sent KB/sec(发送) -- 以发送流量做衡量的吞吐量
操作步骤:选择线程组>>右键>>添加>>监视器>>察看结果树
说明:一般作为调试使用,例如查看http的请求动作与响应结果,验证其是否正确
操作步骤:选择线程组>>右键>>添加>>监视器>>用表格察看结果
说明:一般作为调试使用,例如查看http的请求情况,按线程统计请求时间、状态、流量等情况
应用场景:传一个字母按时间生成一个流水号,例如当前时间是:2020年03月30日12点45分18秒,传一个字母A,生成流水A20200330124518
前提条件:准备一个可生成流水号的jar包:serialNum.jar,具体生成方法点击此
操作步骤:
1.选择测试计划>>浏览>>选择serialNum.jar(文件可在任意目录下),如图
2.新建一个BeanShell,选择线程组>>右键>>添加>>采样器>>BeanShell取样器,输入脚本:
#import 包名1.包名N.java文件名
import serialNum.SetserialNum;
#实例化
SetserialNum serial = new SetserialNum();
#调用生产流水方法
String seristrNum = serial.setNum("A");
#参数赋值
vars.put("seristrNum", seristrNum);
#打印日志
log.info(seristrNum)
说明:上图标红部分的操作是为了打印日志,前置处理/后置处理器也可以添加BeanShell处理程序,可根据实际情况选择使用
操作步骤:
说明:如果是前面两种方式,肯能你会发现,不方便管理自己的jar包,第三种方式易于管理自己的jar包,也防止误删
操作步骤:
内容编码设置:UTF-8
操作步骤:
操作步骤:修改配置jmeter.properties文件:#sampleresult.default.encoding=ISO-8859-1 改为sampleresult.default.encoding=UTF-8