- 提取某值用作全局变量使用
a.设置JSON提取器,提取token
b.用BeanShell后置处理程序,将token设为全局变量,script下填入如下:
String token = bsh.args[0];
KaTeX parse error: Expected group after '_' at position 2: {_̲_setProperty(ne…{app_token},)}
备注:str = bsh.args[0],表示获取数组参数
KaTeX parse error: Expected group after '_' at position 2: {_̲_setProperty(全局…{引用值为Json提取器中设置的名称},)}
c.引用全局变量token,在需要使用的位置引用:引用方式写成 KaTeX parse error: Expected group after '_' at position 2: {_̲_P(newtoken)} 或{__property(newtoken)} 都可 - 获取时间戳、格式化时间
通过函数助手,生成一个_time 函数,如果参数为时间戳,公式如下:
${__time(,)} : 默认该公式精确到毫秒级别, 13位数
${__time(/1000,)} : 该公式精确到秒级别, 10位数
3、 如果参数需要为当前日期,那公式为:
${__time(yyyy-MM-dd,)}
${__time(YMDHMS,)}
4.MD5加密
最简单的是使用内置函数digest和MD5
- 拼接参数进行加密
a.前置处理器中进入拼接
b.提交处引用
- 如何模拟的批量用户来自不同的IP地址
为什么要IP伪装和iP欺骗:第一是绝大部分服务器出于安全考虑会对同一IP地址做过滤;第二是做压测时有这样的场景,比如某些业务同一个ip频繁请求,请求的数据会被服务器做丢弃处理。
内网压测:ip欺骗是在局域网里面找一些没有被使用过的ip地址,然后以这些ip地址发请求过去,这样的话,服务端接收到的ip地址,都是你局域网里面的ip,它的确是模拟了其他ip的。
外网压测:是把咱们的系统部署到外网上了,所有的人都可以访问,ip欺骗模拟的ip还是局域网里面的那些ip,你公司里面整个网络的出口都是一样的,所以外网压测ip欺骗无用。
Jmeter实现IP欺骗
a.给电脑添加10个虚拟IP,打开cmd用管理员身份输入for /l %i in (起始数字,1,结束数字) do netsh interface ip add address “以太网” IP前缀.%i 子网掩码
例如:for /l %i in (10,1,210) do netsh interface ip add address “以太网” 10.200.10.%i 255.255.254.0
b.将新增的200个ip参数化,储存在本地的scv文件中
c.在需要ip欺骗的http请求中,修改Source Address(选择IP/Hostname),指定请求要用到的本地地址(参数化)
d.如何批量删除上面添加的ip地址呢?
1.以管理员身份运行cmd,第一步,输入:netsh -c int ip dump >c:\ip.txt输入后,在C盘根目录看到一个ip.txt的文件,内容为当前网卡的设置信息
2.编辑ip.txt文件,把想要删除的ip在ip.txt里删除掉,并保存修改后的文件。
3.输入:netsh -f c:\ip.txt 。重启电脑后生效。
8. Jmeter写回结果到Excel
a.下载jxl.jar包放在Jmeter的安装lib目录下(jxl.jar的作用是完成对Excel的读写以及修改操作),
- Jmeter操作数据库
批量删除数据:条件id存放在CSV中,且id都必须存在。
批量添加数据:
批量修改数据: 同理
批量查询语句:例如查询年龄大于等于35到45之间的人员
多条语句查询:
- 如何解决增加(insert into)和修改(update)数据库出现的乱码(在Database URL后添加characterEncoding=UTF-8,该处编码跟数据库的编码保持一致,例如mysql查看编码:选某个表–右键–设计表–选项—字符集)
Jmeter参数化时,中文乱码问题解决:
第一种方法:参数化文件中文乱码,可在“csv文件设置”将编码改为“GB2312”即可
第二种方法:将csv文件后缀修改txt,然后另存为时将下方的编码格式修改为UTF-8保存 - 查询多条语句时,选Callable Statement与Prepared Select Statement的区别
callable statement会把多条语句查询的结果显示出来,而Prepared Select Statement只显示第一条语句的查询结果。 - 查询的结果放在变量里(Variable names)或结果集里(Result variable name)的区别
取值方式不一样:Variable names的引用 n a m e 数 字 ,而 R e s u l t v a r i a b l e n a m e 是在 B e a n s h e l l S a m p l e r 中写代码从结果集取值作为变量,之后在需要引用的地方 {name_数字},而Result variable name是在Beanshell Sampler中写代码从结果集取值作为变量,之后在需要引用的地方 name数字,而Resultvariablename是在BeanshellSampler中写代码从结果集取值作为变量,之后在需要引用的地方{代码中保存的变量名字}即可,Beanshell Sampler中的代码如下:
#结果集中取值作为变量
columnvalue=vars.getObject("结果集的变量名").get(结果集的索引值,从0开始).get("对应列的字段名");
#把数据保存起来
vars.put("变量名字",columnvalue)
-
取样器的Debug Sampler和后置处理器的Debug postprocessor区别
在写测试脚本过程中,需要先调试脚本是否能够跑通,这是可以使用Debug Sampler取样器辅助调试。 -
线程数和循环次数的区别
-
准备的测试数据,只想执行奇数或偶数编号的用例(只想执行指定的几个测试数据)?答:推荐使用if控制器
备注:
执行奇数用例判断条件:KaTeX parse error: Expected group after '_' at position 2: {_̲_jex13({id}%21,)}
执行偶数用例判断条件:KaTeX parse error: Expected group after '_' at position 2: {_̲_jex13({id}%20,)}
执行随机指定用例:5条以内用 ||,5条以上在数据表的一列构造数据标签run,执行标记1,不执行标记0,再在csv data set配置中添加一个名称run,表达式KaTeX parse error: Expected group after '_' at position 2: {_̲_jex13({run}==1,)}
16.Jmeter把查询出来的数据保存到txt文件中
Beanshell中代码如下:
//将查询的结果保存在test.txt文件中
FileWriter fstream=new FileWriter("E:/test.txt",false);
//这里需要注意false是覆盖写入,true是追加
BufferedWriter out=new BufferedWriter(fstream);
for(int num=1; num<=3; num++){
//拼接变量名称
name = "name"+"_"+num;
password = "password"+"_"+num;
//把拼接的名称赋值给 username
// vars.put("username",name);
// vars.put("passw",password);
out.write(vars.get(name)+" ");
out.write(vars.get(password)+",");
}
//out.write(columnvalue+",");
out.close();
fstream.close();