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/cookie问题,针对不同的场景我们使用也不一样

如果token有效期比较长而且可以同一个用户使用的话,我们可以使用吞吐量控制器

每个线程每次执行都需要不一样的token的话(针对不同的用户),可以使用setup方式

多个接口流量并发控制 https://www.cnblogs.com/Detector/p/8665923.html

 

 

三、脚本常遇到的问题

1、时间变量

jmeter时间处理:

https://www.cnblogs.com/dinghanhua/p/9982288.html https://www.cnblogs.com/wangxiaoqun/p/12455264.html

https://www.cnblogs.com/qianjinyan/p/10762664.html

https://www.cnblogs.com/uncleyong/p/12768623.html https://blog.csdn.net/hw1932/article/details/64907224

获取当前时间:
精确到毫秒:${__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},)};

posted @ 2022-01-22 11:20  gina_qq  阅读(541)  评论(0)    收藏  举报