jmeter页面录制
场景:有时候我们需要对页面进行录制
一、页面录制
1、jmeter配置
新建脚本,配置代理和录制控制器
测试计划->添加->线程(用户)->线程组


线程组->添加->逻辑控制器->录制控制器

测试计划->添加->非测试元件->HTTP代理服务器

代理配置:IP+端口

录制控制器
${__setProperty(new_loginCookie,${loginCookie},false)}
${__P(new_loginCookie)}

2、网络配置
证书导入


在jmeter/bin下找到ApacheJMeterTemporaryRootCA.crt文件导入进去

网络配置,选择对应的内网


网页代理(http)和安全网页代理(https)配置一样

3、录制
点击录制
问题:使用VPN可能会不成功
4、录制查看
二、cookie控制执行
如果token有效期比较长而且可以同一个用户使用的话,我们可以使用吞吐量控制器
每个线程每次执行都需要不一样的token的话(针对不同的用户),可以使用setup方式
三、脚本常遇到的问题
1、时间变量
获取当前时间: 精确到毫秒:${__time(,)} 精确到秒:${__time(/1000,)} 当前时间偏移,比如当前时间前一个小时: 精确到秒:${__longSum(${__time(/1000,)},-3600,)} 当前时间的随机值 ${__longSum(${__time(/1000,)},${__Random(-100,200,)},)}
2、json提取条数判断
Jsonpath语法:https://blog.csdn.net/lwg_1540652358/article/details/84111339
具体到jmeter中可以通过这个页面进行实验:https://jmespath.org/tutorial.html
当前的需求就是从一段json中提取数组里面数据的个数,返回的json数据如下,需要获取appids里面的个数
{"data":{"appids":["bme-uuid-svc","ai-router-move-svc","bfe-dappweb-driver-index-web","bfe-mpush-svc","bme-pricing-task","ai-orderhall-move-svc","ops-crm-link-api"]},"msg":"success","ret":0}
思路:新增后置函数JSON JMESPath Extractor组件,填入length(data.appids),取名变量为appidsLength,然后通过beanshell断言来判断长度
1)新增后置函数JSON JMESPath Extractor组件,填入需要提取的内容,通过长度函数,定义变量appidsLength

2)通过beanshell断言
String lengthStr = vars.get("appidsLength"); log.info("-----------" + lengthStr); if(lengthStr != null && !"".equals(lengthStr)) { Integer appidsLength = Integer.parseInt(lengthStr); if(appidsLength > 1) { Failure = false; } else { Failure = true; } } else { Failure = true; }
jmeter jsonpath https://www.cnblogs.com/inging44/p/11911474.html
3、beanshell
jmeter beanshell: https://www.cnblogs.com/yinwenbin/p/10827943.html
https://www.cnblogs.com/shoebill/p/10881942.html
https://blog.csdn.net/Kelvin_Ye/article/details/89840706
基础知识:
一 内置参数 1、vars :操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法: a) vars.get(String key); 从jmeter中获得变量值 b) vars.put(String key,String value); 数据存到jmeter变量中 2、props :操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值。对应于java.util.Properties。 a) props.get("START.HMS"); 注:START.HMS为属性名,在文件jmeter.properties中定义 b) props.put("PROP1","1234"); 3、ctx:该变量引用了当前线程的上下文 4、prev :获取前面的sample返回的信息,常用方法: a) getResponseDataAsString(); 获取响应信息 b) getResponseCode() ; 获取响应code 5、写入信息到jmeber.log文件:log.info(“This is log info!”) 6、获得当前线程: thread=Thread.currentThread().getName(); user=thread.replaceAll(" ","_")+"_压力测试"; log.info("====打印线程名称===="+user); vars.put("user",user); 二 常见beanshell BeanShell Sampler ,采样器 BeanShell PreProcessor ,前置处理器 BeanShell PostProcessor ,后置处理器 BeanShell Timer ,定时器 BeanShell Listener ,监听器 BeanShell Assertion ,断言 1、在eclipse写好代码,然后把该类打成jar包(在类上点击右键->Export->jar file) 2、把jar包放到jmeter目录\apache-jmeter-2.13\lib\ext下 3、打开jmeter,添加一个BeanShell ,导入我们的jar包,调用里面的方法。 三 断言 //使用vars.get()方法获取变量的值 String message= vars.get("message"); if(!message.equals("success")) { Failure = true; FailureMessage = "规则解析失败"; }else{ FailureMessage = "规则解析成功"; }
beanshell如何读取定义的配置文件值
场景一:如何读取函数助手里面的值
场景二:如何读取props变量的值,以及如何设置他们的值
参考:
录制参考:https://www.cnblogs.com/liulinghua90/p/7060753.html
jmeter登陆获取cookie https://zhuanlan.zhihu.com/p/37391636 https://blog.csdn.net/weixin_41948075/article/details/91564743 https://www.cnblogs.com/mysticbinary/p/12577673.html
https://www.cnblogs.com/meitian/p/3683346.html
https://www.cnblogs.com/danqiu/p/6110800.html
http://testingpai.com/article/1606624204392
https://www.cnblogs.com/meiniu/p/12643373.html https://www.cnblogs.com/liuzhzhao/p/10787502.html https://www.cnblogs.com/yulia/p/10368220.html https://www.cnblogs.com/longchengruoxi/p/13531037.html https://www.cnblogs.com/jane4321/p/13534315.html https://www.cnblogs.com/liuzhzhao/p/10787502.html https://www.cnblogs.com/lelexiong/p/9167668.html https://blog.csdn.net/g695144224/article/details/51802862
如何控制登陆之执行一次,主要是为了获取cookies 1、跨线程组
2、吞吐量控制器
3、仅一次控制器 https://www.cnblogs.com/yiyaxuan/p/12672281.html https://www.cnblogs.com/lelexiong/p/13064230.html
long endTime = ${time(/1000,)}; long startTime = endTime-3600; log.info("++++++++:"+endTime); log.info("++++++++:"+startTime);; ${setProperty(end,${endTime},)}; ${__setProperty(start,${startTime},)};

浙公网安备 33010602011771号