环境准备1. 首先需要安装JDK,具体参照安装配置JDK2. jmeter软件最新下载地址,本例内容基于 jmeter 5.1.1 版本开展3. 修改jmeter.properties文件配置:#sampleresult.default.encoding=ISO-8859-1 改为sampleresult.default.encoding=UTF-84. Http接口信息如下(本篇文章所有例子都是基于此接口信息,可用mock模拟此接口)POST:URL:http://127.0.0.1:9999/posttsContent‐Type: application/json入参:{"usename": "test","password" : "test"}返回值:"success":"true"GET:URL:http://127.0.0.1:9999/geturl返回值:"success": "get"一、常用功能图二、功能配置2.1 jmeter修改为中文界面操作步骤:1. 临时修改:jmeter界面>>Options>>Choose Language>>Chinese(Simplified)2. 永久修改:修改jmeter.properties文件配置:#language=en 改为language=zh_CN 2.2 配置元件2.2.1 Http信息头管理操作步骤:1. 选择测试计划>>右键>>添加>>配置元件>>Http信息头管理2. 输入名称 Content-Type 值输入 application/json注:一般json形式的传参方式需要按此配置信息头2.2.2 Http请求默认值应用场景:有两个环境测试环境ip=192.168.1.188,预生产环境:ip=192.168.1.88,用Http请求默认值配置ip,可轻松实现两个环境之间的切换操作步骤:1. 选择测试计划>>右键>>添加>>配置元件>>Http请求默认值2. 设置如下3. 如上图在Http请求默认值设置共性信息,在http请求取样器无需再设置ip,请求会调用默认值说明:Http请求默认值说白了就是统一设置Http请求属性参数,如协议、服务器名称或ip、端口号等的默认值,当Http请求属性参数不填的情况下调用默认值,但是如果Http请求对这些参数有定义,那么优先使用自定义参数2.3 取样器2.3.1 调试取样器2.3.1 调试取样器操作步骤: 选择线程组>>右键>>添加>>取样器>>调试取样器>>设置打印jmeter变量:说明:可通过设置查看jmeter属性、变量以及系统属性等值,一般与监听器>>察看结果树配合使用查看结果树值:如打印(变量)password=(值)test2.4 逻辑控制器2.4.1 如果(if)控制器操作步骤:1. 选择线程组>>右键>>添加>>逻辑控制器>>如果(if)控制器2. 不勾选“interpret condition as variable expression”,输入 1==13. 执行之后结果为true,必定会执行如果控制器下的http请求说明:如上图,不勾选“interpret condition as variable expression”,那就可以直接用表达式 1== 1判断为true执行http请求,如勾选“interpret condition as variable expression”,不能直接用表达式1==1,需借助函数助手_jexl3和_groovy函数计算为true/false,如果为true 才可以执行http请求,如下图三、参数化3.1 CSV数据文件设置前提条件:如D盘有文件cs.txt内容如下#第一个参数,第二个参数,与CSV数据文件设置的分隔符设置相关test,testuser,pwd操作步骤:1. 选择测试计划>>右键>>添加>>配置元件>>CSV数据文件设置说明:1. CSV数据文件支持 .csv,.dat ,.txt为后缀的文件2. 如上图配置,如果设置线程组1个线程循环3次,则结果如下:#参数调用格式${usename},${password}线程组 1‐1 内容:password=testusename=test线程组 1‐2 内容:password=pwdusename=user线程组 1‐3 内容:password=testusename=test3.2 用户定义变量操作步骤:1. 选择测试计划>>右键>>添加>>配置元件>>用户定义的变量2. 输入名称、值、描述3. 调用变量格式${名称}:如 ${usename}3.3 函数助手3.3.1 Random(随机数)操作步骤:1. Tools>>函数助手对话框2. 设置随机数 1<=sjs_1<=10,点击生成3. 调用变量 ${__Random(1,10,sjs_1)}注:设置随机数:100<=sjs<=200,直接调用变量:${__Random(100,200,sjs)}3.3.2 __CSVRead操作步骤:1. Tools>>函数助手对话框2. 输入文件绝对路径,输入参数下标,0表示第一个参数,点击生成3. 调用变量:${__CSVRead(D:\cs.txt,0)}3.4 用户参数前提条件:设置线程数=2,循环测试=1操作步骤:1. 选择测试计划>>右键>>添加>>前置处理器>>用户参数2. 输入名称、用户值用户参数说明:名称:参数名称用户:参数值每次迭代更新一次:如果有多个线程(线程组线程数设置大于1)使用变量时勾选,不同的线程用不同的值,如果不勾选,所有线程用的是同一个值参数:1.可以定义多个参数,每个参数可以赋多个值 2.在用户值中,可以使用变量,如使用CSV函数 ${__CSVRead(D:\cs.txt,0)},在勾选每次迭代更新一次时,每一个线程都会生成新的值。
3. 在http请求调用变量格式:如${usename}4. 结果:#线程1 内容:POST data:{"usename": "test1","password" : "pass1"}#线程2 内容:POST data:{"usename": "test2","password" : "pass2"}3.5 全局变量应用场景:登录获取token信息(一次请求,setUP线程组),用于订单查询、购买、结账等(多次请求,线程组)操作操作路径:新建一个setUP线程组,名称线程组1,自定义一个全局变量;新建一个普通线程组,名称:线程组2;线程组2调用线程1的全局变量操作步骤:1. 选择测试计划>>右键>>添加>>线程(用户)>>Setup线程组2. 选择线程组>>右键>>添加>>后置处理器>>BeanShell后置处理程序3. 脚本输入 ${__setProperty(Pvalue,"全局变量",)}4. 在线程组2调用全局变量: ${__property(Pvalue)}结果:四、模拟用户操作4.1 用户访问取样器4.1.1 Http请求应用场景:如访问百度操作步骤:选择线程组>>右键>>添加>>取样器>>http请求说明: 端口号: https协议默认端口:443;http协议端口号:80,端口号不填则默认80 参数:${usename},usename在用户定义变量已定义;因入参为json格式,因此需在消息体数据填写入参,具体如下图4.2 模拟多用户访问线程组4.2.1 Setup线程组操作步骤: 选择测试计划>>右键>>添加>>线程(用户)>>Setup线程组说明:1. 所有操作都在普通线程组前执行,2. 应用场景举例: A、测试数据库操作功能时,用于执行打开数据库连接的操作。
B、测试用户购物功能时,用于执行用户的注册、登录等操作3. 其他属性参照4.2.2 线程组(普通)说明4.2.2 线程组(普通)应用场景:N个用户日夜不停的访问百度操作步骤: 选择测试计划>>右键>>添加>>线程(用户)>>线程组说明:1. 在取样器错误后要执行的动作继续:忽略错误,继续执行;启动下一进程循环: 忽略错误,线程当前循环终止,执行下一个循环;停止线程:当前线程停止执行,不影响其他线程正常执行;停止测试:整个测试会在所有当前正在执行的线程执行完毕后停止;立即停止测试:整个测试会立即停止执行,当前正在执行的取样器可能会被中断; 这几个配置项控制了“当遇到错误的时候测试的执行策略”是否会继续执,一般默认“继续”2. 线程数 用户并发数,例如10个用户访问,则线程设置=103. Ramp-Up period(秒)设置启动所有线程所需要的时间。
如果选择了10个线程,并且ramp-up period是100秒,那么JMeter将使用100秒启动并运行10个线程。
每个线程将在前一个线程启动后10(100/10)秒后启动。
当这个值设置的很小、线程数又设置的很大时,在刚开始执行时会对服务器产生很大的负荷4. 循环次数 可填写次数,如线程数=10,循环测试=5,聚合报告总样本=10*5=50,也可以勾选永远复选框,勾选之后请求一直发送5. 持续时间 持续时间设置10秒,必须勾选循环测试复选框+调度复选框,只有这样可持续发送10秒钟请求6. 启动延时 持续时间设置10秒,启动延迟时间设置5秒,必须勾选循环测试复选框+调度复选框+延迟创建线程直到需要复选框,只有这样,启动之后,延迟5秒钟,持续发送10秒钟请求4.2.3 TearDown线程组操作步骤: 选择测试计划>>右键>>添加>>线程(用户)>>TearDown线程组说明: 1.所有操作都在普通线程组后执行 2.应用场景举例: A、测试数据库操作功能时,用于执行关闭数据库连接的操作。