jmeter笔记
正则:
多个提取还是用多个正则,不然参数不方便用,看情况
5种提取
Dummy Sample 是造请求和返回数据,用例判断断言写的是否正确,或者用返回的参数做一些测试
正则,json(2种),边界,beanshell脚本
很多地方有疑问的时候,通过fidder抓接口参数,日志
1 a) vars.get(String key):从jmeter中获得变量值
b) vars.put(String key,String value):数据存到jmeter变量中
2.JMeter的参数化共三种:
1.CSV数据文件配置(适用于大量测试数据时使用)位置处于配置元件中 (函数助手的csv,没有配置的功能强大)
2.用户参数(适用于少量测试数据)位置:处于前置处理器中,随
3.用户定义的变量(适用于常量的配置,比如数据库地址,测试环境地址,登录数据等等)位置:1在测试计划页面中。2.在配置元件中 不随线程组变化,比较固定的,只执行一次
2. 1.当jmeter脚本非常复杂的时候,可以通过测试片段分模块管理用例
模块控制器调用测试片段,模块控制器提供了一种在运行时将测试片段替换为当前测试计划的机制
https://blog.csdn.net/ningmengban/article/details/108862809
//指定需要写入到哪个文件,格式:TXT,csv
FileWriter fstream = new FileWriter("D:\apache-jmeter-5.0\token_num.csv",true);
//创建一个字符缓存输出流
BufferedWriter out = new BufferedWriter(fstream);
//返回的结果有值从数字 2 开始,一共有 5 次,那么我们这里就小于等于 6
for(int num=2; num<=6; num++){
//拼接变量名称
token_num = "token_num"+"_"+num;
System.out.println(token_num);
//把拼接的名称赋值给 token_num
vars.put("token_num",token_num);
System.out.println(vars.get(token_num));
//vars.get()获取到变量名称,并和上面返回的 token_num_(2,3,4,5,6)名称一致,取到变量的值
out.write(vars.get(token_num)+"\n");
}
out.close();
fstream.close();
【示例1-----JSONObject对象】
String json=prev.getResponseDataAsString(); 获取请求返回值
JSONObject myJson=JSON.parseObject(json);将String类型的返回值构造成JSONObject对象,才可以使用java对象的方法对期进行操作;
JSONObject data=myJson.getJSONObject("data"); 转换为json,
vars.put("name",data.getString("name")); //将JSON对象保存为String类型,Jmeter中的请求的参数均以字符串的形式传递; 获取作为下一个post参数
import org.json.JSONObject;
String response_data = prev.getResponseDataAsString(); //获取请求返回值。注意此处只能获取到String类型;
log.info(response_data);
JSONObject data_obj = new JSONObject(response_data); //将String类型的返回值构造成JSONObject对象,才可使用Java对象的方法对其进行操作;
String StrData = data_obj.get("data").toString(); //获取作为下一个请求post的参数值data;
log.info(StrData); //Log中显示的字段顺序会与“response_data”中的字段顺序有差异,JSON串的正确与否无关字段顺序;
JSONObject JsonData = new JSONObject(StrData); //将获取到的“data”字符串构造成JSON对象;
JsonData.put("issueHandleType", "CLOSE"); //更新issueHandleType的json值;
JsonData.put("solution", "2017_解决方案_性能测试");
JsonData.put("status", "CLOSED");
JsonData.put("handleType", "CLOSE");
JsonData.put("complaintTypeSecondCode", "URGE"); //异常类型;
JsonData.put("complaintTypeSecondName", "催件");
JsonData.put("lastUpdateTime", "${timestamp}");
JsonData.put("lastUpdator", "${UserName}");
JsonData.put("lastUpdatorName", "${UserName}");
String NewData = JsonData.toString(); //将JSON对象保存为String类型,Jmeter中的请求的参数均以字符串的形式传递;
vars.put("NewStrData",NewData);log.info(NewData);
【示例2-----JSONArray对象】 数字,一对一对的
import org.json.JSONObject;
import org.json.JSONArray;
try {
String response_data = prev.getResponseDataAsString(); //获取请求返回值。注意此处只能获取到String类型;
JSONObject data_obj = new JSONObject(response_data); //将String类型的返回值构造成JSONObject对象;
JSONArray data_array = data_obj.getJSONArray("data"); //data为数组
int len = data_array.length(); //获取data数组的长度
String strlen = Integer.toString(len);
vars.put("MessageNum",strlen);
//log.info(strlen);
int i = 0;
for(;i < len;++i)
{
JSONObject jsonTemp = (JSONObject)data_array.getJSONObject(i); //获取 data[ i ] 数组对象;
switch(i)
{
case 0:
vars.put("uuid_1", jsonTemp.getString("uuid"));
vars.put("conversationId_1", jsonTemp.getString("id"));
break;
case 1:
vars.put("uuid_2", jsonTemp.getString("uuid"));
vars.put("conversationId_2", jsonTemp.getString("id"));
break;
//..................................此处省去7次处理
case 10:
vars.put("uuid_11", jsonTemp.getString("uuid"));
vars.put("conversationId_11", jsonTemp.getString("id"));
break;
default:
break;
}
}
}
catch (Throwable ex) {
log.error("Failed in Beanshell", ex);
throw ex;
}
2.正则
使用说明:
由于我们在匹配数字里填写了-1,匹配到的是多个值,我们就可以通过
${变量名_坐标}的方式获取:
${image_1}表示第一个匹配到的
${image_2}表示第二个匹配到的
多个模板 <a href="http://www.weather.com.cn/weather1d/(.*?).shtml#search" title="(.*?)" target="_blank">
${list_1_g1}获取第一模板的第一个数据
${list_1_g2}获取第二模板的第一个数据
${list_2_g1}获取第一模板的第二个数据
${list_2_g2}获取第二模板的第二个数据
如果要循环他们的结果,循环控制器和计数器一起使用
实现循环读取库的用户信息,并传递到下一个登录请求
接下来就要思考怎么将查库得到的用户手机号,作为参数传递给下一个登录请求。
这里需要引用到 ForEach控制器
我们要取的值为phone_1、phone_2、phone_3......,所以这里输入phone
Start index for loop:0;
变量循环启动的索引,第一个元素起始索引+1
End index for loop:6;
变量循环结束的索引。
所以这里是取值phone_1、phone_2、...、phone_6
输出的变量名称:t_phone;
用于替换循环下的请求的变量 (参考https://blog.csdn.net/ningmengban/article/details/93759924)
2.$.data.list[*].id json提取器,
2.正则有多个参数,取参数,调用的时候就用debugsample里面的${citycode,city1,city2_g1},就能取到对应的debugsample里面的参数
2.
参数不需要public static String test(),直接写就行
"id".(.*?)"name".(.*?) $1$$2$
1、. 匹配任意除换行符“\n”外的字符; 2、*表示匹配前一个字符0次或无限次; 3、?表示前边字符的0次或1次重复
2。
host包含特殊符号导致,需要进行处理。
将Server Name和path分开写即可。server name中包含Path路径后,不识别导致
3.img.pconline.com.cn/images(.*?).jpg 正则表达式也可以从链接取,从哪里去都可以看你自己
找元素,如果浏览器里面都找不到,正则也不行
5.jmeter要多压测几次,有个大概结果
4.函数__V可以用于执行变量名表达式,并返回执行结果
${__V(url2_${num})} ${_V(account_${no})} ${__V(videoUrl_${__Random(1,9,)})}
1. http://testingpai.com/article/1595507289146 循环结果中的值(结果中有很多数据)
方法一: 使用 foreach 控制器,循环的使用这 100 个手机号,进行登录
https://www.cnblogs.com/yaoteng/p/11019643.html jmeter4种参数的说明
因为我用的用户定义变量参数,该参数一次只能读取一个
jmeter目录介绍
插件放在\lib\ext 下面,顺带介绍下 JMeter 的目录:
Bin:包含启动、配置等相关命令
Docs:官方本地文档目录
Extras:辅助库
Lib:核心库,包含 JMeter 用到的各种基础库和插件
Licenses:软件的许可证
printable_docs:可打印版本文档目录
bin:jmeter.properties:核心配置文件,基本配置都在里面,log4j.conf: 日志配置管理,jmeter.log:运行日志记录,什么输出信息、警告、报错都在这里进行了记录,jmeter.bat:windows 下的 JMeter 启动文件,shutdown.cmd windows 下 JMeter 关闭文件,stoptest.cmd windows 下 JMeter 测试停止文件,jmeter-server.bat: window 下 JMeter 服务器模式启动文件,jmeter.gui.action.save.backup_on_save=true 设置是否启动自动备份,默认是 true,log_level.jmeter=INFO 设置日志输出级别,log_file=jmeter.log 设置日志输出目标文件,默认为 jmeter.log,jmeter.bat 也是另外一个比较重要的文件,主要在于 jvm 这个配置,可以调接配置缓解这样的问题,set HEAP=-Xms2048m -Xmx2048m;